RTOS (RTX OS) Mutex_Semaphore Vấn đề

L

LOSTISLAND

Guest
Hi all, Tôi nghĩ rằng sự khác biệt duy nhất giữa một Mutex và một semaphore là count (Semaphore Capability) và đảo ngược ưu tiên (Mutex Capability). Hôm nay, tôi đã gặp phải một cái gì đó kỳ lạ mà có lẽ có liên quan đến khả năng đảo ngược ưu tiên hay cái gì khác. Nhận và phát hành Mutex hoặc Cột giữa các tác vụ khác nhau là rõ ràng nhưng khi tôi sử dụng chúng chỉ trong một công việc, hành vi của họ là khác nhau. Sử dụng semaphore nhiệm vụ đã bị khoá nhưng sử dụng Mutex nhiệm vụ không bị khóa. Hãy tưởng tượng chỉ có một nhiệm vụ được gọi là APP_TestTask
Code:
 __task trống 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 trống 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 ();}}
Có một cái gì đó tự nhiên hoặc một lỗi? Cảm ơn tiên tiến
 
Tôi tin rằng vấn đề nằm với các định nghĩa vốn có của một semaphore mutex. Nếu bạn đang sử dụng một trong những nhiệm vụ sau đó chúng ta có thể giả định rằng, bên cạnh các nhiệm vụ hệ thống nhàn rỗi, rằng bạn "APP_TestTask" là ưu tiên cao nhất. Kể từ khi một mutex kết hợp đảo ngược ưu tiên, và bạn cũng chỉ có một trong những nhiệm vụ, mutex sẽ luôn luôn rơi để "APP_TestTask". Một semaphore, tuy nhiên, gây ra những vấn đề kể từ khi bạn đang cố gắng để cả hai cho đi và semaphore từ bên trong một nhiệm vụ, về cơ bản, bạn đang gây ra các nhiệm vụ cho gian hàng. Tôi đã không bao giờ được sử dụng một semaphore khi tôi chỉ có một nhiệm vụ. Có một lý do cụ thể cho lý do tại sao bạn đang làm điều này? Kính trọng, Willis
 

Welcome to EDABoard.com

Sponsor

Back
Top