RTOS Problema Mutex_Semaphore (RTX OS)

L

LOSTISLAND

Guest
Oi tudo, eu pensei que as únicas diferenças entre um mutex e um semáforo são a contagem (Capability Semaphore) e inversão de prioridade (Capability Mutex). Hoje, eu encontrei algo estranho, que talvez está relacionada com a capacidade de inversão de prioridade ou outra coisa. Obtendo e liberando Mutex ou semáforos entre diferentes tarefas é clara, mas quando eu usá-los em apenas uma tarefa, o seu comportamento é diferente. Usando semáforo a tarefa está bloqueada, mas usando Mutex a tarefa não está bloqueado. Imagine que há apenas uma tarefa chamada APP_TestTask
Code:
 __task vazio APP_TestTask (void) {for (;) {os_dly_wait (20); os_sem_wait (Sem_Test, 0xffff); os_sem_send (Sem_Test); os_sem_wait (Sem_Test, 0xffff); os_sem_wait ( Sem_Test, 0xffff); Test_Function ();}}
[Código] _Task vazio APP_TestTask (void) {for (;) {os_dly_wait (20); os_mut_wait (Mut_Test, 0xffff); os_mut_release (Mut_Test); os_mut_wait ( Mut_Test, 0xffff); os_mut_wait (Mut_Test, 0xffff); Test_Function ();}} [/code] É algo natural ou um bug? Graças, em avançado
 
Eu acredito que o problema está com as definições inerentes de um semáforo e um mutex. Se você estiver usando uma tarefa, então, podemos supor que, além da tarefa ocioso do sistema, que o seu "APP_TestTask" é a maior prioridade. Uma vez que um mutex incorpora inversão de prioridade, e você também só tem uma tarefa, o mutex será sempre caem para o "APP_TestTask". Um semáforo, no entanto, está causando problemas, pois você está tentando tanto dar e tirar o semáforo de dentro de uma tarefa, essencialmente, você está fazendo com que a tarefa de stall. Eu nunca usei um semáforo quando tenho apenas uma tarefa. Existe uma razão específica para a qual você está fazendo isso? Atenciosamente, Willis
 

Welcome to EDABoard.com

Sponsor

Back
Top