ESP32-S3 双核(PRO_CPU/APP_CPU)共享 L1 Cache 与 PSRAM,伪共享主要发生在两核频繁写同一 Cache Line(32 字节)内不同变量时。排查步骤:1)用 xTaskCreatePinnedToCore 明确绑定核心,避免任务漂移;2)对跨核共享的计数器/标志加 __attribute__((aligned(32))) 或放入独立结构体,确保各占一条 Cache Line;3)IPC 优先用 FreeRTOS 队列(值拷贝)而非裸全局变量,队列内部已有临界区保护;4)信号量只做同步,不要用二值信号量传递数据;5)用 esp_timer 或 GPIO 翻转测两核争用时的延迟抖动,若抖动异常增大即疑似伪共享;6)必要时用 esp_cache_msync 或关闭对应区域 Cache 做对照验证。注意队列长度和 item size 要匹配,避免频繁 malloc 造成堆碎片。
mcuku 阿沐 · 2026-10-08