当前位置:编程学习 > C/C++ >>

cortex m3 LPC1768 sprintf %f 出现崩溃 硬件错误 reset 原因是 arm-gcc 不支持 sprintf %f

我使用的是NXP的cortex-m3芯片LPC1768作为主控芯片,经过研究反复研究和实验,修改startup.s代码中的stack_size和heap_size的大小都无济于事,任然出现奇怪的现象,即在单步调试的时候,只能执行一次,并且这次得到的结果是正确的,然后就立即出现硬件错误,进入汇编语言的硬件错误死循环;如果全速运行,那么每次得到的结果都是0.00000,没有一次能得到正确结果,但是并没有死机,感觉应该是该sprintf %f的功能不正确而已,也不至于死机,不过偶尔确实有错误数据返回,但并没有什么规律。
 
基于此,在网上找了好久,终于弄明白,应该是这类微控制器不支持sprintf %f,因为这个操作太耗时,耗资源,不值得,很多微控制器都无法满足它的要求,故arm-gcc没有提供该支持或者支持得很不好,不过它也给出了凑合的解决办法,比较简单,模拟效果实现的。实现代码参考如下:  www.zzzyk.com
 
When using GCC compiler, due to internal standard C library architecture, it is strongly not recommended to use the "%f" mode in the wm_sprintf function in order to convert a float variable to a string. This leads to an ARM exception (product reset). 
 
 
 
[cpp]  
float float_num;  
uint8_t str_temp[128];  
sprintf(str_temp,"%d.%03d",(uint32_t)float_num,(uint32_t)((float_num * 1000) - (uint32_t)(float_num) * 1000));//(实现三位小数转换)  
 
补充:软件开发 , C++ ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,