打印
[STM32]

51单片机移植STM处理器程序的奇怪问题

[复制链接]
1307|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xjycug|  楼主 | 2017-5-4 22:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
原来在51单片机上些了个接收数据并解析数据的程序,解析数据为了看起来工整,使用了逐层函数判断,所以函数里面套函数,可能有有五层吧,数据是ASCII码,所以在最终解析字符串时使用了C标准库函数atof(),这个代码在51单片机上运行没有问题,但是移植到STM32处理器后,在最内层的函数调用时,一旦执行atof函数,程序便跳转到函数HandFault_Handler,感觉是程序跑飞了,后来想,是不是调用atof的地方有些深,于是拿个字符串测试
到哪一层atof会跑飞,因为在主函数调用该atof没有问题,于是逐级试,最后发现一个很奇怪的现象,将该函数放于与该同级的前一个调用的函数中,原来跑飞程序的地方程序运行正常了。但是将在另一个地方增加的atof注释掉后,这个又跑飞了。不知是什么问题。也不知道有没有人遇到过这个问题。后来我解决的办法是不要该函数了,直接在调用函数的地方直接写atof函数,转换字符串。现在程序运行正常。但是,总感觉还是有问题,不知有没有人遇到过。求指点

相关帖子

沙发
john_lee| | 2017-5-4 22:48 | 只看该作者
感觉是栈空间小了。

使用特权

评论回复
板凳
linqing171| | 2017-5-5 07:08 | 只看该作者
你用的ADS编译器? ads的semihost会发生类似问题。
不过看起来确实像是堆栈的问题。

使用特权

评论回复
地板
@若水| | 2017-5-5 08:47 | 只看该作者
将启动文件中的堆栈值改大些,看看

使用特权

评论回复
5
coody| | 2017-5-5 11:53 | 只看该作者
这是把51当作电脑来用么?

使用特权

评论回复
6
xjycug|  楼主 | 2017-5-8 15:30 | 只看该作者
我用的是keil4

使用特权

评论回复
7
xjycug|  楼主 | 2017-5-8 15:43 | 只看该作者
谢谢楼上诸位,修改大了堆栈空间后,没有跑飞了。

使用特权

评论回复
8
xjycug|  楼主 | 2017-5-8 15:45 | 只看该作者
51都用的好好的,是不是arm中实现atof函数的算法较为耗堆栈空间?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

20

主题

185

帖子

2

粉丝