1. 任务通知机制的工程实践:从理论到完整项目落地
FreeRTOS 的任务通知(Task Notification)是自 V8.2.0 版本引入的核心同步与通信机制,其设计目标明确:以极低的内存开销(仅 4 字节/任务)和极高的执行效率(无队列或信号量对象管理开销),替代部分传统 IPC 原语。它并非万能,而是为特定场景而生——当一个任务需要被另一个任务、中断服务程序(ISR)或定时器回调“单向唤醒”并附带少量上下文数据时,任务通知是最优解。本实践将完全脱离“视频教学”的语境,以嵌入式工程师视角,基于 STM32F407(Cortex-M4)平台与 HAL 库,系统性地构建四个关键用例:二值信号量、计数型信号量、事件标志组与邮箱。所有代码均在 STM32CubeMX 生成的 FreeRTOS 工程框架内完成,不依赖任何中间件组件,确保可复现性与工程纯净度。
1.1 环境准备与工程初始化
实验基于 STM32F407VGT6 微控制器,使用 STM32CubeMX v6.12.0 进行外设配置,生成 Keil MDK-ARM v5.39 工程。核心配置如下:
- 系统时钟:HSE 8MHz 经 PLL 倍频至 168MHz(SYSCLK),AHB=168MHz,APB1=42MHz,APB2=84MHz。
- GPIO:PA0 与 PA1 配置为浮空输入(GPIO_MODE_INPUT),用于连接两个独立按键(KEY_UP 与 KEY_DOWN),无外部上拉/下拉,依赖 MCU 内部弱上拉(需在
MX_GPIO_Init()中显式启用)。