Cortex-M3 Stack problem using a bootloader

I found a problem on the Cortex-M3 port. In the port.c file the MSP (main stack pointer) is initialized assuiming that the vector table is strored at the adress 0x00000000, using a bootloader this is not hte case. For that reason I modified the code as follow: Line 160:   prvSetMSP( *((unsigned portLONG *) portNVIC_VTABLE ) ); The portNVIC_VTABLE must be defined using: #define portNVIC_VTABLE             0xE000ED08 Hope can help….

Cortex-M3 Stack problem using a bootloader

Very good point. Can we add this to the standard download?

Cortex-M3 Stack problem using a bootloader

Another correction should be done is the systick timer reload value. To be correct the value should be loaded using: *(portNVIC_SYSTICK_LOAD) = (configCPU_CLOCK_HZ / configTICK_RATE_HZ)-1; regards Ravaz

Cortex-M3 Stack problem using a bootloader

I like to make sure I make that mistake over and over again :o)  It will be right (for this port at least) in the next version. Regards.

Cortex-M3 Stack problem using a bootloader

I would take the chance to thank you for the great job and for the perseverance you have to continously improve it….

Cortex-M3 Stack problem using a bootloader

I did the modification for the version 4.8.0 as follow void vPortStartFirstTask(void) {     asm volatile(                     "    ldr r0, =0xE000ED08  n" /* Load the NVIC_TABLE offset address. */                     "    ldr r0, [r0]         n" /* Get the vector table offset. */                     "    ldr r0, [r0]         n" /* Get the stack pointer. */                     "    msr msp, r0          n" /* Set the msp back to the start of the stack. */                     "    svc 0                n" /* System call to start first task. */                 ); } Regards Ravaz