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

[复制链接]
1523|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 | 显示全部楼层
将启动文件中的堆栈值改大些,看看
coody 发表于 2017-5-5 11:53 | 显示全部楼层
这是把51当作电脑来用么?
 楼主| xjycug 发表于 2017-5-8 15:30 来自手机 | 显示全部楼层
我用的是keil4
 楼主| xjycug 发表于 2017-5-8 15:43 来自手机 | 显示全部楼层
谢谢楼上诸位,修改大了堆栈空间后,没有跑飞了。
 楼主| xjycug 发表于 2017-5-8 15:45 来自手机 | 显示全部楼层
51都用的好好的,是不是arm中实现atof函数的算法较为耗堆栈空间?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

20

主题

185

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部