ARM公司低调升级Mbed_为物联网应用做准备

电子说

1.2w人已加入

描述

最近,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

模拟输入:AnalogIn

模拟输出:AnalogOut

PWM:PwmOut

定时器:Ticker

串口:Serial

SPI和I2C:SPI/I2C

……

简单的程序可以直接在Online IDE中开发,复杂的程序,使用Online IDE就不够方便了,这时可以将程序导出来,使用Atmel Stduio或者Keil进行开发。

注:要在SAMR21-XPRO上使用Mbed的完整功能,需要升级开发板的固件,安装最新版本的AS7,并连接开发板时,会自动更新开发板固件的。

传统嵌入式和单片机的开发,深入学习并掌握一种或数种芯片的用法后,就可以解决很多问题,完成一些项目。但是在物联网时代,芯片硬件本身将越来越被弱化, 开发者对硬件底层的关注越来越少,大家更加侧重于应用层,怎样快速实现多变的应用需求成为主要矛盾,这时传统的开发方式就不太容易满足要求,而且随着芯片 性能的提升和价格的降低,开发工具在芯片的选型时带来的影响也越来越大,各种快速便捷的开发方式将越来越多,几分钟就能开发一个应用将变为可能。

当然现在的Mbed也还不够完善,部分外设驱动还没有完成,支持的芯片种类也不够多,代码的执行效率也没有原生库函数高。但是它为程序的通用性、模块化开 发带来很多便利,为今后的图形化开发、积木式开发提供了可能。就像C语言取代汇编成为嵌入式主流开发语言一样,Mbed这样的开发方式也会逐渐成为嵌入式 开发的趋势。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分