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:
www.nadler.com/backups/20110712_portable_ARM_CM0.zip 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):
Any comments on my “portable” merge appreciated !
int answer = 46; debug_printf("CONTROL register=%08x, stack in use is %sn",__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 MSPn"); // 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 %sn",__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);
Best Regards, Dave PS: My app has now processed >1 million CAN msgs
very happily ;-)