Ucos printf浮点数问题

在STM32上使用UCOS时,遇到printf函数打印float类型数值显示为0.0的问题。原因是任务堆栈未按8字节对齐。通过在IAR编译器中使用#pragma data_alignment指定堆栈对齐解决了此问题。printf函数的8字节对齐需求源于C运行库和AAPCS规范,与硬件的64位数据操作指令有关。
摘要由CSDN通过智能技术生成

1. 问题描述:

当使用uocs printf(),sprintf()打印浮点数问题会出问题,但是裸机不会出问题

我现在使用STM32跑UCOS,在使用sprintf打印float类型时候,不管是何值最后都是0.0,但是类型是int,short类型时没有问题。网上查到是任务堆栈8字节对齐就可以了。

当没有操作系统时,系统堆栈是8字节对齐的,但是当使用ucos时,用户任务不一定是8字节对齐.


Task1-LED1 中的堆栈起始指针0x200004A4,不是8字节对齐,所以但在Task-LED1任务中调用printf等系列函数就会出现问题.


2. 解决方法

我用的是IAR,通过#pragma data_alignment指定对齐字节数

#pragma data_alignment=8

OS_STK Task1_LED1_Stk[Task1_LED1_Stk_Size];

#pragma data_alignment=8

OS_STK Task2_backlight_Stk[Task2_backlight_Stk_Size];


3. 8字节对齐原因

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值