This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Hardfault exception error

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.

Parents Reply Children
  • 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 )

    { PRESERVE8

    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