Hello,
I wrote FreeRTOS code for blinking LED on STM32F103RB. When i debug the program it goes into HardFault exception. May i know what is the exact cause of this.
May i know what is the exact cause of this.
You may. Use the debugger and find the point where the HardFault is triggered.
I have a delay function in while loop. When this delay function is executing it goes to void xPortSysTickHandler( void ), it executes few instructions, then it goes to __asm void vPortSetInterruptMask( void )
{ PRESERVE8
push { r0 } mov r0, #configMAX_SYSCALL_INTERRUPT_PRIORITY msr basepri, r0 pop { r0 } bx r14 }
it executes this then void vTaskIncrementTick( void ) is done. then it goes to
__asm void vPortClearInterruptMask( void )
push { r0 } mov r0, #0 msr basepri, r0 pop { r0 } bx r14 } then it goes to
__asm void xPortPendSVHandler( void )
{ extern uxCriticalNesting; extern pxCurrentTCB; extern vTaskSwitchContext;
PRESERVE8
-----> mrs r0, psp
ldr r3, =pxCurrentTCB /* Get the location of the current TCB. */ ldr r2, [r3]
stmdb r0!, {r4-r11} /* Save the remaining registers. */ str r0, [r2] /* Save the new top of stack into the first member of the TCB. */
stmdb sp!, {r3, r14} mov r0, #configMAX_SYSCALL_INTERRUPT_PRIORITY msr basepri, r0 bl vTaskSwitchContext mov r0, #0 msr basepri, r0 ldmia sp!, {r3, r14}
ldr r1, [r3] ldr r0, [r1] /* The first item in pxCurrentTCB is the task top of stack. */ ldmia r0!, {r4-r11} /* Pop the registers and the critical nesting count. */ msr psp, r0 bx r14
nop }
i have show arrow in above code, from that is executes. When it executes nop instruction at last it jumps to Hardfault exception.
i guess while poping it is going to some different location.
Do help me out please