仅以此篇,记录蓝牙BLE(QN902x)开发过程中,使用ke_timer_set ((p_ke_timer_set)(_ke_timer_set))的流程;

首先,我们要使用这个函数,必须先了解它能干什么,需要什么条件才能使用

第一步:找到函数原型(盘它)

/******************************************************************************************* @brief Set a timer.** The function first cancel the timer if it is already existing, then* it creates a new one. The timer can be one-shot or periodic, i.e. it* will be automatically set again after each trigger.* 这个函数首先取消已经存在的定时器,然后创建一个新的。定时器可以是一次性的,也可以是周期性的,也就 * 是说每次触发后会自动设置一次* When the timer expires, a message is sent to the task provided as* argument, with the timer id as message id.* 当计时器到期时,一个消息被发送到任务提供的参数,与计时器id作为消息id* The timer is programmed in time units (TU is 10ms).* 定时器编程的时间单位(TU是10ms)* @param[in] timer_id      Timer identifier (message identifier type).* @param[in] task_id       Task identifier which will be notified* @param[in] delay         Delay in time units.*****************************************************************************************/
typedef void (*p_ke_timer_set)(ke_msg_id_t const timer_id, ke_task_id_t const task, uint16_t const delay);

使用示例:ke_timer_set(DEVICE_TIMER,TASK_APP,1);

从上面的示例中,可以分析出使用这个函数需要一个ID参数(上面定义中的参数原型是:ke_msg_id_t const timer_id),一个TASK参数,一个延时时间参数(这个时间代表的是  从此处开始,延时这个时间后执行这个函数里面的代码!)

第二步:定义应用程序消息接口

何为应用程序消息接口?

根据蓝牙BLE特有的性质,这个应用程序消息接口也就是消息ID(示例中的第一个参数:DEVICE_TIMER),有了这个ID,就能找到ID对应的定时器响应函数;所以接下来我们要去定义这个ID以及它对应的响应函数了。

如何定义这个ID?

进入app_task.h这个文件里:

/// App Message Interface 应用程序消息接口
enum
{/// Debug UART received dataAPP_SYS_UART_DATA_IND = KE_FIRST_MSG(TASK_APP),APP_ADV_INTV_UPDATE_TIMER,APP_SYS_RCO_CAL_TIMER,APP_SYS_32K_XTAL_WAKEUP_TIMER,APP_SYS_TIME_CHECK_TIMER,//add by john for krait
#if  (defined(KRAIT_9021_EVB)||defined(KRAIT_9020_EVT))APP_KBS_SEND_DATA_DELAY_TIMER,APP_KBS_BLE_CONN_WAIT_TIMER,KRAIT_TIMEOUT_TIMER,RESTART_OV788,UVC_START,TEST_TIMEOUT_TIMER,
#ifdef OV_DELAY_TIMERKRAIT_OV_DELAY_TIMER,
#endif
#endif  APP_HTPT_PERIOD_MEAS_TIMER,APP_HTPT_IDLE_CONNECTION_TIMEOUT_TIMER,APP_PROXR_ALERT_STOP_TIMER,APP_BLPS_PRESSURE_TIMER,APP_HRPS_TIMER,APP_TIPS_CURRENT_TIME_TIMER,APP_SCPPS_SCAN_REFRESH_TIMER,APP_BASS_BATT_LEVEL_TIMER,APP_GLPS_MEAS_SEND_TIMER,APP_RSCPS_MEAS_SEND_TIMER,APP_CSCPS_MEAS_SEND_TIMER,APP_PASPS_UPDATE_ALERT_STATUS_TIMER,APP_PASPS_UPDATE_RINGER_TIMER,APP_HOGPD_BOOT_KB_IN_REPORT_TIMER,APP_HOGPD_BOOT_MOUSE_IN_REPORT_TIMER,APP_HOGPD_REPORT_TIMER,APP_MSG_MAX,YUNQI_THREAD_1_TIMER,YUNQI_THREAD_2_TIMER,YUNQI_THREAD_3_TIMER,YUNQI_THREAD_4_TIMER,YUNQI_THREAD_5_TIMER,YUNQI_AUDIO_TIMER,
//designed by selfDEVICE_TIMER,
};

在这个枚举里面添加自己定义的ID,我这里定义的是DEVICE_TIMER,就是设备定时器的意思。

现在定义好了ID,如何添加这个ID对应的中断响应函数呢?

第三步:添加ID对应的中断响应函数

进入app_task.c这个文件里:

/* default State handlers definition. 默认状态处理程序定义*/
const struct ke_msg_handler app_default_state[] =
{xxxx......#if BLE_QPP_SERVER{QPPS_DISABLE_IND,                     (ke_msg_func_t) app_qpps_disable_ind_handler},{QPPS_ERROR_IND,                      (ke_msg_func_t) app_qpps_error_ind_handler},{QPPS_DATA_SEND_CFM,                    (ke_msg_func_t) app_qpps_data_send_cfm_handler},{QPPS_CFG_INDNTF_IND,                   (ke_msg_func_t) app_qpps_cfg_indntf_ind_handler},{QPPS_DAVA_VAL_IND,                    (ke_msg_func_t) app_qpps_data_ind_handler},{QPPS_CREATE_DB_CFM,                 (ke_msg_func_t) app_qpps_create_db_cfm_handler},//Task_DIY{DEVICE_TIMER,                            (ke_msg_func_t) motor_timer_handler},
#endifxxxx......
};

在const struct ke_msg_handler app_default_state[] 这个数组中添加以下数据:

数据格式:{    ID    ,    ID对应的响应函数    }

参考上述格式写出我们ID对应的响应函数,此处我编写的代码如下:

{DEVICE_TIMER,                            (ke_msg_func_t) motor_timer_handler},

到这一步了,应该知道如果我们执行了语句ke_timer_set(DEVICE_TIMER,TASK_APP,1);

我们的程序就会在10ms后调用motor_timer_handler()这个中断响应函数,具体响应函数怎么编写,就可以根据实际的需求而定了

第四步:编写定时器中断响应函数

int motor_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)
{/*需要实现的功能代码*///在响应函数中重复调用ke_timer_set(DEVICE_TIMER,TASK_APP,1)语句,是为了实现每10ms执行一次此函数,你也可以删除此语句,那么程序会执行一次就退出ke_timer_set(DEVICE_TIMER,TASK_APP,1);//10ms后调用return (KE_MSG_CONSUMED);//这一步是为了释放定时器资源
}

至此,QN902x的蓝牙定时器中断功能就可以愉快的使用了。

QN902X在KEIL中使用定时器中断流程记录相关推荐

  1. 深入浅出地理解STM32中的定时器工作原理

    深入浅出地理解STM32中的定时器工作原理 一.如何实现延时 1 纯硬件电路 2 纯软件编程 3 可编程定时/计数器 二.可编程定时/计数器有哪些功能? 三.STM32F103 的定时器有哪些 1 基 ...

  2. 【CubeMX配置stm32定时器中断】

    CubeMX配置stm32定时器中断 一.使用CubeMX对STM32进行基础的配置 1.选择需要使用的定时器 选择TIM2和TIM3示例, 注意: TIM2和其它定时器选择时钟的方法不同,TIM3等 ...

  3. 【MCU】基于STM32CubeMX定时器中断实现LED闪烁

    基于STM32CubeMX定时器中断实现 LED 闪烁 本实验基于STM32CubeMX实现对STM32开发板的配置,通过定时器中断实现 LED 闪烁. Table of Contents 基于STM ...

  4. stm32 TIM定时器中断

    一.TIM(Timer)定时器 定时器可以对输入的时钟进行计数,并在计数值达到设定值时触发中断: 16位计数器.预分频器.自动重装寄存器的时基单元,在72MHz计数时钟下可以实现最大59.65s的定时 ...

  5. linux内核定时器死机,浅析linux内核中timer定时器的生成和sofirq软中断调用流程

    浅析linux内核中timer定时器的生成和sofirq软中断调用流程 mod_timer添加的定时器timer在内核的软中断中发生调用,__run_timers会spin_lock_irq(& ...

  6. 51单片机中断与定时器计数器,基于普中科技教学视频学习记录

    目录 寄存器 置位复位 中断系统 中断概念 中断系统 中断系统构造 外部中断 计时器.定时器中段 串口中断 中断允许控制(控制中断方式) 总中断 各个中断 中断请求标志(控制触发方式) 外部中断触发方 ...

  7. 【嵌入式编程踩坑记】 - 裸机 -定时器中断中套

    定时器是嵌入式裸机编程常用的片上外设,一般是按照一定时间产生一次中断.中断到了代表时间到了.这样,嵌入式工程师就可以用定时器,在特定的时间,做一些事情.这里,以每秒钟打印"hello\r\n ...

  8. 普中开发板定时器中断

    普中开发板的定时器中断C语言实现,间隔时间可能比一秒短,可以改变最下面的n值来修改间隔时间还有就是显示前六位后两位可以复制代码 #include "reg52.h" sbit LS ...

  9. 定时器中断控制LED闪烁(每隔1s)---普中科技开发仪

    定时器中断o,利用中断控制LED闪烁每隔1s闪烁一次(精确的1s) notes: (1)工作方式寄存器TMOD ,低四位用于To,高四位用于T1,(GATE,C/T- ,M1,M0) 一般让GATE ...

最新文章

  1. 第一篇:BPE算法(附加)
  2. Spring框架学习day_03:对于读取文件方式的补充/关于spring框架知识点的学习方式
  3. 克莱门特公司在俄罗斯一个数据中心安装其新型冷却系统
  4. 《实用技巧》——让你的网站变成响应式的3个简单步骤
  5. vs python opencv_VsCode+Anaconda+OpenCV开发环境搭建
  6. java jna调用dll文件_关于java jna调用dll的问题
  7. svn 修改文件的可执行权限
  8. 机器学习爬大树之(GBDT原理)--回归篇
  9. Qlik 助力安井食品实现企业智能决策、高效运营
  10. Bootstrap下拉菜单标题
  11. 【词向量】从Word2Vec到Bert,聊聊词向量的前世今生(一)
  12. navicat导入成功但是没有数据_数据库能建立成功,但是还报错,应该怎么处理...
  13. 在mybatis里面设置不同数据库运行环境和适应性问题
  14. cvCanny() 边缘检测
  15. 【光学】基于Matlab模拟光流场
  16. 工业相机基础知识详述 —— 焦平面,像平面,弥散圆,光圈,分辨率,景深,接口,靶面尺寸
  17. java实现图片上传后裁剪,把白色背景变成透明图(电子印章)
  18. BigDecimal四舍五入保留两位小数
  19. MODBUS RTU转PROFIBUS DP 转换器怎么接线远创智控
  20. 【C语言】C语言概述

热门文章

  1. 对List的数据进行分组
  2. 游戏音效的作用以及未来发展
  3. android 电池续航时间,高端Android手机电池续航排行榜Droid居榜首
  4. epub文件格式揭秘
  5. 如何在支付宝开直播,这篇入驻教程不要错过,看完你就会了
  6. Eclipse官网地址
  7. 传统语音识别介绍【五】—— 单音素和三音素
  8. AE导出合成时,如何调整背景颜色?
  9. 推荐几个2021年App数据统计平台,分析数据运营必备工具
  10. 又赚了!分享几个我常去的私活接单平台