通过之前搜集学习资料并学习,我们已经了解mbed开发相关的理论知识。那么,现在来实际的操作一下。
通过官方提供的文档(Quick Start Guide for the Freescale Freedom Development Platform FRDM-K64F),我们可以很轻松完成初始的练习。
按住reset键插入openSDAv2的USB口,进入更新firmware模式。电脑上会弹出一个Bootloader的盘符,里面有个bootload.html,用文本打开,可以看到mbed相关的信息。我们根据以前的经验可以了解到这是一个openSDAv2的bootloader。这次的主要练习不是烧录bootloader,所以我们再插拔USB线,进入正常的模式。(为什么按reset按键不可以完成hw reset呢,奇怪,可能openSDAv2的软件里没有做,后续需要了解下)
进入正常模式后,发现出现一个mbed的盘符。那么我们就可以进行代码烧录了。
我们开始最简单的点亮LED灯的练习。
通过mbed的在线编译器,就可以编译成可烧录的镜像,代码如下:
#include "mbed.h" DigitalOut myled1(LED1); int main() { while(1) { myled1 = 1; wait(1); myled1 = 0; wait(1); } }
编译好后,复制镜像到mbed的盘符里,就可以完成烧写了。(会自动重启,盘符消失再出现,但是重启后不执行这个程序,还要按下reset才行,真奇怪)
现象是红灯亮一会,灭一会,如此反复。估计wait(1)是延时1秒。
我们通过spec可以知道,板子上自带一个三色的LED灯,于是我们再做下修改,
#include "mbed.h" DigitalOut myled2(LED2); int main() { while(1) { myled2 = 1; wait(1); myled2 = 0; wait(1); } }
现象变成了绿灯亮灭了。
那么我们再来尝试下:
#include "mbed.h" DigitalOut myled1(LED1); DigitalOut myled2(LED2); int main() { while(1) { myled1 = 1; wait(1); myled1 = 0; wait(1); myled2 = 1; wait(1); myled2 = 0; wait(1); } }
现在是什么现象呢?
现象变成了红黄绿橙,本来应该不亮的地方变成了黄和橙。
奇怪,怎么会这样呢,我们来debug一下。
我们把LED2操作的地方去掉。
#include "mbed.h" DigitalOut myled1(LED1); DigitalOut myled2(LED2); int main() { while(1) { myled1 = 1; wait(1); myled1 = 0; wait(1); //myled2 = 1; //wait(1); //myled2 = 0; //wait(1); } }
现象变成了橙绿。猜测红灯灭的时候,绿灯还亮。
我们再做下修改:
#include "mbed.h" DigitalOut myled1(LED1); DigitalOut myled2(LED2); int main() { while(1) { myled1 = 1; myled2 = 0; wait(1); myled1 = 0; myled2 = 1; wait(1); } }
现象,红绿交替。
当我们两个配合着操作时,达到了红绿交替的期望现象。
至此,我们大胆的怀疑,当定义了LED1和LED2这个对象时(这个定义的写法看上去很怪,像是C++的写法,因为C里面没见到过,是我的基础太差了么?),就完成了他们的初始化。也就默认点亮了他们。
通过上述的LED练习,掌握了mbed的一般开发流程。
也发现了几个问题:
1 现象达不到预期时如何debug?
2 openSDAv2烧写代码时为什么要重启?
3 如何获取更多详细的mbed开发的信息?
4 为什么openSDAv2既支持代码烧写又支持同时运行程序?应该是里面有个RTSO在跑。
…
以上问题,其实可以从软件代码框架中更具体分析。
mbed开发跟普通的开发一样,主要有三层:
1 APP开发。(现在正在做的)
2 OS开发。(mbed OS,或者其他RTOS的支持,目前来看是包含在CMSIS之内了)
3 HAL/Drvier的开发。(目前看来,也是包含在了CMSIS之内了)
还有,在线编译虽然方便,但是对于没有网络的环境来讲,就麻烦多了,可能还要看下如何建立本地的编译环境。
后续重点从这四个方面再学习吧。作为BSP工程师,首选还是先研究下CMSIS的工作机制吧,从ARM展会上也不止一次听到ARM在介绍CMSIS了。