uCOS在STM32下打印浮点数问题完美解决

本文介绍在uCOS系统中利用STM32F103进行内部温度采集并通过串口输出的过程。针对串口输出任务调度问题,通过调整任务堆栈大小及对齐方式成功解决问题。

 有问题的打印输出(每次开机只能输出一次,下面是按下复位的):

 

  今天在做一个简单的在ucos系统下采集STM32F103内部温度后用串口打印,用到邮箱缓冲区传递浮点数温度,但在打印的时候出现问题:串口调试助手中只显示一次温度数据,led小灯也不闪,也就是只进行一次调度呗,刚开始以为是调度问题,首先想到的是在进行温度AD转换时用到delay_ms(5)系统延时,这里面会进行任务调度,于是把他换成软件阻塞延时,还是不行,进行多种尝试之后才发现是卡在了打印浮点数上了,因为我试着把温度转成整数就能正常输出,在裸机下打印输出浮点也是OK的,最后使用如下方法解决:

仅仅是把任务堆栈的空间变大!!!

//原来打印输出有问题的
#define PRINT_STK_SIZE  64

//调大到256
#define PRINT_STK_SIZE  256

看网上说的还有任务堆栈8字节对齐:

//就是在普通的前面加上__align(8)
__align(8) OS_STK PRINT_TASK_STK[PRINT_STK_SIZE];

我试过这种方法,如果我仅仅加上__align(8)而堆栈大小不变还是不能正常输出,你们也出现这种情况的话一种方法不行的话就都试试。

这才是我想要的结果:

 下面放出这段成

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

small_planet

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值