使用printf循环打印字符串时,进HardFault_Handler。被困好几天,希望有大神解决。

2019-08-18 20:25发布

本人使用的是STM32F103C8T6芯片。我把代码贴出来放在图片附件,具体情况是这样的:我需要循环不断向上位机打印字符串,然而使用printf函数打印字符时只有循环开始时可用,然后循环第二次或者第三次时就会进HardFault_Handler。(也就是说它可以打印字符,只是只能打印出两组到三组就因为进硬错误而不再打印了)也曾看过相似问题的帖子,对于他们给出的解决方案也尝试过。
首先是对printf函数本身进硬错误的解决方案有:通过对字符的定义添加__align(4)进行修饰,主要解决字符对齐造成的问题,同样的解决方案还有在程序初始时添加SCB->CCR |= 0x200;也是为了实现字节对齐。
其次对进HardFault_Handler本身的调试方法,通常不外乎需要对进错误语句进行定位。例如http://blog.csdn.net/xiahouzuoxin/article/details/10068455这篇文档所提供的方法,但是对于这种方法再进行hardfault右键show caller code 这一步时,软件提示cannot access memory,具体如附件图5。file:///D:QQ1398030584ImageC2CBK5FMC0N_MP@OH@ZY~RXDBG.png
对了,还有一个问题,我调试时发现它是因为bus fault进入hardfault的,但是我不懂怎么解决,网上也没找到相关的问题的解决方案。
总而言之,上述解决方案我都没成功。这个问题已经折腾了我近乎一星期了,希望能有大神能随手就帮我解决了,万分感激先行谢过!!~~
file:///D:QQ1398030584ImageC2CBK5FMC0N_MP@OH@ZY~RXDBG.png


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
4条回答
DownStars
2019-08-18 22:36
问题解决了,原因和printf函数关系不大,是我先入为主。问题出在我自己写的中断服务函数里,里头有个数组越界了。不过还是很谢谢大家的帮助~另期许所有如我般遇见问题的小白,当一个地方找不到问题的解决方案时,把目光放在整个工程里或许是因为其他某个函数的错误导致的。希望本人的一些教训可以帮助更多的人~~

一周热门 更多>