刚开始移植了个SX1262 (LORA芯片)驱动,驱动里面有个计算频率值的地方用到了double 类型,然后直接导致吗GD32进入了硬件错误中断。
当时以为是计算频率的表达式本身有问题。
后来 ,我自己编程过程中用到了float类型,才意识到,是要使用浮点类型变量就会进硬件错误中断。
2.1 HardFault 异常方向排查问题,分析出现的问题
出现 HardFault 硬件错误的原因主要有两个方面:
内存溢出或者访问越界
堆栈溢出
但是从配置角度而言,任务栈空间是足够的,就算加了浮点运算,需要的空间大,我创建任务直接加大栈空间到 2048 问题依旧存在,根据 JLINK 仿真调试也是一头雾水,无果。
修改启动文件 startup_gd32f30x_hd.s 的堆栈空间,增加堆栈空间问题依旧。
原文链接:https://blog.csdn.net/QQ1452008/article/details/121758899
- 总结
问题困扰几天,虽然解决,但不知根本,内心煎熬。后续有时间再来一探究竟!
现已知晓来龙去脉,请看第二回
GD32F30x Keil 环境下在 FreeRTOS 任务中使用浮点运算报 HardFault 异常的问题(二)
https://blog.csdn.net/QQ1452008/article/details/122820744
分析一个关于STM32 芯片异常复位的经典案例!