最近,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
interwetten与威廉的赔率体系 输入:AnalogIn
模拟输出: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文章
9088浏览量
367412 -
物联网
+关注
关注
2909文章
44578浏览量
372881
发布评论请先 登录
相关推荐
评论