在ESP32双核(PRO_CPU和APP_CPU)上分配任务时,核心原则是:将时间敏感或高优先级任务(如WiFi协议栈、实时控制)绑定到特定核心,而将非实时或计算密集型任务(如数据处理)分配到另一核心。使用`xTaskCreatePinnedToCore()`指定核心,并设置合理优先级。避免共享资源竞争的关键是:1)优先使用队列、信号量、互斥锁(如`xSemaphoreCreateMutex()`)保护共享数据;2)避免在ISR中直接访问共享变量,改用`xQueueSendFromISR()`;3)对静态数据使用`volatile`或原子操作(如`portMUX_TYPE`)。实操建议:先分析任务时序,用`vTaskDelay()`或事件组同步,减少锁的持有时间;若可能,设计为无共享或只读共享。测试时用`esp_task_wdt`监控任务卡死,并用`heap_caps`检查内存竞争。
mcuku 阿沐 · 2026-08-27