1 / 12
文档名称:

蓝牙协议栈按键流程分析模板.docx

格式:docx   大小:22KB   页数:12页
下载后只包含 1 个 DOCX 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

蓝牙协议栈按键流程分析模板.docx

上传人:读书之乐 2019/12/28 文件大小:22 KB

下载得到文件列表

蓝牙协议栈按键流程分析模板.docx

文档介绍

文档介绍:蓝牙协议栈按键流程分析在介绍蓝牙按键流程分析之前,我们需要了解一个概念,那就是就是OSAL。什么是OSAL呢?可能大伙对于OS是比较了解的,学了计算机的搞过OS的也基本接触过,简单来说就是一个操作系统抽象层,2540上的操作系统,说操作系统还不能算,TI的OSAL只实现了任务切换和消息机制。并且把协议栈的代码、硬件处理的代码,用户程序的代码等分别放到了OSAL层的不同任务处理函数中去了,各任务函数之间通过消息机制、同一个任务之间通过事件的的方式来通信。什么是EVENT事件?OSAL为每个任务函数分配了一个16位的事件变量,每一位代表一个事件,最高位为0x8000表示为系统事件SYS_EVENT_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列表中触发一个messagereadyevent。(请注意最后一句话,这句话点出了为什么按键时间的触发为何会导致系统事件也接受到了)现在以SimpleBLEPeripheral为例说明按键流程在SimpleBLEPeripheral任务初始化函数中有这样一条代码:  //Registerforallkeyevents-Thisappwillhandleallkeyevents  RegisterForKeys(simpleBLEPeripheral_TaskID);这个函数来自源文件中/**********************************************************************KeyboardRegisterfunction**Thekeyboardhandlerissetuptosendallkeyboardchangesto*onetask(ifataskisregistered).**Ifataskregisters,*toregisterforindividualkeys.*********************************************************************/uint8RegisterForKeys(uint8task_id){  //Allowonlythefirsttask  if(registeredKeysTaskID==NO_TASK_ID)  {  registeredKeysTaskID=task_id;  return(true);  }  else  return(false);}向一个全局变量registeredKeysTaskID中赋值自己的任务ID,调用了这个函数就能成功注册按键服务,那这个全局变量在何时使用呢?分析到这里,感觉有点迷糊了,我们能够从顶到下分析。任何一个程序都是从main函数开始的,这点我们要坚信。所以我们首先找到这个main函数******************************************************************************************************@fn      main*****@brief    Startofapplication.*****@param    none*****@return    none***************************************************************************************************/intmain(void){  /*Initializehardware*/  HAL_BOARD_INIT();    //InitializeboardI/O  InitBoard(OB_COLD);  /*InitialzetheHALdriver*/  HalDriverInit();  /*InitializeNVsystem*/  osal_snv_init();  /*InitializeLL*/  /*Initializetheoperatingsystem*