中级会员
 
- 积分
- 406
- 金钱
- 406
- 注册时间
- 2012-4-4
- 在线时间
- 0 小时
|
移植了论坛上发布的库函数版本(FATFS文件系统),发现这个问题,跟踪调试
。。。上面不要了~~
继续调试:
函数进入:
HardFault_Handler
这个该怎么查错呢,(主要原因有两个,堆栈溢出和数组越界)但是我还没找到。
先从堆栈溢出,(根据堆栈指针查看堆栈,找到堆栈中最新的函数返回地址,到这个地址上去加断点,一步步根据汇编执行代码。很快就能找到出错原因,大多数是数组溢出,或者是指针初始化的问题。) 话说绿色这个通过堆栈回查函数我还真不会,我就直接把启动文件(由于先前是在库函数3.1.0下进行的,启动文件用startup_stm32f10x_cl.s)改为startup_stm32f10x_md.s,此时堆栈如下:
那我就把Stack_Size 改为0x00000800(原子的板子有20K的RAM),调试下可以正常显示了,说明问题出在堆栈溢出。
然后我再看原子发布的基于库函数版本3.5.0的启动文件startup_stm32f10x_md.s,堆栈如下所示:
这个堆栈和我原来没有改动前一样,这我就迷糊了,我想(可能是库函数版本不一样吧,堆栈的大小需求也不一样)
然后在论坛里搜索到(库函数解析:http://www.openedv.com/posts/list/313.htm),下载了3.0.0版本的启动件startup_stm32f10x_md.s,此时堆栈如下:
这个....所以现在想请教下各位朋友这个堆栈的定义和上限,我看库函数版本3.1.0的启动文件startup_stm32f10x_hd.s的堆栈也就0x00000400啊~~那我改成0x00000800不就是大容量的定义方式了,这个有啥区别影响么?
求助下吧~hold不住了
|
|