ZStack-CC2530-2.3.0-1.4.0按键处理

今天看了ZStack-CC2530-2.3.0-1.4.0按键处理这部分,参考的是小峰的日志,讲的非常详细,地址如下:
   http://wjf88223.blog.163.com/blog/static/35168001201041294613991/
     我从中把查询法和中断发的大概流程截取了下,看起来没那么复杂,没我的什么见解哦
1,查询法函数调用流程如下:       
      HalKeyConfig()配置一定时器为轮询按键作准备——>时间一到触发系统任务事件调用Hal_ProcessEvent()—— >调用HalKeyPoll()得到按键值——>调用OnBoard_KeyCallback()进一步处理——调用OnBoard_SendKeys()构造消息包,准备触发应用按键事件【注意这个应用之前必须通过RegisterForKeys()注册接收按键事件的任务ID】——>调用osal_msg_send()向系统发送消息——>调用osal_set_event()设置事件发生标志——>调用SampleApp_ProcessEvent()处理事件——>最终调用SampleApp_HandleKeys()处理具体按键事件
2,中断法函数调用流程如下:       
     HalKeyConfig()进行按键中断配置——>按键引起中断进入中断函数HAL_ISR_FUNCTION()(该函数在hal_key.c中)——>调用halProcessKeyInterrupt()对按键中断进行下一步处理:清除中断标志,启动一定时器——>时间一到触发系统任务事件调用Hal_ProcessEvent()——> 调用HalKeyPoll()得到按键值——>调用OnBoard_KeyCallback()进一步处理——>调用OnBoard_SendKeys()构造消息包,准备触发应用按键事件【注意这个应用之前必须通过RegisterForKeys()注册接收按键事件的任务ID】——>调用osal_msg_send()向系统发送消息——>调用osal_set_event()设置事件发生标志——>调用SampleApp_ProcessEvent()处理事件——>最终调用SampleApp_HandleKeys()处理具体按键事件
3,两种方法相似之处:
    都是经过了两次触发系统事件(第一次通过osal_start_timerEx()启动一个软定时器触发,第二次通过osal_msg_send()发送系统消息触发),分别调用相应任务事件处理函数,第一次是HAL层的Hal_ProcessEvent()来查询按键得到键值,一系列处理,第二次是APP层的SampleApp_ProcessEvent()把传送过来的按键事件进行最终处理
        osal_start_timerEx()------触发------> Hal_ProcessEvent()
        osal_msg_send()--------触发--------->SampleApp_ProcessEvent()
4,两种方法不同之处:   
    从上面对按键查询法和中断法的总结,可以看到中断法就比查询法大致多出两步:进入中断函数HAL_ISR_FUNCTION()与调用调用halProcessKeyInterrupt(),后面都是开始开启一软定时器触发相同事件HAL_KEY_EVENT,然后……………………。
5,自己添加应用:
   如果硬件配置按协议栈默认来配置,那基本只要完成这两件事情:(1)、在自己的应用中注册按键:RegisterForKeys(MyAPP_TaskID),这样用户应用就得接收到所有按键事件(2)、在自己的应用任务事件处理函数中配置具体处理函数:比如SampleApp中按SW1,发送闪烁信息给组1,按SW2,进/退组1.(该操作是在SampleApp_HandleKeys()函数中)
posted @ 2011-04-27 09:15  雪帕  阅读(5397)  评论(0编辑  收藏  举报