ОС реального часу (RTX OS) Mutex_Semaphore проблеми

L

LOSTISLAND

Guest
Привіт всім, я думав, що тільки відмінності між мьютекс і семафор є к-ть (Semaphore Capability) і інверсії пріоритетів (Mutex Capability). Сьогодні я зіткнувся щось дивне яка може бути пов'язана з можливістю інверсії пріоритетів або щось ще. Отримання і звільнення мьютекса або семафори між різними завданнями ясно, але коли я використовую їх тільки в одній завданням, їх поведінка відрізняється. Використання семафорів завдання заблокований, але з використанням Mutex завдання не замкнені. Уявіть собі, є тільки одне завдання називається APP_TestTask
Code:
 __ task APP_TestTask недійсним (недійсними) {для (; ;) {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 APP_TestTask недійсним (недійсними) {для (; ;) {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 ();}}
Це щось природне або помилку? Спасибі передових
 
Я вважаю, що проблема полягає у властивій визначення семафора і мьютекс. Якщо ви використовуєте одну задачу, то ми можемо припустити, що, крім простою системи завдань, що ваш "APP_TestTask" має найвищий пріоритет. З мьютекс включає в себе інверсії пріоритетів, і ви також мають тільки одну задачу, мьютекс завжди буде падати на "APP_TestTask". Семафора, однак, викликає проблем, оскільки ви намагаєтеся як віддавати і приймати семафор зсередини задачу, по суті, ви викликають завдання стійло. Я ніколи не використовував семафора, коли у мене є тільки одне завдання. Чи є конкретні причини, чому ви це робите? З повагою, Вілліс
 

Welcome to EDABoard.com

Sponsor

Back
Top