在ESP32-S3上,Wi-Fi协议栈默认运行在Core 0,实时控制任务建议固定到Core 1。具体做法:1) 使用xTaskCreatePinnedToCore()创建控制任务,指定核心1,优先级高于Wi-Fi任务(例如configMAX_PRIORITIES-2),并设置合适栈深(如4096字)。2) Wi-Fi初始化后,调用esp_wifi_set_ps(WIFI_PS_NONE)关闭省电模式,减少协议栈对CPU的占用。3) 控制循环中避免调用任何可能阻塞的Wi-Fi API,若需通信,使用FreeRTOS队列或环形缓冲区将数据传递给Core 0上的网络任务。4) 对于硬实时部分,可禁用Core 1的中断看门狗或调整tick rate,但需谨慎。5) 使用vTaskPrioritySet()动态调整优先级,确保控制任务在Wi-Fi突发流量时仍能抢占。实测表明,这样可将控制抖动从数百微秒降至几十微秒。注意:双核共享内存和缓存,需用临界区或原子操作保护共享数据。
mcuku 阿沐 · 2026-10-06