通过一天的调试,发现一旦启动调试,芯片就会进入中断函数hardhandler()。
数组看了一下内存地址对应手册,也没有溢出。
以为是时钟超频的问题,降频了之后依然无解。
参照官网的hardfault诊断,把能试的都试了。 后来看到最后一项 关于,堆栈溢出。
死马当活马医。 打开startup_stm32f40_41xxx.s,修改了里面的堆栈大小。
tack_Size EQU 0x00010000
AREA STACK, NOINIT, READWRITE, ALIGN=3
Stack_Mem SPACE Stack_Size
__initial_sp
; <h> Heap Configuration
; <o> Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
; </h>
Heap_Size EQU 0x00000200
AREA HEAP, NOINIT, READWRITE, ALIGN=3
__heap_base
Heap_Mem SPACE Heap_Size
__heap_limit
然后好了, 浪费我的时间啊。
总结: 在MCU中,大数组的使用时,千万注意堆栈,以及指针的操作。