富芮坤、Nordic、telink工程程序架构简要分析

  1. 富芮坤
    ① 整体架构
    富芮坤、Nordic、telink工程程序架构简要分析_第1张图片

application 用于存放用户应用层的代码,profiles存放自定义的 profile 等;driver 中为外设驱动;platform 中为异常向量入口和部分异常的处理函数;patch 中为针对 ROM code中的一些补丁代码;lib中为封装好的库文件,其中所提供的接口在 gatt_api.h、gap_api.h等文件中。
其中,lib中用到的入口函数都在proj_main.c中,ble_simple_peripheral.c中实现peripheral。
富芮坤、Nordic、telink工程程序架构简要分析_第2张图片

其中user开头的函数是客户可以在其中写入需要实现的代码,调用方式都在lib中完成。
唤醒也是如此,提供了ser_entry_before_sleep_imp和user_entry_after_sleep_imp两个入口由客户使用。

② BLE协议栈初始化、GAP、GATT与响应
富芮坤将协议栈的初始化全部放在了lib文件中。而在协议栈初始化后,客户可以在user_entry_after_ble_init入口中进行回调函数注册,服务注册等动作,再等待服务注册完毕后初始化广播,扫描。
在这里插入图片描述

③ 优缺点
结构清晰,代码量少,SDK说明文档内容详实。缺点是没有传统的main作为程序的入口,只看工程可能会找不到程序起点。
2. Nordic
① 整体架构
富芮坤、Nordic、telink工程程序架构简要分析_第3张图片

其中Application为应用层,nRF_BLE为BLE的GAP,GATT实现。nRF_BLE_Services为服务的实现。nRF_Libraries是程序使用的一些库函数的实现。
② BLE协议栈初始化、GAP、GATT与响应
NRF的程序使用宏定义并实例化,该实例包含服务的所有属性和方法。协议栈的初始化包含使能协议栈和BLE事件handle。扫描和广播都在协议栈初始化后开始。
③ 优缺点
扫描过滤做成API,在程序开始的时候就按照需求设立,设置的参数也更少。将广播数据、广播、连接状态(连接、断连)、扫描、服务发现等都单独做成C文件,在工程结构上更清晰,但也会带来文件数目繁多,需要花费更多时间掌握的问题。
3. Telink
① 整体架构
富芮坤、Nordic、telink工程程序架构简要分析_第4张图片

Algorithm存放加密算数法相关函数。Application存放一些通用的应用程序,如打印,按键,音频等。Boot中存放的是芯片的BootLoader。Common是通用跨平台的处理函数,如内存处理,字符串处理函数等。Proj_lib是SDK必须的库文件。BLE、RF、PM的驱动都在库文件里。Stack存放协议栈的头文件。Vender存放客户应用层代码。
② BLE协议栈初始化、GAP、GATT与响应
Telink在user_init_normal中初始化协议栈和GAP层与连接响应等。
富芮坤、Nordic、telink工程程序架构简要分析_第5张图片

③ 优缺点
Telink的SDK文档写的非常清楚,一些错误事项的细节都会写明白。但是SDK较为复杂,库函数丰富,但使用方法不清晰。服务的添加也较为繁琐。
4. 总结
富芮坤的代码最为简洁明了,SDK文档中每个API都有写代码实例,但使用的库文件是lib文件的形式,且广播和扫描都需要等待服务建立后再初始化。Nordic的代码详实,可定制、开发程度高。Telink的代码复杂程度高,但文档较为清晰。
5. 给予我们的启示
① 协议栈在稳定的基础上注重结构的简洁与清晰,符合直观逻辑。
② SDK说明文档详尽,可以参考富芮坤,telink等SDK文档的写法。
③ 协议栈相关的东西尽可能放在FLASH固定位置,与应用层分离,这样客户在开发时,编译速度,下载速度都不会影响正常开发进度。

你可能感兴趣的:(架构)