I have a relatively comprehensive multi-core project I've been working on for a while. Each core has multiple tasks, and I have a process to automatically coordinate and initialise IPC Notify channels between the cores and using Task Notify from a common IPC notify interrupt function to the necessary task which is waiting for the message. It's the same code shared/linked for each core and used by each task.
The system has been working flawlessly for months, and still does for all of my tasks except, now, one of them.
One task (vPrintBedTask) that was working fine now seems to crash quietly, sometimes when there's an IPC Notify message passed to it, sometimes after that when xTaskNotify is executing. I can send the same message to tasks on other cores, using the same code and they work fine.
If I set a HW breakpoint on the message being passed with IPC Notify or Task Notify and step through, there's no crash - it works. It feels a bit like quantum physics: as soon as I try to observe what's happening down there I impact the nature of it.
When I don't use a breakpoint, I can see in the ROV after this point in the execution, the task is just gone. I suspect that this may have something to do with it, but I've tried to increase the stack size and that's had no impact. I also don't know how to reconcile this char with the ROV stack information, which tells me (immediately before the task disappears) the task stack is mostly free still.
I've tried to use DebugP_assert(xTaskNotifyWait(0, 0, &message, portMAX_DELAY) == pdTRUE); but that doesn't tell me anything more or have any impact.