大赛日程已过一大半, 进度好像扯到脖子了,承蒙 柠檬哥 亲自电话点醒, 觉得再不法帖就该....
好了,废话不多说, 如果你也跟我一样, 打开一个例程, 却不知道从何看起的话, 你并不孤单!
今天我们就来
基于 Freertos版 BLE Beacon项目简单的分析一下吧.
项目导入之后,就是这个样子的啦. ble 上层的代码都放在了source目录下,那么我们应该从何看起了?这里我简单的画了一下结构组成
- cmsis属于arm规定的一些东西,
- 然后就是驱动层,提供外设驱动,这里我参考nxp官方的文档,把rtos放在了这层,因为它同driver一起为上层服务。
- 然后再上层是Framework层,这层比较有意思,他对OS和Driver都做了一层封装,而且很有意思,后面详细说明。这里,bsp也为它提供服务。也许应该将bsp放在下面?
- 接下来就是 BLE协议栈,这部分基本都是通过 静态lib库提供.a文件,并不开源。
- 最后就是我们需要编写的应用代码了,包括比如数据采集,ble协议相关实现等。
接下来通过代码走向再具体一下:
先从Framework开始吧,因为main函数在这里面哦
这一层抽象了很多东西,基于driver封装的一些功能,方便使用。LED提供了开关、闪烁等功能。keyboard用于管理按键。osa抽象封装了os层,前面说了,由于应用代码是基于framework之上的,所以如果你更换新的os,那你应用层的代码可以不需要做什么修改。从main里面的代码可以知道,虽然整个工程使用的freertos系统,但是我们却不直接调用freertos的任务创建方法。
main函数做完hardware init之后,就直接去跑任务了,流程是这样的:main ->startup_task->main_task
这里就正式进入应用代码了,也就是项目的主任务,beacon工程的所有功能都在这里面实现。包括用户实现的BLE service & characteristc,这些代码都放在了source目录下,如下图
最后再说一下ble stack,相关的有两个部分:lib库和公开接口。
在bluetooth目录下还实现了3个service,都放在profile文件夹下,这个可以说不属于ble stack的内容,而是ble应用层,也许放在source目录下会更合适?
此内容由EEWORLD论坛网友shinykongcn原创,如需转载或用于商业用途需征得作者同意并注明出处