RTX内核互斥量的问题
各位朋友,
一直使用stm32+RTX内核进行开发,RTX版本为v4.2。最近一个项目两个通信任务使用了互斥量,如A任务正在通信,B任务触发后等待A任务完成后释放信号量后,再执行。B执行完成后,A任务再继续执行。
大概结构如:
A任务优先级高于B任务,A任务释放互斥量后,B任务可以获取。接着,B任务进入执行,释放信号量后,A任务却无法执行,一直处于OS_MUt状态。
请熟悉互斥量操作的大哥,帮助一下。
一直使用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...
V5-407_RTX实验_任务锁.7z
互斥量是任务锁的一种常见实现,它允许只有一个任务拥有资源;当一个任务在使用资源时,其他试图访问该资源的任务会被阻塞,直到互斥量被释放。
Keil Rtx51 Tiny 多任务操作系统源代码.rar
**信号量与互斥量**:用于任务间的同步和资源保护。信号量用于控制多个任务对共享资源的访问,互斥量则确保同一时间只有一个任务能访问特定资源。5.
RTX51实时操作系统 嵌入式
**信号量和互斥量**:为了实现任务间的同步和资源保护,RTX51提供了信号量和互斥量机制。信号量用于控制共享资源的数量,互斥量则用于确保资源在同一时刻只能被一个任务使用。3.


单片机/工控
