RTX内核互斥量的问题

失途老马 失途老马 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
各位朋友,

一直使用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状态。

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



...全文

相关推荐

RealView MDK RTX操作系统中文资料

- **信号量**:用于解决多任务环境下共享资源的访问冲突问题,确保只有一个任务可以访问特定资源。- **互斥量**:类似于信号量,用于保护临界区,保证在同一时刻只有一个任务能够访问临界资源。

非著名码农

互斥量Mutex [转]

Windows:         总结下互斥量Mutex: 1.互斥量是内核对象,它与关键段都有“线程所有权”所以不能用于线程的同步。 2.互斥量能够用于多个进程之间线程互斥问题,并且能完美的解决某进程意外终止所造成的“遗弃”问题。   第一个程序创建互斥量并等待用户输入后就触发互斥量。第二个程序先打开互斥量,成功后就等待并根据等待结果作相应的输出。详见代码: 第一个程序: #in...

tony2278

V5-407_RTX实验_任务锁.7z

互斥量是任务锁的一种常见实现,它允许只有一个任务拥有资源;当一个任务在使用资源时,其他试图访问该资源的任务会被阻塞,直到互斥量被释放。

应用市场

Keil Rtx51 Tiny 多任务操作系统源代码.rar

**信号量与互斥量**:用于任务间的同步和资源保护。信号量用于控制多个任务对共享资源的访问,互斥量则确保同一时间只有一个任务能访问特定资源。5.

练习-人生

RTX51实时操作系统 嵌入式

**信号量和互斥量**:为了实现任务间的同步和资源保护,RTX51提供了信号量和互斥量机制。信号量用于控制共享资源的数量,互斥量则用于确保资源在同一时刻只能被一个任务使用。3.

LOVE321LOVE
评论
收藏 已收藏
分享
返回顶部
失途老马
单片机/工控 27,522 成员 28,796 内容