My application started to act crazy. I find the device is working (i.e. interrupt handlers are being called, my status led keeps on blinking) but tasks are stopped.
I halt the system via a debugger and find that uxMissedTicks is 4 billion sometehing. The memory layout is something like this;
0x20009d58 0x4 …/Source/tasks.o
0x20009d5c 0x14 …/Source/tasks.o
0x20009d70 0x14 …/Source/tasks.o
0x20009d84 0x4 …/Source/tasks.o
0x20009d88 0x4 …/Source/tasks.o
0x20009d8c 0x4 …/Source/tasks.o
0x20009d90 0x4 …/Source/tasks.o
0x20009d94 0x4 …/Source/tasks.o
0x20009d98 0x4 …/Source/tasks.o
.bss.xHeap 0x20009d9c 0x2804 …/Source/portable/MemMang/heap_2.o
.bss.xStart 0x2000c5a0 0x8 …/Source/portable/MemMang/heap_2.o
.bss.xEnd 0x2000c5a8 0x8 …/Source/portable/MemMang/heap_2.o
This is ARM Cortex-M3, SRAM starts at 0x20000000 and the SRAM size is 64k. So it looks like growing down xHeap stack could do this kind of damage. But the variables in between looks intact (as indeed the top used priority is 4).
When I set uxMissedTicks to, say, 10 via debugger the system continiues to operate correctly (at least apparently, it answers serial port queries and all)… but soon after uxMissedTicks is again some 4-billion value.
Any idea how to hunt this ?