关闭

ble协议栈cc2540x-1.3.2之通过key处理过程看任务、事件、消息机制

标签: CC2540 BLE KEY消息机制
409人阅读 评论(0) 收藏 举报
分类:




一   事件机制

       每一个任务都会有很多种事件,包括系统消息、任务事件等等。

二   事件的触发启动

  函数1:启动一个定时器、定时delaytime时间、之后触发 TaskID 的event事件.延时时间以ms为单位。

osal_start_timerEx( TaskID, event , delaytime );

      函数2:置 tasksEvents[]数组的事件标志位为1、系统轮询这个数组确定是否触发事件

    osal_set_event( simpleBLEPeripheral_TaskID, SBP_START_DEVICE_EVT );

三  消息机制之创建发送

   

//给消息定义一个结构体并分配
   

//设置结构体
         msgPtr->hdr.event = KEY_CHANGE;
      msgPtr->state = state;
              msgPtr->keys = keys;
             //发送消息
     

二  消息机制之接收处理

  if ( events & SYS_EVENT_MSG )
  {
    uint8 *pMsg;
   
 )// 接收消息
    {
     
)//处理消息
     
) //删除消息空间
    }
    return (events ^ SYS_EVENT_MSG);
 
     

二  按键处理过程:

    HalDriverInit();

--->   HalKeyInit();// 相关寄存器的设置、 这个函数协议栈里边默认是使能的 

        --> HAL_KEY_SW_6_SEL &= ~(HAL_KEY_SW_6_BIT);    /* Set pin function to GPIO */
 
--> HAL_KEY_SW_6_DIR &= ~(HAL_KEY_SW_6_BIT);    /* Set pin direction to Input */    

 void InitBoard( uint8 level )
   
---->  HalKeyConfig( OnboardKeyIntEnable, OnBoard_KeyCallback);
/这个函数对,按键相关的寄存器设置为中断模式(协议栈默认的情况下是使用中断方式处理这个按键)

//同时向协议栈注册回调函数 OnBoard_KeyCallback ();

 osal_init_system() ;

-----> osalInitTasks(); //各任务初始化

 

------> uint8 RegisterForKeys( uint8 task_id )

  /   将第一个调用这个函数的TASK_ID 赋值给一个registeredKeysTaskID全局变量

4.按键中断处理函数-----hal_key.h

HAL_ISR_FUNCTION( halKeyPort0Isr, P0INT_VECTOR )

--> halProcessKeyInterrupt()-----产生HAL事件

--> osal_start_timerEx (Hal_TaskID, HAL_KEY_EVENT, HAL_KEY_DEBOUNCE_VALUE);

//启动 Hal_TaskID 任务的 HAL_KEY_EVENT 事件处理过程这个处理函数定义在hal_driver.c里边

  --> uint16 Hal_ProcessEvent( uint8 task_id, uint16 events )

  

  - ->( pHalKeyProcessFunction) (keys, HAL_KEY_STATE_NORMAL); //这里调用按键回调函数处理按键

--->OnBoard_KeyCallback()--处理键值向注册按键服务的任务发生消息

        ---> OnBoard_SendKeys  () 

--->osal_msg_send()  发送消息的函数

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:27850次
    • 积分:571
    • 等级:
    • 排名:千里之外
    • 原创:24篇
    • 转载:31篇
    • 译文:0篇
    • 评论:5条
    文章分类
    最新评论