ucos ii中,多个任务等待不同的事件怎么办?

Bingodsp 2019-04-11 04:07:10
我有a、b两个任务。两个任务分别需要等待消息A、B才允许执行。那我需要建立两个事件控制块和两个消息队列吗?

程序我是这样写的:
首先创建两个消息队列:
AppTaskObjSemA = OSQCreate(&MyArrayOfMsgA[0],1); //创建消息队列
AppTaskObjSemB = OSQCreate(&MyArrayOfMsgA[0],1); //创建消息队列

然后在两个任务函数中分别等待消息:
OSQPend(AppTaskObjSemA, 0, &os_err); //要等待的事件:AppTaskObjSemA
OSQPend(AppTaskObjSemB, 0, &os_err); //要等待的事件:AppTaskObjSemB

然后,在不同中断中分别发送消息:
OSQPost(AppTaskObjSemA,MyArrayOfMsgA); //发送消息A
OSQPost(AppTaskObjSemB,MyArrayOfMsgB); //发送消息B

这样写了以后,为什么任务a可以执行,但任务b一直没有执行呢?
...全文
336 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Bingodsp 2019-04-23
  • 打赏
  • 举报
回复
问题解决了,按我前面的代码就可以实现了,之前是其他地方出了问题。
另外做一个简单的总结:ucos ii,一个事件控制块管理一个事件(即一类邮箱或消息队列),事件控制块中的OSEventPtr指向等待的这一消息队列(或邮箱)。而事件控制块中的OSEventTbl[]和OSEventGrp用来表示有哪些任务在等待这一消息。
一个系统里,当然可能有多个不同类型的事件,也就需要多个事件控制块。系统可以有多少个事件控制块由宏定义OS_MAX_EVENTS设定。
黄景辉2015 2019-04-16
  • 打赏
  • 举报
回复
引用 3 楼 Bingodsp 的回复:
[quote=引用 2 楼 黄景辉2015 的回复:] 任务优先级问题。
什么意思呢?如果多个任务等待同一事件,那优先级高的任务先执行;如果各个任务等待的事件不同,也有优先级的区分?[/quote] 根据你提交的代码,给出的解释, 任务优先级高的会有限处理。 对于等待不同的事件,无优先级问题。
Bingodsp 2019-04-15
  • 打赏
  • 举报
回复
引用 4 楼 qq_42370291 的回复:
[quote=引用 1 楼 吴南冰的回复:]我的疑问是:ucos ii里多个任务等待不同的事件,就需要建立多个消息队列吗?对它的机制不是很明白

只是等待时间发生的话用事件标志组不就行了吗[/quote]

之前没用过事件标志组。我了解下,有结论后回复
MRKING. 2019-04-11
  • 打赏
  • 举报
回复
引用 1 楼 吴南冰的回复:
我的疑问是:ucos ii里多个任务等待不同的事件,就需要建立多个消息队列吗?对它的机制不是很明白
只是等待时间发生的话用事件标志组不就行了吗
Bingodsp 2019-04-11
  • 打赏
  • 举报
回复
引用 2 楼 黄景辉2015 的回复:
任务优先级问题。

什么意思呢?如果多个任务等待同一事件,那优先级高的任务先执行;如果各个任务等待的事件不同,也有优先级的区分?
黄景辉2015 2019-04-11
  • 打赏
  • 举报
回复
任务优先级问题。
Bingodsp 2019-04-11
  • 打赏
  • 举报
回复
我的疑问是:ucos ii里多个任务等待不同的事件,就需要建立多个消息队列吗?对它的机制不是很明白

21,595

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
  • 驱动开发/核心开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧