硬汉嵌入式论坛

 找回密码
 立即注册
查看: 2632|回复: 7
收起左侧

[RL-RTX] RXT任务中使用printf导致异常,怎么回事呢

[复制链接]

36

主题

1449

回帖

1557

积分

至尊会员

积分
1557
发表于 2018-6-20 17:31:37 | 显示全部楼层 |阅读模式

今天简单测试了一下RXT操作系统移植,就两个任务,一个AppTaskLED 一个AppTaskStart。
在AppTaskStart任务中调用printf函数,这个任务优先级最高,并且使用软件阻塞延时delay,目的是让printf函数(串口发送中断彻底发送完毕)彻底执行完毕再进行任务切换,实测AppTaskLED堆栈会出现underflow,加大AppTaskLED这个任务堆栈也会穿同样问题。AppTaskStart任务打印,怎么会导致AppTaskLED 堆栈出现underflow呢?
ps:堆栈溢出应该是Overflow,这个underflow是什么意思呢?
1529486506(1).jpg
1529486538(1).jpg
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107759
QQ
发表于 2018-6-21 00:14:19 | 显示全部楼层
方便的话上传下例子,我修改下,之前有网友咨询过一次,忘了怎么解决了。
回复

使用道具 举报

36

主题

1449

回帖

1557

积分

至尊会员

积分
1557
 楼主| 发表于 2018-6-21 08:59:05 | 显示全部楼层
硬汉哥帮忙看一下

V6-400_RTX实验_库移植方式(超级简单).rar

7.61 MB, 下载次数: 88

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107759
QQ
发表于 2018-6-21 10:00:03 | 显示全部楼层
使用了printf的任务,任务栈一定要加大。

你要
static uint64_t AppTaskLEDStk[512/8];     /* 任务栈 */
static uint64_t AppTaskStartStk[512/8];   /* 任务栈 */

都修改为512,这样就没问题了,你可以都加上打印测试了。
回复

使用道具 举报

36

主题

1449

回帖

1557

积分

至尊会员

积分
1557
 楼主| 发表于 2018-6-21 10:37:46 | 显示全部楼层
我在高优先级任务中使用了printf,不会被抢占,printf函数也占用任务栈吗? 那个underflow是堆栈向下溢出吗?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107759
QQ
发表于 2018-6-21 10:44:41 | 显示全部楼层
sanit 发表于 2018-6-21 10:37
我在高优先级任务中使用了printf,不会被抢占,printf函数也占用任务栈吗? 那个underflow是堆栈向下溢出吗 ...

占用的。
underflow估计是栈空间异常了。
回复

使用道具 举报

36

主题

1449

回帖

1557

积分

至尊会员

积分
1557
 楼主| 发表于 2018-6-21 13:30:54 | 显示全部楼层
好,多谢大哥指点迷津。
回复

使用道具 举报

5

主题

582

回帖

597

积分

版主

Rank: 7Rank: 7Rank: 7

积分
597
发表于 2018-8-10 14:17:29 | 显示全部楼层
要在os中使用printf函数,需要重载几个printf内部调用到函数

rtx重载了这几个标准库相关的函数,在rtx_lib.c文件里,就是_mutex_initialize注释下的几个函数

那几个重载函数rtx没有做好,很容易就出问题了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-6-13 07:50 , Processed in 0.208265 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表