此文对osal不做分析,纯帮助自己记忆,主要涉及到hal_key.c
中断模式时:
0.此处序号为0,表示在初始化过程中,
在InitBoard时设置了回调函数,用户可设置为中断或者非中断模式
HalKeyConfig(HAL_KEY_INTERRUPT_DISABLE, OnBoard_KeyCallback);
1.用户按下按键触发中断HAL_ISR_FUNCTION( halKeyPort0Isr, P0INT_VECTOR )或者是P2的GPIO中断
中断服务程序中通过中断标志排除异常非按键中断,调用函数halProcessKeyInterrupt,
其中清除中断标志,主要是25ms后向Hal_TaskID所在任务发送事件 HAL_KEY_EVENT,此25ms即为防抖动作用。
2.Hal_TaskID的任务Hal_ProcessEvent,处理事件,调用函数HalKeyPoll,在通过扫描IO,赋值keys。
调用初始化时设置的回调函数,OnBoard_KeyCallback,(其中会执行系统级的按键处理,用户可自行添加代码,这里分析错了,正常情况下,OnBoard_SendKeys返回ZSuccess)
另外,它还调用了OnBoard_SendKeys向用户任务以消息的形式发送KEY_CHANGE事件
3.在用户任务GenericApp_ProcessEvent中,处理MSG中的KEY_CHANGE事件,调用了GenericApp_HandleKeys,
此处为用户级的按键处理程序。
轮询模式:
理解了以上,这就比较简单了
0.在初始化
HalKeyConfig中,向
Hal_TaskID所在任务发送事件 HAL_KEY_EVENT
1.同样在
任务Hal_ProcessEvent中,处理事件,调用函数HalKeyPoll,在通过扫描IO,赋值keys,而后的也如上一样。
同时设置100ms后,再次触发
事件 HAL_KEY_EVENT。即轮询周期为100ms。
阅读(2979) | 评论(0) | 转发(0) |