First thanks again Richard for the support !
It appears that crashing I encountered was caused by some
problems in the “portable” components published by NXP.
I’ve corrected sources, merging the M0-specific changes
from NXP into FreeRTOS V7 ARM_M3 distributed files:
Not included, and I’m not sure where this should go:
MSP should be set up to point to a reserved small stack,
just after switching the stack in use to PSP.
Here’s the code I’m using (for now in my main):
int answer = 46; debug_printf("CONTROL register=%08x, stack in use is %s\n",__get_CONTROL(), (__get_CONTROL()&0x2)?"PSP":"MSP"); debug_printf("Handler mode ALWAYS uses MSP ('Main' stack pointer')\n"); debug_printf("Thread 'normal' mode is *recommended* to use PSP ('Process' stack pointer),\n"); debug_printf("...but defaults (on startup) to MSP\n"); // Set up "process" stack pointer and switch to it __set_PSP(__get_MSP()); // copy current stack pointer value into PSP __set_CONTROL(0x00000002); // switch to "process" stack pointer PSP debug_printf("After stack pointer switch: CONTROL register=%08x, stack in use is %s\n",__get_CONTROL(), (__get_CONTROL()&0x2)?"PSP":"MSP"); debug_printf("The answer is %d (should be 46)\n",answer); // Set MSP to a "safe reserved area", so an exception can run safely... static MSP_stack; __set_MSP((int)&MSP_stack);
Any comments on my “portable” merge appreciated !
Best Regards, Dave
PS: My app has now processed >1 million CAN msgs