欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 明星 > 关于CM4内核的单片机使用sprintf格式化浮点数导致程序跑飞的问题

关于CM4内核的单片机使用sprintf格式化浮点数导致程序跑飞的问题

2024/10/25 1:35:22 来源:https://blog.csdn.net/fancyang/article/details/140289436  浏览:    关键词:关于CM4内核的单片机使用sprintf格式化浮点数导致程序跑飞的问题

问题现象

基于freeRTOS和Contex-M4内核的单片机,在使用sprintf格式化浮点数时,由于打开了看门狗复位,导致程序频繁重启,不开看门狗复位,程序就会卡死。而同样的程序在切换到Contex-M3内核的单片机时,就能正常运行。

解决过程:

1.首先怀疑是硬件FPU配置的问题,MDK默认打开了FPU,然而CM4的FPU打开后,是不能直接用sprintf处理浮点数的,据说是开辟的堆栈空间没有8字节对齐。而我这个为了兼容CM3的单片机代码,不可能都去把堆栈空间8字节对齐。

2.把FPU使能关闭后,编译,FreeROTS报了个“This port can only be used when the project options are configured to enable hardware floating point support”,原因是选择了ARM_CM4_MPU/port.c文件。

3.把ARM_CM4_MPU/port.c移除,导入ARM_CM3/port.c到工程,重新编译,程序运行正常。

举一反三:

由于我的程序不需要大量高精度的浮点数运算,我在使用CM4的单片机时,不需要打开FPU。如果确实需要FPU,可以采用浮点数转整数和小数显示的方法。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com