STM32F4x,UCOSII, 浮点运算异常,printf打印浮点异常的解决办法

在STM32F405芯片上使用UCCOSII和keilMDK开发时,遇到任务中的浮点运算结果通过printf打印出000或异常值。问题根源在于任务堆栈未按八字节对齐。通过在任务堆栈声明前添加__align(8)指令,确保堆栈对齐,从而解决了浮点运算结果打印异常的问题。之前误认为是FPU未开启,但在裸机程序中浮点运算正常,表明问题在于操作系统配置。
摘要由CSDN通过智能技术生成

芯片平台:STM32F405,

系统:UCCOSII, keil MDK

问题描述:任务中 进行浮点运算,然后printf打印结果,发现是000或其他异常值。

解决办法:

在任务堆栈声明前面加入强制八字节对齐命令,如下:

//OS_STK UART5_REC_TASK_STK[UART5_REC_STK_SIZE];
__align(8) static OS_STK UART5_REC_TASK_STK[UART5_REC_STK_SIZE];

==============================

解决过程,

先以为是STM32F05,没有开启FPU浮点运算,(确实没开启),但找了半天也没正确的开启。。

然后跑裸机程序,浮点运算及printf正常。应该是ucosII的问题,

继续找,终于发现有人指出是默认堆栈不是八字节对齐,然后解决了···

参考链接:keil c语言浮点数,Keil MDK浮点数支持不正常的解决方案_影子的覆盖的博客-CSDN博客

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值