侗族网站建设,为什么大公司不用c 做网站,wordpress 不显示摘要,网站开发精灵问题现象
基于freeRTOS和Contex-M4内核的单片机#xff0c;在使用sprintf格式化浮点数时#xff0c;由于打开了看门狗复位#xff0c;导致程序频繁重启#xff0c;不开看门狗复位#xff0c;程序就会卡死。而同样的程序在切换到Contex-M3内核的单片机时#xff0c;就能正…问题现象
基于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可以采用浮点数转整数和小数显示的方法。