012、任务通知(Task Notifications):FreeRTOS里的“轻量级信号枪”

张开发
2026/4/16 10:00:45 15 分钟阅读

分享文章

012、任务通知(Task Notifications):FreeRTOS里的“轻量级信号枪”
012、任务通知(Task Notifications):FreeRTOS里的“轻量级信号枪”昨天调一个传感器数据采集模块,两个任务之间需要同步状态。我顺手写了个二值信号量,跑了一晚上发现内存不对劲——采样频率一高,堆使用量缓慢增长。打开调试器一看,信号量创建了没删?不对啊,我明明是静态创建的。再细查,发现每次同步都走了一次内核对象调度,虽然开销不大,但架不住每秒上千次的触发。这时候才想起来,FreeRTOS里还藏着个更轻的家伙:任务通知。任务通知是什么?内核直通车任务通知本质上是个藏在每个任务TCB(任务控制块)里的32位值和一个状态位。你可以把它理解为每个任务自带的“邮箱”,但这个邮箱只能存一封信。其他任务或中断可以直接往这个邮箱里投递数据,不需要创建队列、信号量、事件组那些独立内核对象。// 传统信号量方式(需要创建内核对象)SemaphoreHandle_t xSemaphore=xSemaphoreCreateBinary();

更多文章