This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

HardFault_Handler(浮点fault)

Other Parts Discussed in Thread: TM4C1230E6PM

TM4C1230E6PM用TIVA库+Keil4+J-link+硬件,运行时总在HardFault_Handler,在调试的时候发现,单步执行VMOV.F32      s0,#2时跳到HardFault_Handler,工程是新建的(属性为默认配置).如下图所示:

求帮助,我是新手。

    1. IMPORT main
    2. AREA startup,CODE
    3. THUMB
    4. DCD 0x20000000 ;MSP,主堆栈起始地址,注意是向下增长
    5. DCD reset ;复位地址,复位后PC被赋予这个值
    6. reset PROC
    7. ENTRY
    8. ; CPACR is located at address 0xE000ED88
    9. LDR.W R0, =0xE000ED88
    10. ; Read CPACR
    11. LDR R1, [R0]
    12. ; Set bits 20-23 to enable CP10 and CP11 coprocessors
    13. ORR R1, R1, #(0xF << 20)
    14. ; Write back the modified value to the CPACR
    15. STR R1, [R0] ;上面的这一段是开启硬件浮点运算DSP,否则后面如果出现硬件浮点代码会fault
    16. LDR R0,=main ;获取main函数的地址
    17. BL main ;跳转到main执行
    18. B .
    19. ENDP
    20. END
    21. 这是从http://blog.chinaunix.net/uid-7921647-id-274021.html上看到了一部分提示注释,原因是就是因为没有启用硬件浮点运算,而在keil自带的启动代码里(如下面的代码),因为没有找到SystemInit,我把SystemInit屏蔽了,后来找了下相应的文件在system_TM4C123.c里有这个函数,包含后启用这个函数再用浮点相关的处理时就没有出现错误,其实这里应该是硬件浮点fault。
    22. Reset_Handler PROC
      EXPORT Reset_Handler [WEAK]
      ;IMPORT SystemInit
      IMPORT main
      ;LDR R0, =SystemInit
      ;BLX R0
      LDR R0, =main
      BX R0
      ENDP