NXP

cortex m3 LPC1768 sprintf %f 出现崩溃 硬件错误 reset 原因是 a

2019-07-12 13:55发布


我使用的是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));//(实现三位小数转换)
 与大家一起分享!