Hello,
this interesting discussion contains almost all the information I need, but unfortunately I couldn't reproduce it in my env. Could someone shed a light in my mind? ...
So, I have an ESP32-S3 (2 cores)
In the 'Component config -> ESP System Settings' I unchecked (disabled) 'Watch CPU1 Idle Task' and 'Also watch CPU1 tick interrupt'
I couldn't find any settings about enabling static task execution, but I don't really understand why does it matter? The required memories (stack, etc) is allocated only once, during starting of the task on CPU1.
In the source I've defined a task and scheduled it with
xTaskCreatePinnedToCore(...). In the task I print the affinity of itself (it is 1). So far so good. Changing a volatile variable in this task has an effect in the main_app().
But once I disable the interrupts in this task (on core1) by calling the
portDISABLE_INTERRUPTS(); the execution falls apart. Among many others I can see this message:
Guru Meditation Error: Core 0 panic'ed (Interrupt wdt timeout on CPU0).
What is going on here? Is the portDISABLE_INTERRUPTS() call disables interrupts on core0 also? How to disable interrupts only on one core?
Loosely coupled question but originally I tried to override the
esp_startup_start_app_other_cores_default() method in order to completely override the core1 execution (according to this:
https://docs.espressif.com/projects/esp ... re-startup). I terribly failed. What is wrong with overriding this way?
Code: Select all
void esp_startup_start_app_other_cores_default(void) {
...
}
My code seemingly didn't start in that method (I tried to blink a led, I tried to write into a volatile variable, but no effect anyway)
Thanks for your answers!
ps: I'm using the latest, currently 5.0 IDF