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

来源:互联网 发布:西门子plc编程入门基础 编辑:程序博客网 时间:2024/06/16 06:17


我使用的是NXP的cortex-m3芯片LPC1768作为主控芯片,经过研究反复研究和实验,修改startup.s代码中的stack_size和heap_size的大小都无济于事,任然出现奇怪的现象,即在单步调试的时候,只能执行一次,并且这次得到的结果是正确的,然后就立即出现硬件错误,进入汇编语言的硬件错误死循环;如果全速运行,那么每次得到的结果都是0.00000,没有一次能得到正确结果,但是并没有死机,感觉应该是该sprintf %f的功能不正确而已,也不至于死机,不过偶尔确实有错误数据返回,但并没有什么规律。

基于此,在网上找了好久,终于弄明白,应该是这类微控制器不支持sprintf %f,因为这个操作太耗时,耗资源,不值得,很多微控制器都无法满足它的要求,故arm-gcc没有提供该支持或者支持得很不好,不过它也给出了凑合的解决办法,比较简单,模拟效果实现的。实现代码参考如下:

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). 

 

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));//(实现三位小数转换)


 与大家一起分享!

原创粉丝点击