重构核心是把分散的全局标志位收敛为 EventGroup 的位定义。先枚举所有标志(如 WIFI_OK、SENSOR_READY、OTA_REQ),用 enum 定义位掩码,创建 EventGroupHandle_t g_evt。发送方用 xEventGroupSetBits(g_evt, BIT),接收方用 xEventGroupWaitBits(g_evt, MASK, pdTRUE, pdFALSE, portMAX_DELAY) 阻塞等待,替代原来的 while(!flag) 轮询或裸机主循环轮询。关键点:1) 清除策略选 pdTRUE 自动清位,避免手动清位竞态;2) 多条件用 pdTRUE 等待全部满足;3) ISR 中必须用 xEventGroupSetBitsFromISR,并通过 xTimerPendFunctionCall 或守护任务处理;4) 位宽默认 24 位(configUSE_16_BIT_TICKS=0),够用但别滥用。重构后代码可读性、实时性和可测试性都显著提升,且消除了 volatile 标志位的原子性隐患。
mcuku 阿沐 · 2026-10-14