协议栈工作原理介绍

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

协议栈工作原理介绍

CC2540集成了增强型的8051内核,TI为BLE协议栈搭建了一个简单的操作系统,即一种任务轮询机制。帮你做好了底层和蓝牙协议深层的内容,将复杂部分屏蔽掉。让用户通过API函数就可以轻易用蓝牙4.0,是开发起来更加方便,开发周期也可以相应缩短。

1.1.1工程文件介绍

安装完BLE协议栈之后,会在安装目录下看到以下文件结构:

图 3.2BLE栈目录

可看到Projects文件夹里面有很多工程,我们主要介绍SimpleBLECentral和SimpleBLEPeripheral。

ble文件夹中有很多工程文件,有些是具体的应用,例如

BloodPressure、GlucoseCollector、GlucoseSensor、HeartRate、HIDEmuKbd等都为传感器的实际应用,有相应标准的Profile(即通用的协议)。

其中还有4中角色:SimpleBLEBroadcaster、SimpleBLECentral、SimpleBLEObserver、SimpleBLEPeripheral。

他们都有自己的特点。

•Broadcaster广播员——非连接性的信号装置

•Observer观察者——扫描得到,但不能链接

•Peripheral从机——可链接,在单个链路层链接中作为从机•Central主机——扫描设备并发起链接,在单链路层或多链路层

中作为主机。

最后的BTool文件夹为BLE设备PC端的使用工具。

1.1.2OSAL介绍

协议栈是一个小操作系统。大家不要听到是操作系统就感觉到很复杂。回想

我们当初学习51单片机时候是不是会用到定时器的功能?嗯,我们会利用定时器计时,令LED一秒改变一次状态。好,现在进一步,我们利用同一个定时器计时,令LED1一秒闪烁一次,LED2二秒闪烁一次。这样就有2个任务了。再进一步…有n个LED,就有n个任务执行了。协议栈的最终工作原理也一样。从它工作开始,定时器周而复始地计时,有发送、接收…等任务要执行时就执行。这个方式称为任务轮询。

图 3.3任务轮询

现在我们直接打开协议栈,直接拿他们的东西来解剖!我们打开协议栈文件夹Texas Instruments\BLE-CC254x-1.2.1\Projects

\ble\SimpleBLEPeripheral\CC2540DB里面的工程文件SampleApp.eww。

图 3.4工程文件

打开后在IAR左边可看到左边的工程目录,我们暂时只需要关注App文件夹。

如图 3.5所示:

图 3.5工作空间目录

任何程序都在main函数开始运行,BLE也不例外。打开SimpleBLEPeripheral_Main.c文件,找到int main(void)函数。我们大概浏览一下main函数代码:

图 3.6协议栈主函数

1./**************************************************************

2.*@fn main

3.*@brief Start of application.

4.*@param none

5.*@return none

6.**************************************************************/

7.int main(void)

8.{

9./*Initialize hardware*/

10.HAL_BOARD_INIT();//初始化系统时钟

11.

12.//Initialize board I/O

13.InitBoard(OB_COLD);//初始化I/O,LED、Timer等

14.

15./*Initialze the HAL driver*/

16.HalDriverInit();//初始化芯片各硬件模块

17.

18./*Initialize NV system*/

19.osal_snv_init();//初始化Flash存储器

20.

21./*Initialize LL*/

22.

23./*Initialize the operating system*/

24.osal_init_system();//初始化操作系统

25.

26./*Enable interrupts*/

27.HAL_ENABLE_INTERRUPTS();//使能全部中断

28.//Final board initialization

29.InitBoard(OB_READY);//初始化按键

30.

31.#if defined(POWER_SAVING)

32.osal_pwrmgr_device(PWRMGR_BATTERY);//开启低功耗

33.#endif

34.

35./*Start OSAL*/

36.osal_start_system();

37.//No Return from here执行操作系统,进去后不会返回

38.

39.return0;

40.}

我们大概看了上面的代码后,可能感觉很多函数不认识。没关系,代码很有条理性,开始先执行初始化工作。包括硬件、GATT、GAP层、任务等的初始化。然后执行osal_start_system();操作系统。进去后可不会回来了。在这里,我

相关文档
最新文档