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):
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[100];
__set_MSP((int)&MSP_stack[99]);
Any comments on my “portable” merge appreciated !Thanks again,
Best Regards, Dave PS: My app has now processed >1 million CAN msgs
very happily ;-)