社区导航

 
快捷导航
  • 首页
  • 论坛
  • 查看新帖
  • 最新回复
  • 社区活动
  • 联系管理员
  • 消灭零回复
  • E金币兑换
  • 干货
搜索
查看: 212|回复: 3

[蓝牙BLE] STEVAL-IDB007V1 SensorDemo代码的启动分析

[复制链接]

847

TA的帖子

0

TA的资源

纯净的硅(高级)

Rank: 6Rank: 6

发表于 2018-1-21 20:38:26 | 显示全部楼层 |阅读模式
本帖最后由 cruelfox 于 2018-1-21 20:38 编辑

用J-Link OB跟踪发现,BlueNRG-1 复位后并不是立即执行Flash中烧写的程序。中断向量表中,PC的初始值为 0x1000071D. memmap.PNG
在手册上 0x10000000 开始的4kB描述为 ROM,况且不在编译的HEX的地址范围内,可以推断是 Bootloader 的代码。
这一段代码不长,它读取了 0x10040000 开始的 Flash 中的内容,重新设置了 0x0 处(中断向量表)的映射地址为0x10004000,然后跳转到用户Flash中的复位代码入口地址。

一上来,开始执行的是 RESET_HANDLER() 这个函数,它的实现是在 system_bluenrg1.c 中。这里面做了初始化数据RAM(也就是全局变量和静态局部变量)的工作,然后就调用 main() 函数了,很直接。不过,和通常的代码不同的是,它先调用了 __low_level_init() 函数,判断返回值是1时,才进行RAM的初始化。在什么情况下需要跳过RAM初始化?这里暂且搁下。
reset_handler.PNG

例子中,主函数 main() 的结构比较简单,先进行一系列初始化
main1.PNG

main() 函数先调用 SystemInit() 函数,它也是在 system_bluenrg1.c 里面。这里做的事情先是设置了若干个硬件中断请求的优先级——把 BLUE_CTRL_IRQn 设置为 CRITICAL_PRIORITY,其余的都是低优先级。然后调用了 DeviceConfiguration() 函数,做了电源、时钟源的设置。最后是调整了片上设备的使能(关闭一些模块的时钟),允许全局IRQ中断。

在 SystemInit() 之后是执行 SdkEvalIdentification() 和 SdkEvalComUartInit() 两个函数,这是和评估板相关的,主要目的是为了使用串口输出信息。

接下来是调用 BlueNRG_Stack_Initialization() ,这是一个闭源的函数,它的参数是一个结构体常量地址,在 SensorDemo_config.h 中给出。想改变BLE协议栈默认参数要改这个头文件。函数的说明在 ST PM2057这个手册的2.3节
stack_init.PNG

再接着是调用了几个名称以 SdkEvalLed 开头的函数,目的也不难猜到。

然后是 Sensor_DeviceInit() 函数,它在 sensor.c 中实现。看函数名我以为是初始化传感器硬件的,实际上远不止。Device指的是整个蓝牙设备。
sensor_init1.PNG
这里调用了一连串的BLE协议栈库里的函数,函数名以 aci_ 开头的是"vendor specific command". 在这后面还有传感器要使用的BLE Service的定义,也就是在BLE GATT数据库中添加东西
sensor_init2.PNG


再回到 main() 函数里面,后面就是一个循环了:
main2.png
忽略掉 OTA 相关的内容,循环里面只有三个函数:
  BTLE_StackTick() 库函数,处理BLE事件
  APP_Tick() sensor.c中定义
  BlueNRG_Sleep() 库函数,进入省电模式


看来就只有 APP_Tick() 函数可以读取和更新传感器数据了。这个函数也写得比较简单:
app_tick.PNG
大致功能是,定时到预定时间以后,调用Acc_Update()来更新加速度计的数据(通过 aci_gatt_update_char_value() 操作)

那么,读温度传感器数据的操作在哪里?看起来并不在 APP_Tick() 中,为什么呢? grep一番,找到 Temp_Update() 是在 Read_Request_CB() 中被调用的,而 Read_Request_CB() 又在 aci_gatt_read_permit_req_event() 函数里面调用。
看起来 aci_gatt_read_permit_req_event() 像是一个回调函数,怎么工作的有待弄清楚BLE协议栈API的使用以后了。




回复

使用道具 举报

573

TA的帖子

0

TA的资源

版主

Rank: 6Rank: 6

发表于 2018-1-21 21:50:21 | 显示全部楼层
进来看看,


回复

使用道具 举报

10

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2018-1-21 23:15:22 | 显示全部楼层
膜拜大佬


回复

使用道具 举报

4

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2018-2-7 09:03:44 | 显示全部楼层
谢谢!学习下


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

小黑屋|手机版|Archiver|电子工程世界 ( 京ICP证 060456

GMT+8, 2018-2-18 15:15 , Processed in 0.144490 second(s), 17 queries , Redis On.

快速回复 返回顶部 返回列表