最近,ARM公司低調(diào)的發(fā)布了Mbed OS 5.1,將Mbed再次進行了升級,為今后的物聯(lián)網(wǎng)應用做好準備。
大家知道,在嵌入式領(lǐng)域,現(xiàn)在ARM內(nèi)核的芯片是主流,ARM公司將它的內(nèi)核授權(quán)給其他芯片公司,制造出各種不同的MCU,如ST的STM32、TI的 Sitara? Processors、NXP的Kinetis系列和LPC系列等,幾乎除了Microchip公司外,其他生產(chǎn)MCU的廠家都有ARM內(nèi)核的芯片,包括 現(xiàn)在很多國產(chǎn)的芯片公司也開始提供ARM內(nèi)核的微控制器了。
現(xiàn)在ARM內(nèi)核的芯片非常多,不同廠家現(xiàn)有的型號可能有上千種,每年還在推出很多新的型號。但是開發(fā)ARM芯片不像以前的8x51那樣,只要一個通用的匯 編或者Keil C51軟件就可以完成開發(fā)。因為ARM芯片比51復雜太多,所以現(xiàn)在基本上每個廠家都為自己的芯片提供了專用的函數(shù)庫,提供了芯片的底層模塊驅(qū)動,方便開 發(fā)者快速進行開發(fā)。
比如,開發(fā)ATMEL的程序,一般我們使用Atmel Studio作為IDE,并使用Atmel自己的ASF( Atmel? Software Framework)進行開發(fā),使用ASF提供了各種庫函數(shù)和驅(qū)動,實現(xiàn)芯片的底層功能。ASF的功能很強,除了提供芯片的大部分底層模塊驅(qū)動,還提供了 一些高級的應用模塊(如USB),可以加快開發(fā)速度。Atmel的大部分芯片都可以使用ASF進行開發(fā),ASF不但代碼效率高,而且移植性較好,很多函數(shù) 在不同芯片中的名稱和用法是一樣的,這給程序的移植帶來了方便。
但是現(xiàn)在的芯片實在太多太復雜,也各有特色,那么就有一個比較大的問題,就是大家不可能每種芯片都去學習,等學習好了在去使用。我們也很難只去使用一個廠 家的芯片,不去使用性能更好、功能更豐富,更加適合項目應用的芯片。例如因為某個項目,我們需要將STM32的程序或者NXP的程序移植到ATMEL的 MCU上,雖然它們都是ARM內(nèi)核的芯片,但是因為寄存器各不相同,庫函數(shù)也不相同,程序是不能簡單的直接移植過來運行的。
針對這個情況,同時也是為了適應新的物聯(lián)網(wǎng)時代的變化,ARM提供了一個全新的開發(fā)方式:MBed。Mbed包括了云服務、客戶端、Mbed OS等幾大部分。
對于傳統(tǒng)的嵌入式工程師,Mbed OS是最直接有幫助的,它提供了許多有用的組件。Mbed OS是由Mbed Drivers、Mbed Online IDE、HardwareComponents、Libraries等部分組成。Mbed Drivers提供了簡單易用的API,讓控制器內(nèi)部的各種模塊起來非常簡單;而Mbed Online IDE提供了一個在線開發(fā)環(huán)境,只要通過瀏覽器就可以開發(fā)程序,無需在計算機上安裝開發(fā)軟件;Hardware Components、Libraries提供了各種硬件、傳感器的庫,使用起來比Arduino更加容易。
使用Mbed開發(fā),可以加速和簡化開發(fā)工作,降低開發(fā)難度,讓復雜的底層驅(qū)動變得非常簡單,同時保證了程序的可移植性,無論使用哪種芯片(需要是能夠被所Mbed支持),同樣的外設(shè)功能都可以使用相同的用法。
下面就簡單介紹使用Mbed開發(fā)程序,并和ATMEL傳統(tǒng)的開發(fā)方式相比。
首先我們需要到Mbed網(wǎng)站上注冊一個賬號,這樣才能使用它的Online IDE(在線開發(fā)環(huán)境)和其他資源。然后在Mbed的開發(fā)平臺中(https://developer.mbed.org/platforms/?pvend=42),我們可以看到已經(jīng)有4種型號的芯片支持Mbed了,這也是比較有代表性的幾個型號:
AT SAMR21-XPRO AT SAMW25-XPRO AT SAML21-XPRO-B AT SAMD21-XPRO
我們以AT SAMR21為例,先在Online IDE中創(chuàng)建一個新程序,使用BlinkyLED Hello World模塊。
創(chuàng)建后打開主程序,可以看到如下代碼:
#include“mbed.h”
DigitalOutmyled(LED1);
intmain() {
printf(“RESET”);
while(1) {
myled = 1;
wait(0.2);
myled = 0;
wait(0.2);
printf(“TEST”);
}
}
使用GPIO作為數(shù)字方式輸出,只要將它定義為DigitalOut,輸出高低電平直接直接將它賦值為1或0,既直觀,又簡潔。作為對比,在ASF的Delay例程中,是這樣使用的:
#include
intmain(void)
{
system_init();
delay_init();
struct port_config pin;
port_get_config_defaults(&pin);
pin.direction = PORT_PIN_DIR_OUTPUT;
port_pin_set_config(LED0_PIN, &pin);
port_pin_set_output_level(LED0_PIN,LED0_INACTIVE);
while (true) {
for (int i = 0; i 《 5; i++) {
port_pin_toggle_output_level(LED0_PIN);
delay_s(2);
}
}
兩者對比,Mbed的方式無疑更加簡單方便,更適合初學者。而且Mbed的程序可以非常容易的在Mbed支持的芯片上移植,因為用法都是一樣的,也就是說在 STM32、NXP、Silabs、Nordic等芯片上,都可以使用相同的代碼(只是GPIO的名稱不同),這樣就可以極大降低了程序移植的難度。例 如:
在nordic nRF1822上:
DigitalOut myled(p18);
在STM32F030上:
DigitalOut myled(PA_5);
在KL25Z上:
DigitalOut myled(PTB18);
上面是GPIO的數(shù)字輸出功能,其他功能也是類似的,如:
數(shù)字輸入就是:DigitalIn
雙向GPIO:DigitalInOut
總線方式輸出:BusOut
端口輸出:PortOut
中斷輸入:InterruptIn
模擬輸出:AnalogOut
PWM:PwmOut
定時器:Ticker
串口:Serial
SPI和I2C:SPI/I2C
……
簡單的程序可以直接在Online IDE中開發(fā),復雜的程序,使用Online IDE就不夠方便了,這時可以將程序?qū)С鰜恚褂肁tmel Stduio或者Keil進行開發(fā)。
注:要在SAMR21-XPRO上使用Mbed的完整功能,需要升級開發(fā)板的固件,安裝最新版本的AS7,并連接開發(fā)板時,會自動更新開發(fā)板固件的。
傳統(tǒng)嵌入式和單片機的開發(fā),深入學習并掌握一種或數(shù)種芯片的用法后,就可以解決很多問題,完成一些項目。但是在物聯(lián)網(wǎng)時代,芯片硬件本身將越來越被弱化, 開發(fā)者對硬件底層的關(guān)注越來越少,大家更加側(cè)重于應用層,怎樣快速實現(xiàn)多變的應用需求成為主要矛盾,這時傳統(tǒng)的開發(fā)方式就不太容易滿足要求,而且隨著芯片 性能的提升和價格的降低,開發(fā)工具在芯片的選型時帶來的影響也越來越大,各種快速便捷的開發(fā)方式將越來越多,幾分鐘就能開發(fā)一個應用將變?yōu)榭赡堋?/p>
當然現(xiàn)在的Mbed也還不夠完善,部分外設(shè)驅(qū)動還沒有完成,支持的芯片種類也不夠多,代碼的執(zhí)行效率也沒有原生庫函數(shù)高。但是它為程序的通用性、模塊化開 發(fā)帶來很多便利,為今后的圖形化開發(fā)、積木式開發(fā)提供了可能。就像C語言取代匯編成為嵌入式主流開發(fā)語言一樣,Mbed這樣的開發(fā)方式也會逐漸成為嵌入式 開發(fā)的趨勢。
-
ARM
+關(guān)注
關(guān)注
134文章
9179瀏覽量
369409 -
物聯(lián)網(wǎng)
+關(guān)注
關(guān)注
2914文章
44964瀏覽量
377391
發(fā)布評論請先 登錄
相關(guān)推薦
ARM mbed平臺再添助力 催化物聯(lián)網(wǎng)發(fā)展
谷歌新系統(tǒng)并不是要取代Android,是為物聯(lián)網(wǎng)做準備!
TrustZone走進MCU,ARM為安全物聯(lián)網(wǎng)奠定基礎(chǔ)
ARM寄予厚望的mbed平臺有了什么變化?
![<b class='flag-5'>ARM</b>寄予厚望的<b class='flag-5'>mbed</b>平臺有了什么變化?](https://file1.elecfans.com//web2/M00/A6/9C/wKgZomUMPxOABzkvAACchj1xdxs426.jpg)
Mbed Edge和物聯(lián)網(wǎng)網(wǎng)關(guān)
![<b class='flag-5'>Mbed</b> Edge和<b class='flag-5'>物</b><b class='flag-5'>聯(lián)網(wǎng)</b>網(wǎng)關(guān)](https://file.elecfans.com/web1/M00/00/B7/o4YBAFoBJ0iAXkWRAAJFN0UIITE320.png)
評論