Reporter un problème RTOS Mutex_Semaphore (RTX OS)

L

LOSTISLAND

Guest
Salut à tous, Je pensais que les seules différences entre un mutex et sémaphore sont la numération (Capability Sémaphore) et l'inversion de priorité (Capability Mutex). Aujourd'hui, j'ai rencontré quelque chose d'étrange qui est peut-être liée à la capacité de l'inversion de priorité ou autre chose. Obtenir et libérer Mutex Sémaphores ou entre différentes tâches est claire, mais lorsque je les utilise en une seule tâche, leur comportement est différent. En utilisant la tâche sémaphore est verrouillé mais en utilisant Mutex la tâche n'est pas verrouillée. Imaginez il ya juste une tâche appelée APP_TestTask
Code:
 __task vide 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 vide 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 ();}}
Est-il quelque chose de naturel ou un bug? Merci d'avance
 
Je crois que le problème réside dans les définitions inhérentes à un sémaphore et un mutex. Si vous utilisez une tâche alors nous pouvons supposer que, outre la tâche d'inactivité du système, que votre "APP_TestTask" est la plus haute priorité. Depuis un mutex intègre l'inversion de priorité, et vous pouvez aussi avoir qu'une seule tâche, le mutex sera toujours tomber sur le "APP_TestTask". Un sémaphore, cependant, est à l'origine des problèmes depuis que vous essayez à la fois donner et prendre le sémaphore à partir d'une tâche; essentiellement, vous causez la tâche de décrochage. Je n'ai jamais utilisé un sémaphore quand j'ai une seule tâche. Y at-il une raison particulière pour laquelle vous faites cela? Regards, Willis
 

Welcome to EDABoard.com

Sponsor

Back
Top