OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5808|回复: 9

UCOSIII任务删除和重新创建问题

[复制链接]

27

主题

118

帖子

0

精华

高级会员

Rank: 4

积分
845
金钱
845
注册时间
2015-12-8
在线时间
175 小时
发表于 2018-3-29 19:59:01 | 显示全部楼层 |阅读模式
5金钱
问题如下:在任务1中需要阻塞等待一个信号量或者消息队列,任务1在等待是被挂起,发起任务调度。这是任务2开始执行,如果这个时候在任务2中把任务1给删除了会怎么样?之后再重新建立任务1的话,任务1是从头开始执行?还是从被删除之前阻塞那里开始执行?

为自己掌握新的知识感到快乐
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

27

主题

118

帖子

0

精华

高级会员

Rank: 4

积分
845
金钱
845
注册时间
2015-12-8
在线时间
175 小时
 楼主| 发表于 2018-3-29 20:01:03 | 显示全部楼层
现在项目中有这么使用,运行久了会随机出现问题,不稳定,不知道是不是这样操作的问题
回复

使用道具 举报

22

主题

203

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
378
金钱
378
注册时间
2017-11-29
在线时间
135 小时
发表于 2018-3-29 21:44:34 来自手机 | 显示全部楼层
已经被挂起的任务1可以被任务2删除的话,那么重建任务1的话,之前任务1的现场就啥也没有了,即从头执行! 这样理解对吗? 为何不用二值信号量?任务2释放信号量,任务1收到信号量继续执行。
回复

使用道具 举报

16

主题

339

帖子

0

精华

高级会员

Rank: 4

积分
824
金钱
824
注册时间
2017-6-18
在线时间
163 小时
发表于 2018-3-30 14:33:49 来自手机 | 显示全部楼层
任务有强制或非强制删除
回复

使用道具 举报

31

主题

265

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
413
金钱
413
注册时间
2018-1-9
在线时间
65 小时
发表于 2018-3-30 16:05:04 | 显示全部楼层
系统不推荐删除任务。再次创建任务,任务会从头开始,因为创建任务的时候有一步是,初始化堆栈,即便再次创建任务使用了原来的RAM空间,依然会清零后在使用。也就是以前的任务记录都没了。你是什么逻辑啊?可以说的清楚一定吗?
回复

使用道具 举报

27

主题

118

帖子

0

精华

高级会员

Rank: 4

积分
845
金钱
845
注册时间
2015-12-8
在线时间
175 小时
 楼主| 发表于 2018-3-30 16:33:54 | 显示全部楼层
jinfeihan57 发表于 2018-3-30 16:05
系统不推荐删除任务。再次创建任务,任务会从头开始,因为创建任务的时候有一步是,初始化堆栈,即便再次创 ...

我做的是一个TCP客户端的项目。在这个逻辑中我建立 了三个任务。
    任务1中,客户端连接服务器,连接上后在任务1中创建任务2(客户端接收线程)、任务3(TCP发送线程),创建完之后就阻塞等待标志一个与服务器连接断开的信号量(在任务2和任务3中POST)。
   任务2中处理从服务器接收的数据,判断与服务器的连接是否还在,如果断开就向任务1发送标志服务器断开的信号量。
   任务3中发送数据到服务器,判断与服务器连接是否还在,如果断开就向任务1发送标志服务器断开的信号量。
   任务1接收到任务2或者任务3(任意一个任务)发过来的标志与服务器断开连接的信号量后,删除任务2和任务3,然后就重新建立连接,重新创建任务2和任务3(回到上面任务1的步骤)。
为自己掌握新的知识感到快乐
回复

使用道具 举报

31

主题

265

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
413
金钱
413
注册时间
2018-1-9
在线时间
65 小时
发表于 2018-3-31 20:44:17 | 显示全部楼层
Jundodo 发表于 2018-3-30 16:33
我做的是一个TCP客户端的项目。在这个逻辑中我建立 了三个任务。
    任务1中,客户端连接服务器,连接 ...

三个任务的优先级怎么设的,加入2post了,但是由于1的优先级太低,在没有执行1,而是执行2或3 ,然后3也POST了,最终执行到了1,但是1只PEND了一次。还有一次没有pend所以,程序出现了逻辑上的bug。至于你的程序跑飞,也有可能不是这部分的问题。
回复

使用道具 举报

27

主题

118

帖子

0

精华

高级会员

Rank: 4

积分
845
金钱
845
注册时间
2015-12-8
在线时间
175 小时
 楼主| 发表于 2018-4-2 15:25:24 | 显示全部楼层
jinfeihan57 发表于 2018-3-31 20:44
三个任务的优先级怎么设的,加入2post了,但是由于1的优先级太低,在没有执行1,而是执行2或3 ,然后3也P ...

优先级从高到低为任务1、任务2、任务3.所以应该不会出现你说的逻辑问题
为自己掌握新的知识感到快乐
回复

使用道具 举报

31

主题

265

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
413
金钱
413
注册时间
2018-1-9
在线时间
65 小时
发表于 2018-4-2 15:39:59 | 显示全部楼层
Jundodo 发表于 2018-4-2 15:25
优先级从高到低为任务1、任务2、任务3.所以应该不会出现你说的逻辑问题

确实,你这个优先级顺序不会出现我说的错误。你要看看其他地方有没有逻辑错误了。
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2014-12-17
在线时间
7 小时
发表于 2018-9-15 17:33:51 | 显示全部楼层
jinfeihan57 发表于 2018-3-31 20:44
三个任务的优先级怎么设的,加入2post了,但是由于1的优先级太低,在没有执行1,而是执行2或3 ,然后3也P ...

像这种有2个以上post怎么处理啊?
我是先将信号量设置为0: OSSemSet(sem, 0, &oserr),然后再POST,感觉很挫。。。

回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-2 08:22

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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