蓝牙4.0协议栈按键流程分析

蓝牙4.0协议栈按键流程分析

ID:40509226

大小:21.08 KB

页数:11页

时间:2019-08-03

蓝牙4.0协议栈按键流程分析_第1页
蓝牙4.0协议栈按键流程分析_第2页
蓝牙4.0协议栈按键流程分析_第3页
蓝牙4.0协议栈按键流程分析_第4页
蓝牙4.0协议栈按键流程分析_第5页
资源描述:

《蓝牙4.0协议栈按键流程分析》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、在介绍蓝牙按键流程分析之前,我们需要了解一个概念,那就是就是OSAL。什么是OSAL呢?可能大伙对于OS是比较了解的,学了计算机的搞过OS的也基本接触过,简单来说就是一个操作系统抽象层,可以理解为运行在CC2540上的操作系统,说操作系统还不能算,TI的OSAL只实现了任务切换和消息机制。并且把协议栈的代码、硬件处理的代码,用户程序的代码等分别放到了OSAL层的不同任务处理函数中去了,各任务函数之间通过消息机制、同一个任务之间通过事件的的方式来通信。什么是EVENT事件?OSAL为每个任务函数分配了一个16位的事件变量,每一位代表一个事件,最高位为0x8000表示为系统事件SYS_EVEN

2、T_MSG。其余的15位留给用户自定义需要的事件。通常事件由定时器启动,比如一秒后我要点亮LED2,这就需要发送一个点亮LED2的事件,然后等待定时器1s后溢出,于是启动点亮LED2事件,事件会调用相应的hal层API点亮LED2。什么是MSG消息MSG是比EVENT事件更具体并且可以携带数据的一种通信方式,MSG的标记是按数值,而不是按位。比如0x01和0x02是两个不同的消息,但对于事件0x03则是0x01事件和0x02事件的组合。MSG收发使用osal_msg_send()和osal_msg_receive();当调用osal_msg_send()发送一个msg的同时会在EVENT列

3、表中触发一个messagereadyevent。(请注意最后一句话,这句话点出了为什么按键时间的触发为何会导致系统事件也接受到了)现在以SimpleBLEPeripheral为例说明按键流程在SimpleBLEPeripheral任务初始化函数中有这样一条代码:  //Registerforallkeyevents-Thisappwillhandleallkeyevents  RegisterForKeys(simpleBLEPeripheral_TaskID);这个函数来自OnBoard.c源文件中/********************************************

4、**************************KeyboardRegisterfunction**Thekeyboardhandlerissetuptosendallkeyboardchangesto*onetask(ifataskisregistered).**Ifataskregisters,itwillgetallthekeys.Youcanchangethis*toregisterforindividualkeys.*********************************************************************/uint8Regist

5、erForKeys(uint8task_id){  //Allowonlythefirsttask  if(registeredKeysTaskID==NO_TASK_ID)  {  registeredKeysTaskID=task_id;  return(true);  }  else  return(false);}向一个全局变量registeredKeysTaskID中赋值自己的任务ID,调用了这个函数就能成功注册按键服务,那这个全局变量在何时使用呢?分析到这里,感觉有点迷糊了,我们可以从顶到下分析。任何一个程序都是从main函数开始的,这点我们要坚信。所以我们首先找到这个main

6、函数打开SimpleBLEPeripheral_Main.c文件可以看到/***************************************************************************************************@fn      main**@brief    Startofapplication.**@param    none**@return    none*************************************************************************************

7、**************/intmain(void){  /*Initializehardware*/  HAL_BOARD_INIT();    //InitializeboardI/O  InitBoard(OB_COLD);  /*InitialzetheHALdriver*/  HalDriverInit();  /*InitializeNVsystem*/  osal_snv_init();  /*Init

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。