RTOS (RTX OS) Mutex_Semaphore Masalah

L

LOSTISLAND

Guest
Hi semua, saya pikir satu-satunya perbedaan antara mutex dan semaphore adalah count (Kemampuan Semaphore) dan inversi prioritas (Mutex Kemampuan). Hari ini, saya temui sesuatu yang aneh yang mungkin berhubungan dengan kemampuan inversi prioritas atau sesuatu yang lain. Mendapatkan dan melepaskan mutex atau Semaphore antara tugas yang berbeda jelas tetapi ketika saya menggunakannya hanya dalam satu tugas, perilaku mereka berbeda. Menggunakan semaphore tugas terkunci tetapi menggunakan Mutex tugas tidak terkunci. Bayangkan hanya ada satu tugas yang disebut APP_TestTask [KODE] __task batal 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] [KODE] _task batal 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 ();}} [/CODE] Apakah itu sesuatu yang alami atau bug? Terima kasih dalam lanjutan
 
Saya percaya bahwa masalahnya terletak dengan definisi yang melekat dari semaphore dan mutex. Jika Anda menggunakan satu tugas maka kita bisa berasumsi bahwa, selain tugas sistem idle, bahwa Anda "APP_TestTask" adalah prioritas tertinggi. Karena mutex menggabungkan inversi prioritas, dan Anda juga hanya memiliki satu tugas, mutex akan selalu jatuh ke "APP_TestTask". Semaphore A, bagaimanapun, menyebabkan masalah karena Anda mencoba untuk kedua memberikan dan mengambil semaphore dari dalam tugas, pada dasarnya, Anda yang menyebabkan tugas untuk kios. Saya tidak pernah menggunakan semaphore ketika saya hanya memiliki satu tugas. Apakah ada alasan tertentu mengapa Anda melakukan ini? Salam, Willis
 

Welcome to EDABoard.com

Sponsor

Back
Top