[求助] HardFault_Handler异常

shipeng   2017-11-7 18:02 楼主
请教各位,最近用MDK5.11编写STM32F103RC的程序,但是却莫名其妙进入HardFault_Handler异常中断,现在本人完全一头雾水,还请大神指点迷津!


模电临时工

回复评论 (13)

你这种写法我第一次见,你把字符串外面的大括号去了再调
点赞  2017-11-7 18:14
变量声明要放在函数开始,另外你常量最好加const放到flash里
点赞  2017-11-7 18:48
引用: huo_hu 发表于 2017-11-7 18:48
变量声明要放在函数开始,另外你常量最好加const放到flash里

情况是这样的:“char        FileName[18]={"/UNESD/THXXXX.CSV"};”这些看似常量的数组,实际不能做常量,因为:注意THXXXX.CSV中的4个X是要重新赋值的下面的一个数组也是一样,所以不能用常量;另外我试了一下把下面几个大数组放到函数开始位置也还是不行仍然在同样的位置进入HardFault_Handler异常中断
模电临时工
点赞  2017-11-8 08:30
引用: lcofjp 发表于 2017-11-7 18:14
你这种写法我第一次见,你把字符串外面的大括号去了再调

大括号也去掉了,按照你们的建议能改的都改了还是在同样的位置进入HardFault_Handler异常中断。 HardFault_Handler2
模电临时工
点赞  2017-11-8 08:41
会不会是堆栈溢出了,你把file name这个变量放到函数外面让它成为全局变量试试
点赞  2017-11-8 09:20
引用: shipeng 发表于 2017-11-8 08:41
大括号也去掉了,按照你们的建议能改的都改了还是在同样的位置进入HardFault_Handler异常中断。

你的栈空间设置的多大?你的局部变量太大了,会不会溢出了
点赞  2017-11-8 09:21
引用: huo_hu 发表于 2017-11-7 18:48
变量声明要放在函数开始,另外你常量最好加const放到flash里

一般在keil的arm开发环境,C编译器都支持C99特性,在函数中可以在需要的地方临时定义变量,而不需要一定要在函数开始之前。
点赞  2017-11-8 09:25
引用: lcofjp 发表于 2017-11-8 09:21
你的栈空间设置的多大?你的局部变量太大了,会不会溢出了

是不是堆栈空间一定要大于我的局部变量?
模电临时工
点赞  2017-11-8 09:36
引用: shipeng 发表于 2017-11-8 09:36 是不是堆栈空间一定要大于我的局部变量?
各位问题解决了原因是堆栈溢出,感谢大家的热心回复,特别感谢lcofjp的7楼提醒,之前堆栈空间是默认的Stack_Size EQU 0x00000400后来通过查资料怀疑过这方面的原因改过一次Stack_Size EQU 0x00000800也还是不行,最后隐隐约约想起临时变量都是定义在堆栈中的,我的大数组临时变量大小为0x1400因此之前的0x400和0x800都是不够的,改为Stack_Size EQU 0x00002000后完美解决! 本帖最后由 shipeng 于 2017-11-8 09:49 编辑
模电临时工
点赞  2017-11-8 09:48
引用: shipeng 发表于 2017-11-8 09:36
是不是堆栈空间一定要大于我的局部变量?

局部变量是在栈里分配的,你觉得呢
点赞  2017-11-8 09:48
你这个应该优化一下,没必要搞这么多局部变量
点赞  2017-11-8 10:33
引用: huo_hu 发表于 2017-11-8 10:33
你这个应该优化一下,没必要搞这么多局部变量

我感觉一个都不能少啊,我这个程序是用在一款:可导出数据至U盘的温湿度计上面的,温湿度数据存储在25Q16上,而我的25Q16数据存储是按照4096Byte为存储单元存的,因此有一个读取25Q16的4096字节的数组。还有一个1024Byte的数组是用作CH376的写入缓存,写入数据累积满整数个扇区(512字节的整数倍)再写入CH376可以大幅提升U盘的读写效率以及节约擦写寿命。
模电临时工
点赞  2017-11-8 11:10
引用: shipeng 发表于 2017-11-8 11:10
我感觉一个都不能少啊,我这个程序是用在一款:可导出数据至U盘的温湿度计上面的,温湿度数据存储在25Q16 ...

开个全局缓冲区重复利用这个缓冲
点赞  2017-11-8 12:55
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复