RTT 移植的 nimble 蓝牙协议栈的思路整理——3..RTT的nimble协议栈移植工程程序执行流程
再阅读之前,你需要:
1. nimble 协议栈官方源码
2. RTT的 nimble 移植工程![]()
查看RTT的协议栈移植工程的 README.md 文件,了解到该工程可直接使用MDK编译并烧写,还有一个蓝牙应用的示例程序。

程序执行流程分为两个阶段:
阶段1:编译烧写程序到设备,然后设备上电 --> 打印出”hello world”
阶段2:执行工程提供的 Heart rate 应用程序。
阶段1程序执行流程解析:
(前面的汇编和entry函数8说了。。。)
首先执行 componets.c 文件的如下函数:
int rtthread_startup(void);
在这个函数中会调用协议栈初始化函数 nimble_port_rtthread_init() ,初始化nimble协议栈。(因为使用了如下的宏)

然后这个函数同样也会启动RTT调度器,并运行到main函数,main函数会打印出”hello world”,main函数位于rtt-nrf52832-nimble\applications目录下

阶段2程序执行流程解析:
在该阶段我们通过串口输入”ble_hr”,来执行一个蓝牙应用程序。
该应用程序源文件在rtt-nrf52832-nimble\packages\NimBLE-latest\apps\blehr\src工程目录下,使用下面的宏可以将”ble_hr”实现为一个命令,该命令绑定ble_hr函数(我猜的)。

ble_hr函数定义如下:

首先注册了一个 sync_cb 的回调函数(这个函数怎么用的我不知道),初始化了一个定时器,再经过一些配置后(我也不是很明白的配置,才接触蓝牙协议栈,蓝牙5.2规范才看完卷1)。调用 ble_hs_thread_startup 函数来启动主机协议栈处理线程。
运行到这里整个应用执行回一直无限循环的等待处理协议栈事件,如果期望的事件发生,则会调用自定义注册的对应的回调函数。
共同学习
一起进步


浙公网安备 33010602011771号