1. 涉及的软硬件工具
(1)MCU为STM32F407,自带FPU浮点数运算
(2)keil工程使用正点原子STM32F407探索者工程,包含动态内存分配mymalloc功能
2. 问题说明
之前的工程中,下面操作是可以直接打印浮点数的:
float num = 11.965;
printf("num = %.3f\r\n", num);
//打印:num = 11.965
后面添加一堆功能之后,发现同样的操作,无法正常打印浮点数,打印效果如下:
num = 11\0965 //原本的小数点'.'变成'\0'
num = 11?965 //原本的小数点'.'变成'?'
3. 问题排查与定位
3.1 排查1
由于最直接的现象是printf()函数打印浮点数是有问题的,所以直接开始了解STM32F407打印浮点数失败的原因(实际上该解决问题的思路有问题,因为原本就可以浮点数打印,不过也当做顺便了解其他知识)。
STM32F407有自带的FPU浮点数运算,但不一定能直接使用,可能需要使能啥的,在CSDN上了解到,具体如下:
(1)是否优化等级开太大了。并没有优化
(2)工程是否选择为Single Precision。已选择
(3)__FPU_PRESENT和__FPU_USED宏是否都为1
__FPU_PRESENT确定为1