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 函数来启动主机协议栈处理线程。

运行到这里整个应用执行回一直无限循环的等待处理协议栈事件,如果期望的事件发生,则会调用自定义注册的对应的回调函数。

 

共同学习

一起进步

posted @ 2020-08-12 11:16  书山有  阅读(1023)  评论(0)    收藏  举报