搜索
bottom↓
回复: 7

请问UCOSII 调用OSTaskSuspend()挂起与接受消息/信号量的问题

[复制链接]

出0入0汤圆

发表于 2009-6-26 17:05:32 | 显示全部楼层 |阅读模式
最近在学习UCOSII,在看到书上说的一个地方不明白,就是某任务在等待消息时,需要用OSQPend,OSSemPend之类的函数,这几个函数的作用是挂起当前任务,直到取得消息或者信号量,或者等待超时。然后书上又有讲一个被OSTaskSuspend()函数挂起的任务也可以接受消息/信号量,该任务将一直保持挂起状态,直到通过调用OSTaskResume()函数恢复任务的运行 。
    最后一句话就不知道该怎么理解了,在OSTaskSuspend()函数里没看到调用OSQPend(),OSSemPend()等函数的句子,那么如果任务在调用OSTaskSuspend()挂起后,是如何接受消息的呢?
    新手起步,希望各位大侠指点指点!

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

 楼主| 发表于 2009-6-28 18:38:10 | 显示全部楼层
自己顶起,没人帮忙吗,还是我说的不够明白/?

出0入0汤圆

发表于 2009-6-30 16:34:34 | 显示全部楼层
OSTaskSuspend()和OSQPend,OSSemPend不是一回事。



OSTaskSuspend()挂起任务以后,如果没有OSTaskResume()任务就一直挂起了,永远不会进入就绪表。

而所有的Pend一般都有超时的指标,就算没有post操作,如果时间到了,也会使任务进入就绪表。(当然也可以无限期等待)

关于suspend的一个很通用的方法是先建立一个任务Task0,在该任务(Task0)建立所有实际需要的任务,最后Suspend task0,这样

Task0就再也不会执行了。

而在task0中建立的任务开始按照优先级轮流执行。

出0入0汤圆

发表于 2009-6-30 16:36:33 | 显示全部楼层
而且所有pend 和supsend在任务控制模块中操作的变量也不一样。

出0入0汤圆

 楼主| 发表于 2009-7-5 13:42:44 | 显示全部楼层
感谢AAA1982!,说的很清楚,但是我的问题好像还没解决,“一个被OSTaskSuspend()函数挂起的任务也可以接受消息/信号量”?(这句话是完整摘自一本UCOS2教程书上面的)
按我自己的理解是,一个任务要接受消息/信号量,它首先要用 PEND挂起,如果挂起之后,这个任务就要在等待时间到或者其他任务POST这个消息之后才能继续运行。问题是如果一个任务由SUSPEND挂起后,它如何接受消息?

出0入0汤圆

发表于 2009-7-6 23:01:24 | 显示全部楼层
4楼,你说了这么半天你自己就不会看一下源代码吗?
task.c & core.c就这两个文件

出0入0汤圆

发表于 2009-7-16 09:23:34 | 显示全部楼层
joyko 你好:



你是不是这个意思

如果任务先执行OSSemPend那么在接受到信号量以前不可能执行OSTaskSuspend()?

如果先执行了OSTaskSuspend(),那么该任务肯定没有在等待信号量,也就是说肯定不会在信号量等待列表里面。

我认为这么解释比较合适


我记忆中好像OSTaskSuspend()是以优先级作为参数的(好象是),所以就可以这样,一个任务(TaskA)先OSSemPend开始等待信号量,

然后被另外一个任务OSTaskSuspend()了,但是TaskA的优先级比较高,所以下回释放信号量的时候(OSSempost),在等待信号量列表中

会先找到TaskA,虽然他已经SUSPend了,但是还是会接受到一个信号量(也就是把TASKA的任务控制模块中一个变量清零),但是由于

TaskA的任务控制模块中的suspend位还是1,所以TaskA虽然接受了信号量但是不会被放到任务就绪列表中去。

出0入0汤圆

 楼主| 发表于 2009-7-16 23:58:04 | 显示全部楼层
to: aaa1982

之前疑问确实如你说的那样的,这段时间在自学ARM,然后一边看OS,打算对手上的开发板了解个大概后再上OS,书上看来的没应用真的

了解的不够啊。你这么一说我就明白了,呵呵!  看书上的例子一般都是给自己挂起,也就一时忘记了OSTaskSuspend()是以优先级作为

参数,让大家见笑了^_^
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-20 11:28

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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