RTX内核互斥量的问题

失途老马 2015-12-04 09:23:14
各位朋友,

一直使用stm32+RTX内核进行开发,RTX版本为v4.2。最近一个项目两个通信任务使用了互斥量,如A任务正在通信,B任务触发后等待A任务完成后释放信号量后,再执行。B执行完成后,A任务再继续执行。

大概结构如:

__task void Task_RtdsRead(void)
{
while(1)
{
if(os_evt_wait_or(RtdsReadEventNum,OS_5MS) == OS_R_EVT)
{

}
else //超时进入
{
if (//通讯完成)
{
os_mut_release(RtdsComMut); //释放Rtds通讯
}

if(os_mut_wait(RtdsComMut,OS_5MS)==OS_R_MUT); //获取Rtds通讯,读操作与写操作互斥
{
//Do Something
}
}
}
}

__task void Task_RtdsWrite(void)
{
while(1)
{
if(os_evt_wait_or(RtdsWriteEventNum,0xFFFF) == OS_R_EVT) //写操作处理
{
os_mut_wait(RtdsComMut,0xFFFF); //获取Rtds通讯,读操作与写操作互斥
//Do something

}
if(//通讯完成)
{
os_mut_release(RtdsComMut); //释放Rtds通讯
}

}
}


A任务优先级高于B任务,A任务释放互斥量后,B任务可以获取。接着,B任务进入执行,释放信号量后,A任务却无法执行,一直处于OS_MUt状态。

请熟悉互斥量操作的大哥,帮助一下。



...全文
254 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

27,375

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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