RTOS (RTX OS) Mutex_Semaphore Problem

L

LOSTISLAND

Guest
Hei, tenkte jeg den eneste forskjellen mellom en Mutex og en semafor er greven (Semaphore Capability) og prioritet inversjon (Mutex Capability). I dag har jeg støtt på noe merkelig som kanskje er relatert til prioritet inversjon evne eller noe annet. Komme og slippe Mutex eller semaforer mellom ulike oppgaver er klart, men når jeg bruker dem i bare én oppgave, er deres oppførsel annerledes. Bruke semafor oppgaven er låst, men bruker Mutex oppgaven er ikke låst. Forestille deg det er bare en oppgave kalt APP_TestTask
Code:
 __task void 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 ();}}
Code:
 _task void 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 ();}}
Er det noe naturlig eller en bug? Takk på forhånd
 
Jeg tror at problemet ligger hos de iboende definisjoner av en semafor og en mutex. Hvis du bruker en oppgave så kan vi anta at, i tillegg til systemet inaktiv oppgave, at din "APP_TestTask" er høyeste prioritet. Siden en mutex inkorporerer prioritert inversjon, og du har også bare én oppgave, vil mutex alltid falle til "APP_TestTask". En semafor, men skaper problemer siden du prøver å både gi bort og ta semafor fra en oppgave, i hovedsak, er du forårsaker oppgave å stall. Jeg har aldri brukt en semafor når jeg har bare en oppgave. Er det en spesiell grunn for hvorfor du gjør dette? Hilsen, Willis
 

Welcome to EDABoard.com

Sponsor

Back
Top