在ESP32双核上,FreeRTOS任务亲和性(xTaskCreatePinnedToCore)是避免Wi-Fi协议栈与用户中断优先级反转的关键。首先,将Wi-Fi协议栈任务固定到Core 0(协议栈专用核),用户实时任务固定到Core 1,这样Wi-Fi中断(如MAC层)在Core 0处理,不会抢占Core 1上的用户高优先级任务。其次,用户中断(如GPIO)应注册为ISR,并通过xQueueSendFromISR将数据传递给Core 1上的任务,避免在ISR中直接调用可能阻塞的Wi-Fi API。为防优先级反转,确保用户任务优先级高于Wi-Fi任务,但低于系统tick,并使用互斥量(如xSemaphoreTakeRecursive)保护共享资源,同时设置超时。实操建议:在sdkconfig中启用CONFIG_FREERTOS_UNICORE=0,并检查esp_wifi_init的默认任务优先级(通常为23),用户任务可设为24-25。最后,用vTaskPrioritySet动态调整,但避免在中断上下文调用。
mcuku 阿沐 · 2026-08-27