
CC2640R2F学习笔记(5)——自定义周期事件
发布日期:2021-05-06 23:36:50
浏览次数:21
分类:技术文章
本文共 3467 字,大约阅读时间需要 11 分钟。
一、周期事件
1.1 定义周期事件
以multi_role工程为例,在multi_role.c的CONSTANTS常量定义中,加入CUSTOM_TIMER_EVT
,id号递增。
// Internal Events for RTOS application#define MR_ICALL_EVT ICALL_MSG_EVENT_ID // Event_Id_31#define MR_QUEUE_EVT UTIL_QUEUE_EVENT_ID // Event_Id_30#define MR_STATE_CHANGE_EVT Event_Id_00#define MR_CHAR_CHANGE_EVT Event_Id_01#define MR_CONN_EVT_END_EVT Event_Id_02#define MR_KEY_CHANGE_EVT Event_Id_03#define MR_PAIRING_STATE_EVT Event_Id_04#define MR_PASSCODE_NEEDED_EVT Event_Id_05#define MR_PERIODIC_EVT Event_Id_06#define CUSTOM_TIMER_EVT Event_Id_07 // 自定义周期事件
在MR_ALL_EVENTS事件集合定义中,加入刚刚的自定义周期事件。
#define MR_ALL_EVENTS (MR_ICALL_EVT | \ MR_QUEUE_EVT | \ MR_STATE_CHANGE_EVT | \ MR_CHAR_CHANGE_EVT | \ MR_CONN_EVT_END_EVT | \ MR_KEY_CHANGE_EVT | \ MR_PAIRING_STATE_EVT | \ MR_PERIODIC_EVT | \ MR_PASSCODE_NEEDED_EVT | \ CUSTOM_TIMER_EVT)
1.2 添加周期事件的处理
在multi_role.c的multi_role_taskFxn函数中尾部加入,注释掉部分为开启循环定时器功能,如果是一次性定时器可以不需要。
/*----------------- 自定义定时器事件 ------------------*/if (events & CUSTOM_TIMER_EVT){ // 再次启动自定义定时器 // Util_startClock(&s_customClock); // 自定义周期事件处理函数 timer_customPeriodicTask();}
二、周期事件处理函数
2.1 定义周期事件处理函数
以multi_role工程为例,在multi_role.c尾部添加
static void timer_customPeriodicTask(void){ // 自定义功能}
2.2 声明周期事件处理函数
在multi_role.c的LOCAL FUNCTIONS局部函数中加入
static void timer_customPeriodicTask(void);
三、定时器
3.1 定义定时器
static Clock_Struct s_customClock;
3.2 配置定时器时间
#define CUSTOM_TIMER_EVT_PERIOD 100 // 自定义定时器时间100ms
3.3 初始化定时器
以multi_role工程为例,在multi_role.c的multi_role_init函数中尾部加入
// 自定义定时器初始化Util_constructClock(&s_customClock, multi_role_clockHandler, CUSTOM_TIMER_EVT_PERIOD, 0, false, CUSTOM_TIMER_EVT);
四、触发周期事件函数
以multi_role工程为例,在multi_role.c中已经有了multi_role_clockHandler,当定时器到达时间时,会产生一个事件,进入上文的周期事件处理函数。其他工程也有类似的名字。
/********************************************************************* * @fn multi_role_clockHandler * * @brief Handler function for clock timeouts. * * @param arg - event type */static void multi_role_clockHandler(UArg arg){ // Wake up the application. Event_post(syncEvent, arg);}
五、启动定时器
在需要启动的地方添加
Util_startClock(&s_customClock);
开机自启定时器,则加在multi_role.c的multi_role_processRoleEvent函数中,GAP_DEVICE_INIT_DONE_EVENT事件尾部
// GAPRole started case GAP_DEVICE_INIT_DONE_EVENT: { // Store max pdu size maxPduSize = pEvent->initDone.dataPktLen; Display_print0(dispHandle, MR_ROW_DEV_ADDR, 0, Util_convertBdAddr2Str(pEvent->initDone.devAddr)); Display_print0(dispHandle, MR_ROW_CONN_STATUS, 0, "Connected to 0"); Display_print0(dispHandle, MR_ROW_STATUS1, 0, "Initialized"); // Set device info characteristic DevInfo_SetParameter(DEVINFO_SYSTEM_ID, DEVINFO_SYSTEM_ID_LEN, pEvent->initDone.devAddr); Util_startClock(&s_customClock); } break;
• 由 写于 2019 年 3 月 5 日
• 参考:
发表评论
最新留言
路过按个爪印,很不错,赞一个!
[***.219.124.196]2025年04月06日 09时27分54秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
钉钉登录及常用的URL及IP
2019-03-03
CENTOS 删除nginx
2019-03-03
【redis键过期删除策略】很高兴再次认识你
2019-03-03
【工具篇】EasyExcel的应用
2019-03-03
SSM发送手机验证码——以网建SMS为例
2019-03-03
大范围卫星影像快速处理
2019-03-03
监控264后缀文件播放
2019-03-03
网站在线偷拍照片源码
2019-03-03
动态摇动吊牌自适应网站404页面源码
2019-03-03
炫酷文字消失动画网站404页面源码
2019-03-03
EMLOG模板山河网站主题分享
2019-03-03
2019数字音乐市场年度回顾,QQ音乐全面领先
2019-03-03
花1亿扶持优质红人,如涵推动网红经济出圈之路有何深意?
2019-03-03
抢滩抖音、B站,快手港股IPO进程加速
2019-03-03
Android系统启动系列5 SystemServer进程下
2019-03-03
Android四大组件系列9 ContentProvider原理
2019-03-03
理解PendingIntent
2019-03-03
Android SurfaceFlinger4 提交Buffer
2019-03-03
深入理解 ClientLifecycleManager 机制
2019-03-03
android基础知识回顾--ContentProvider简单用法
2019-03-03