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


 
一   事件机制

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

二   事件的触发启动

  函数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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值