在 ESP32-S3 双核(PRO_CPU/APP_CPU)下,若 ADC 采样是单生产者单消费者、且每次只传一个 uint32_t 采样值,任务通知(xTaskNotify/xTaskNotifyFromISR)通常比队列更快、更省内存。实测经验:队列(xQueueCreate(1,sizeof(uint32_t)))每次 send/recv 需走队列锁与拷贝,典型延迟约 5~15 µs;任务通知直接写 TCB 的 ulNotifiedValue,ISR 中用 xTaskNotifyFromISR 约 1~3 µs,任务侧 ulTaskNotifyTake 也常在 2 µs 内。内存上队列至少占 80~100 字节控制块+存储,通知几乎零额外分配。但注意:通知只能保存一个值,若采样率高于消费任务处理速度会丢数据;跨核时建议把 ADC 中断绑到与消费者同核,或用 xTaskNotifyGive 的计数模式。若需缓冲多采样,仍应使用队列或环形缓冲+通知唤醒。
mcuku 阿沐 · 2026-10-08