ОС реального времени (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