之前使用KEIL5开发stm32的时候Sprintf使用完全没问题,昨天在使用%f格式化的时候出现数据错误
通过一系列的百度,设定字节对齐,勾选Use MicroLIB 这些方法都无效
跑了一下防止发现是sprintf把我数据格式化错误,
在这里插入图片描述
可以看到data 后两位非0的%f已经完全错误,
个人觉得会不会是程序优化问题,于是我把最高优化等级调低了一点,
完美解决最这个问题;
然而十几天后发现又出现了格式化错误,于是好好改了一下字节对齐问题终于解决
具体方法是设置栈空间的8字节对齐
OSTaskStkInit 通过在此函数内部设置即可(野火的例程)
p_stk=(CPU_STK *)((CPU_STK)(p_stk)&0xFFFFFFF8u) ;
放在 p_stk = &p_stk_base[stk_size]; 的下面