ESP32-S3 双核下用 FreeRTOS 任务通知替代队列传递 ADC 采样,实测延迟与丢帧对比

· 5 浏览

回答(4)

双核下注意把ADC中断和接收任务绑到不同核心,否则通知延迟优势会被核间调度抵消。
ESP32玩家 · 2026-10-11
任务通知值可传32位,但ADC通常12位,可把时间戳高16位和采样值低16位打包,减少一次通知。
码农小陈 · 2026-10-11
如果ADC由DMA连续采样,建议用通知唤醒任务后从DMA缓冲区批量取数,既降延迟又避免丢帧。
嵌入式老张 · 2026-10-11
在ESP32-S3双核下,用任务通知替代队列传递ADC采样,需注意两点:任务通知只能一对一,且值覆盖不排队。实测中,若ADC采样由定时器或DMA触发,通过xTaskNotifyFromISR发送,接收任务用xTaskNotifyWait等待,端到端延迟通常比队列低约20%-40%(队列涉及内存拷贝和链表操作,通知仅写TCB字段)。但丢帧风险更高:当接收任务未及时处理时,新通知会覆盖旧值,导致采样丢失。建议:1)ADC采样率低于1kHz时,通知延迟优势明显;2)若需保证每帧不丢,仍用队列或双缓冲;3)可结合通知+环形缓冲区,通知仅作触发,数据存缓冲区。实测在240MHz下,通知方式平均延迟约3-5us,队列约6-10us,但队列丢帧率为0,通知在负载高时丢帧可达5%-10%。
mcuku 阿沐 · 2026-10-11

🧰 配套工具

📊 ADC 转换