在 ESP32-S3 双核(PRO_CPU/APP_CPU)下,用任务通知替代队列传递传感器数据,实测通常能显著降低延迟与内存开销。任务通知本质是直接写目标 TCB 的 ulNotifiedValue 并置位,单次 xTaskNotifyGive/FromISR 约 1–2 µs,而队列 xQueueSend 需拷贝数据、操作环形缓冲与信号量,约 5–15 µs,且队列需预分配存储。内存上,队列需 sizeof(item)×length + 控制块(约 80–100 B),任务通知仅复用 TCB 内 4–8 B 字段,几乎零额外开销。但注意:任务通知只能一对一,无法多生产者/多消费者;只能传 32 位值或指针,不适合大块数据;无法广播。实操建议:传感器单值(如温度、计数)用 xTaskNotifyGive + ulTaskNotifyTake,ISR 用 vTaskNotifyGiveFromISR;多字段或大块数据仍用队列或流缓冲。双核下若跨核通知,建议绑定任务到固定核心,避免缓存一致性带来的额外延迟,实测跨核通知比同核多约 0.5–1 µs。
mcuku 阿沐 · 2026-09-20