ESP32 IPC

New

github.com/espressif/esp-idf/blob/master/components/esp_ipc/ipc.c, “ipc%d”
github.com/espressif/esp-idf/blob/master/components/freertos/timers.c, “Tmr Svc”

Old

github.com/pycom/esp-idf-2.0/blob/master/components/esp32/ipc.c

void esp_ipc_init()
{
    s_ipc_mutex = xSemaphoreCreateMutex();
    s_ipc_ack = xSemaphoreCreateBinary();
    const char* task_names[2] = {"ipc0", "ipc1"};
    for (int i = 0; i < portNUM_PROCESSORS; ++i) {
        s_ipc_sem[i] = xSemaphoreCreateBinary();
        xTaskCreatePinnedToCore(ipc_task, task_names[i], XT_STACK_MIN_SIZE, (void*) i,
                                configMAX_PRIORITIES - 1, &s_ipc_tasks[i], i);
    }
}

Forum 1

How to resolve ipc1 task

ipc1,ipc0 tasks are auxiliary tasks used during flash operations. If code on CPU0 is doing flash operation, then ipc1 task runs for the duration of the operation; and vice versa. In the log you have posted, it says that IDLE task on CPU0 has not been running for a while. It means that the task on CPU0 did not yield to IDLE task for that duration of time. Ipc1 task is running on CPU1, so it is not itself responsible for the problem. It just happens to be running on CPU1 at the moment when the task watchdog is printing this message.

Forum 2

Task watchdog getting triggered when opening OTA partition #3775

[Switching to thread 9 (Thread 1073446484)]
#0 0x40083df2 in spi_flash_op_block_func (arg=0x0) at esp-idf/components/spi_flash/cache_utils.c:82
#1 0x40082c6a in ipc_task (arg=0x0) at esp-idf/components/esp32/ipc.c:62
#2 0x40091270 in vPortTaskWrapper (pxCode=0x40082c08 <ipc_task>, pvParameters=0x0) at esp32-arduino-lib-builder/esp-idf/components/freertos/port.c:143

Leave a Reply

Your email address will not be published. Required fields are marked *