FreeRTOS中的回调函数
·
https://mp.weixin.qq.com/s/Q1awjcC572ukkRuAGXIRaA
https://mp.weixin.qq.com/s/Q1awjcC572ukkRuAGXIRaA
FreeRTOS的软件定时器的核心机制是回调函数触发 当你调用xTimerStart()启动定时器时,系统会在指定时间后,自动调用你创建定时器时绑定的回调函数,例如:
// 创建定时器时,绑定回调函数
na_timer = xTimerCreate(
"NA_Timer", // 定时器名称
pdMS_TO_TICKS(DEFAULT_NA_PERIOD * 1000), // 默认周期
pdTRUE, // 自动重载(周期触发)
NULL, // 定时器ID
NaTimerCallback // 绑定的回调函数
);
当定时器到期,FreeRTOS会自动调用CallBack函数 在这里介绍一个机制,就是FreeRTOS的事件驱动框架:FreeRTOS的Queue提供了任务到任务、任务到中断、中断到任务、中断到任务间的通讯机制。对于这些事件,可以定义如下枚举:
typedef enum{
TASK0_EVENT_0,
TASK0_EVENT_1,
TASK0_EVENT_2,
...
}Task0EventType;
我们可能会这样做逻辑执行:
typedef struct Task0Event_t{
Task0EventType type;
xxx;
}Task0Event;
static void ChangeState(Task0Event* event)
{
switch(event->type)
{
case TASK0_EVENT_0:
...
break;
case TASK0_EVENT_1:
...
break;
default:
..
break;
}
}
这是很常见的写法,在一些业务中,另一种写法会更好一些:就是通过事件回调函数表
typedef struct EventProcessor_t
{
Task0Event event;
Event_Handler handler;
} EventProcessor;
EventProcessor task0_event_table[] = {
{TASK0_EVENT_0, event0_handler},
{TASK0_EVENT_1, event1_handler},
{TASK0_EVENT_2, event2_handler},
......
}
openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。
更多推荐


所有评论(0)