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

今天在做一个简单的在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)而堆栈大小不变还是不能正常输出,你们也出现这种情况的话一种方法不行的话就都试试。
这才是我想要的结果:
下面放出这段成

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

被折叠的 条评论
为什么被折叠?



