最近,ARM公司低調的發布了Mbed OS 5.1,將Mbed再次進行了升級,為今后的物聯網應用做好準備。
大家知道,在嵌入式領域,現在ARM內核的芯片是主流,ARM公司將它的內核授權給其他芯片公司,制造出各種不同的MCU,如ST的STM32、TI的 Sitara? Processors、NXP的Kinetis系列和LPC系列等,幾乎除了Microchip公司外,其他生產MCU的廠家都有ARM內核的芯片,包括 現在很多國產的芯片公司也開始提供ARM內核的微控制器了。
現在ARM內核的芯片非常多,不同廠家現有的型號可能有上千種,每年還在推出很多新的型號。但是開發ARM芯片不像以前的8x51那樣,只要一個通用的匯 編或者Keil C51軟件就可以完成開發。因為ARM芯片比51復雜太多,所以現在基本上每個廠家都為自己的芯片提供了專用的函數庫,提供了芯片的底層模塊驅動,方便開 發者快速進行開發。
比如,開發ATMEL的程序,一般我們使用Atmel Studio作為IDE,并使用Atmel自己的ASF( Atmel? Software Framework)進行開發,使用ASF提供了各種庫函數和驅動,實現芯片的底層功能。ASF的功能很強,除了提供芯片的大部分底層模塊驅動,還提供了 一些高級的應用模塊(如USB),可以加快開發速度。Atmel的大部分芯片都可以使用ASF進行開發,ASF不但代碼效率高,而且移植性較好,很多函數 在不同芯片中的名稱和用法是一樣的,這給程序的移植帶來了方便。
但是現在的芯片實在太多太復雜,也各有特色,那么就有一個比較大的問題,就是大家不可能每種芯片都去學習,等學習好了在去使用。我們也很難只去使用一個廠 家的芯片,不去使用性能更好、功能更豐富,更加適合項目應用的芯片。例如因為某個項目,我們需要將STM32的程序或者NXP的程序移植到ATMEL的 MCU上,雖然它們都是ARM內核的芯片,但是因為寄存器各不相同,庫函數也不相同,程序是不能簡單的直接移植過來運行的。
針對這個情況,同時也是為了適應新的物聯網時代的變化,ARM提供了一個全新的開發方式:MBed。Mbed包括了云服務、客戶端、Mbed OS等幾大部分。
對于傳統的嵌入式工程師,Mbed OS是最直接有幫助的,它提供了許多有用的組件。Mbed OS是由Mbed Drivers、Mbed Online IDE、HardwareComponents、Libraries等部分組成。Mbed Drivers提供了簡單易用的API,讓控制器內部的各種模塊起來非常簡單;而Mbed Online IDE提供了一個在線開發環境,只要通過瀏覽器就可以開發程序,無需在計算機上安裝開發軟件;Hardware Components、Libraries提供了各種硬件、傳感器的庫,使用起來比Arduino更加容易。
使用Mbed開發,可以加速和簡化開發工作,降低開發難度,讓復雜的底層驅動變得非常簡單,同時保證了程序的可移植性,無論使用哪種芯片(需要是能夠被所Mbed支持),同樣的外設功能都可以使用相同的用法。
下面就簡單介紹使用Mbed開發程序,并和ATMEL傳統的開發方式相比。
首先我們需要到Mbed網站上注冊一個賬號,這樣才能使用它的Online IDE(在線開發環境)和其他資源。然后在Mbed的開發平臺中(https://developer.mbed.org/platforms/?pvend=42),我們可以看到已經有4種型號的芯片支持Mbed了,這也是比較有代表性的幾個型號:
AT SAMR21-XPRO AT SAMW25-XPRO AT SAML21-XPRO-B AT SAMD21-XPRO
我們以AT SAMR21為例,先在Online IDE中創建一個新程序,使用BlinkyLED Hello World模塊。
創建后打開主程序,可以看到如下代碼:
#include“mbed.h”
DigitalOutmyled(LED1);
intmain() {
printf(“RESET”);
while(1) {
myled = 1;
wait(0.2);
myled = 0;
wait(0.2);
printf(“TEST”);
}
}
使用GPIO作為數字方式輸出,只要將它定義為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的數字輸出功能,其他功能也是類似的,如:
數字輸入就是:DigitalIn
雙向GPIO:DigitalInOut
總線方式輸出:BusOut
端口輸出:PortOut
中斷輸入:InterruptIn
模擬輸出:AnalogOut
PWM:PwmOut
定時器:Ticker
串口:Serial
SPI和I2C:SPI/I2C
……
簡單的程序可以直接在Online IDE中開發,復雜的程序,使用Online IDE就不夠方便了,這時可以將程序導出來,使用Atmel Stduio或者Keil進行開發。
注:要在SAMR21-XPRO上使用Mbed的完整功能,需要升級開發板的固件,安裝最新版本的AS7,并連接開發板時,會自動更新開發板固件的。
傳統嵌入式和單片機的開發,深入學習并掌握一種或數種芯片的用法后,就可以解決很多問題,完成一些項目。但是在物聯網時代,芯片硬件本身將越來越被弱化, 開發者對硬件底層的關注越來越少,大家更加側重于應用層,怎樣快速實現多變的應用需求成為主要矛盾,這時傳統的開發方式就不太容易滿足要求,而且隨著芯片 性能的提升和價格的降低,開發工具在芯片的選型時帶來的影響也越來越大,各種快速便捷的開發方式將越來越多,幾分鐘就能開發一個應用將變為可能。
當然現在的Mbed也還不夠完善,部分外設驅動還沒有完成,支持的芯片種類也不夠多,代碼的執行效率也沒有原生庫函數高。但是它為程序的通用性、模塊化開 發帶來很多便利,為今后的圖形化開發、積木式開發提供了可能。就像C語言取代匯編成為嵌入式主流開發語言一樣,Mbed這樣的開發方式也會逐漸成為嵌入式 開發的趨勢。
-
ARM
+關注
關注
134文章
9259瀏覽量
372908 -
物聯網
+關注
關注
2921文章
45616瀏覽量
384122
發布評論請先 登錄
相關推薦
評論