sanit 发表于 2018-6-20 17:31:37

RXT任务中使用printf导致异常,怎么回事呢


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

eric2013 发表于 2018-6-21 00:14:19

方便的话上传下例子,我修改下,之前有网友咨询过一次,忘了怎么解决了。

sanit 发表于 2018-6-21 08:59:05

硬汉哥帮忙看一下

eric2013 发表于 2018-6-21 10:00:03

使用了printf的任务,任务栈一定要加大。

你要
static uint64_t AppTaskLEDStk;   /* 任务栈 */
static uint64_t AppTaskStartStk;   /* 任务栈 */

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

sanit 发表于 2018-6-21 10:37:46

我在高优先级任务中使用了printf,不会被抢占,printf函数也占用任务栈吗? 那个underflow是堆栈向下溢出吗?

eric2013 发表于 2018-6-21 10:44:41

sanit 发表于 2018-6-21 10:37
我在高优先级任务中使用了printf,不会被抢占,printf函数也占用任务栈吗? 那个underflow是堆栈向下溢出吗 ...

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

sanit 发表于 2018-6-21 13:30:54

好,多谢大哥指点迷津。

myxiaonia 发表于 2018-8-10 14:17:29

要在os中使用printf函数,需要重载几个printf内部调用到函数

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

那几个重载函数rtx没有做好,很容易就出问题了
页: [1]
查看完整版本: RXT任务中使用printf导致异常,怎么回事呢