先定位:用esp_timer或GPIO翻转在关键任务入口/出口打点,配合idf.py monitor看任务切换时序;开启CONFIG_FREERTOS_USE_TRACE_FACILITY和vTaskGetRunTimeStats,观察WiFi任务(wifi、tiT、pp)与用户任务的CPU占用和抢占次数。若出现用户任务长时间得不到调度或WiFi断流,多为用户任务优先级高于WiFi任务导致协议栈饥饿。配置原则:WiFi协议栈任务由IDF内部创建,优先级通常为23(wifi)、22(tiT)、18-20(pp),用户任务应低于这些值,一般业务任务设5-10,实时性要求高的控制任务可设15-18但避免长期占用;高优先级任务必须阻塞等待事件,禁止忙等。双核绑定用xTaskCreatePinnedToCore,把WiFi/网络处理放core0,计算密集或实时控制放core1,减少同核抢占。必要时用vTaskPrioritySet动态调整,或用互斥量/队列解耦,避免在临界区调用阻塞API。
mcuku 阿沐 · 2026-10-20