Button press & debounce
2015-11-13 10:35
204 查看
一、先看下原始代码流程,按键1中断进入函数:
void usr_button1_cb(void)
{ ke_evt_set(1UL << EVENT_BUTTON1_PRESS_ID);
}建立事件 EVENT_BUTTON1_PRESS_ID
而在事件初始化里定义了EVENT_BUTTON1_PRESS_ID 对应的函数是app_event_button1_press_handler:
if(KE_EVENT_OK != ke_evt_callback_set(EVENT_BUTTON1_PRESS_ID,
app_event_button1_press_handler))
{
ASSERT_ERR(0);
}
所以按键1的处理函数是app_event_button1_press_handler
void app_event_button1_press_handler(void)
{
#if ((QN_DEEP_SLEEP_EN) && (!QN_32K_RCO))
if (sleep_env.deep_sleep)
{
sleep_env.deep_sleep = false;
// start 32k xtal wakeup timer
wakeup_32k_xtal_start_timer();
}
#endif
// delay 20ms to debounce
ke_timer_set(APP_SYS_BUTTON_1_TIMER, TASK_APP, 2);
ke_evt_clear(1UL << EVENT_BUTTON1_PRESS_ID);
}定时20ms进入消息APP_SYS_BUTTON_1_TIMER的处理函数,同时清除按键1的消息EVENT_BUTTON1_PRESS_ID
消息APP_SYS_BUTTON_1_TIMER对应的函数:
{APP_SYS_BUTTON_1_TIMER, (ke_msg_func_t) app_button_timer_handler},
处理函数:
int app_button_timer_handler(ke_msg_id_t const msgid, void const *param,
ke_task_id_t const dest_id, ke_task_id_t const src_id)
{
switch(msgid)
{
case APP_SYS_BUTTON_1_TIMER:
case APP_SYS_BUTTON_2_TIMER:
}
void usr_button1_cb(void)
{ ke_evt_set(1UL << EVENT_BUTTON1_PRESS_ID);
}建立事件 EVENT_BUTTON1_PRESS_ID
而在事件初始化里定义了EVENT_BUTTON1_PRESS_ID 对应的函数是app_event_button1_press_handler:
if(KE_EVENT_OK != ke_evt_callback_set(EVENT_BUTTON1_PRESS_ID,
app_event_button1_press_handler))
{
ASSERT_ERR(0);
}
所以按键1的处理函数是app_event_button1_press_handler
void app_event_button1_press_handler(void)
{
#if ((QN_DEEP_SLEEP_EN) && (!QN_32K_RCO))
if (sleep_env.deep_sleep)
{
sleep_env.deep_sleep = false;
// start 32k xtal wakeup timer
wakeup_32k_xtal_start_timer();
}
#endif
// delay 20ms to debounce
ke_timer_set(APP_SYS_BUTTON_1_TIMER, TASK_APP, 2);
ke_evt_clear(1UL << EVENT_BUTTON1_PRESS_ID);
}定时20ms进入消息APP_SYS_BUTTON_1_TIMER的处理函数,同时清除按键1的消息EVENT_BUTTON1_PRESS_ID
消息APP_SYS_BUTTON_1_TIMER对应的函数:
{APP_SYS_BUTTON_1_TIMER, (ke_msg_func_t) app_button_timer_handler},
处理函数:
int app_button_timer_handler(ke_msg_id_t const msgid, void const *param,
ke_task_id_t const dest_id, ke_task_id_t const src_id)
{
switch(msgid)
{
case APP_SYS_BUTTON_1_TIMER:
case APP_SYS_BUTTON_2_TIMER:
}
相关文章推荐
- Java Timer类小结
- 手机WEB网页 二级联动
- Notepad++找回自动保存缓存内容的文件
- Oracle Clusterware (CRS/GI) - ASM - Database Version Compatibility (文档 ID 337737.1)
- 38-文件后缀名
- 内嵌支持宽高激活因子、清除浮动常用方法
- Go语言反射规则 - The Laws of Reflection
- EXVIM使用笔记
- diff命令生成补丁
- MapReduce计数器计数
- framebuffer小程序显示3个矩形 测试
- Linux下实现磁盘配额的两种方法
- Android基础入门教程——10.9 WallpaperManager(壁纸管理器)
- Canvas画简易的Calendar控件
- 64位linux centos 安装android问题及解决方案
- 一些题目iOS
- nodejs微信开发--网页获取用户授权信息
- 根据IE和FF加载不同css样式文件
- ToolBar的使用
- 开博首记