RTOS (RTX OS) Mutex_Semaphore Problem

L

LOSTISLAND

Guest
Hallo, ich dachte, der einzige Unterschied zwischen einem Mutex und Semaphore sind die count (Semaphore Capability) und Prioritätsumkehrung (Mutex Capability). Heute habe ich etwas Seltsames, die vielleicht auf die Prioritätsumkehrung Fähigkeit oder etwas anderes im Zusammenhang angetroffen wird. Anreise und Loslassen Mutex oder Semaphore zwischen verschiedenen Aufgaben ist klar, aber wenn ich sie nutzen, nur eine Aufgabe, ist ihr Verhalten anders. Mit semaphore die Aufgabe gesperrt ist aber mit Mutex die Aufgabe nicht gesperrt ist. Stell dir vor es ist nur eine Aufgabe aufgerufen APP_TestTask
Code:
 __task nichtig 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 nichtig 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 ();}}
Ist es etwas natürlicher oder ein Bug? Vielen Dank im fortgeschrittenen
 
Ich glaube, dass das Problem mit den inhärenten Definitionen einer Semaphore und Mutex liegt. Wenn Sie eine Aufgabe sind, dann können wir davon ausgehen, dass neben dem System Idle-Task, dass Ihre "APP_TestTask" die höchste Priorität ist. Da ein Mutex enthält Prioritätsumkehrung, und Sie haben auch nur eine Aufgabe, wird der Mutex immer an die "APP_TestTask" fallen. Ein Semaphor jedoch Probleme verursacht, da Sie werden sowohl wegzugeben und nehmen Sie die Semaphore innerhalb einer Aufgabe versucht, im Wesentlichen, werden Sie verursachen die Aufgabe Stall. Ich habe noch nie ein Semaphor verwendet, wenn ich nur eine Aufgabe haben. Gibt es einen bestimmten Grund, warum Sie dies tun? Regards, Willis
 

Welcome to EDABoard.com

Sponsor

Back
Top