سبد خرید 0

هیچ محصولی در سبد خرید نیست.

سبد خرید 0

هیچ محصولی در سبد خرید نیست.

آموزش FreeRTOS نحوه استفاده از میوتکس Mutex

آموزش FreeRTOS نحوه استفاده از میوتکس Mutex-کافه میکرو

آموزش FreeRTOS نحوه استفاده از میوتکس Mutex

سلام خدمت همه همراهان همیشگی و علاقه مندان به سایت کافه میکرو امروز در خدمت شما هستیم با یک آموزش بسیار مفید دیگر، ما در این مقاله قصد داریم آموزش FreeRTOS نحوه استفاده از میوتکس Mutex را باهم دیگر پیش ببریم و کار کنیم پس همراه کافه میکرو باشید….

میوتکس Mutex ها یکی از کارامدترین ابزارهای سیستم عامل ها برای کار با منابع اشتراکی هستند. زمانی که تسک های مختلف از منابع مشترکی استفاده می کنند، خطر تداخل استفاده همواره وجود دارد. برای جلوگیری از این مشکل ابزارها و روش های مختلفی وجود دارد. یکی از کارآمدترین ابزارها استفاده از میوتکس Mutex است که در این مطلب با نحوه ی استفاده از آن با سبک FreeRTOS آشنا می شویم.

تعریف Handler برای Mutex

برای استفاده و دسترسی به میوتکس ها نیاز است که یک هندلر در اولین گام تعریف کنیم. به این صورت در هر لحظه می توانیم به میوتکس مدنظر در سیستم دسترسی داشته باشیم.

درکد زیر myMutexHandle به عنوان یک Handler برای میوتکس تعریف شده است.

تعریف هندلر به سبک FreeRTOS

xSemaphoreHandle myMutexHandle;

تعریف هندلر به سبک CMSIS-RTOS

osMutexId myMutexHandle;

ایجاد میوتکس Mutex
قبل از استفاده از میوتکس، نیاز است که آن را ایجاد کنیم و به هندلری که در گام قبل تعریف کردیم متصل کنیم. در کد زیر نحوه ی ایجاد میوتکس قابل مشاهده است.

ایجاد میوتکس به سبک FreeRTOS

myMutexHandle = xSemaphoreCreateMutex();

ایجاد میوتکس به سبک CMSIS-RTOS

osMutexDef(mutex1);
myMutexHandle = osMutexCreate(osMutex(mutex1));

نحوه استفاده از میوتکس Mutex

از آنجایی که منبع اشتراکی، همانطور که از اسمش پیداست، در اشتراک با چند تسک است و تسک های مختلف می خواهند از آن منبع استفاده کنند، نیاز به رعایت یکسری قانون بین تسک هاست. قانون کلی به این صورت است …

هر تسک که قصد دارد از منبع اشتراکی استفاده کند، تنها در صورتی که منبع در حال استفاده توسط تسک دیگری نباشد، می تواند به منبع اشتراکی دسترسی یابد.
همینطور هر تسک که از منبع اشتراکی استفاده می کند باید توسط میوتکس آن را قفل کند تا تسک های دیگر امکان استفاده همزمان پیدا نکنند.
هر تسک پس از استفاده از منبع اشتراکی، باید توسط میوتکس آن را آزاد کند و در اختیار سیستم قرار دهد تا مابقیه تسک ها نیز بتوانند از منبع اشتراکی استفاده کنند.

منبع اشتراکی چیست؟

منبع اشتراکی می تواند یک متغییر Global باشد که در دید همگان است. می تواند یکی از پریفرال ها مثل واحد سریال USART و یا SPI ، I2C و … باشد. هر منبعی که بخواهد به صورت مشترک حداقل بین دو تسک مورد استفاده قرار گیرد.

در اختیار گرفتن منبع اشتراکی

هر تسک قبل از دسترسی به منبع اشتراکی موظف است ابتدا میوتکس آن را بررسی کند و در صورت در دسترس بودن میوتکس آن را از سیستم بگیرد و منبع را قفل کند. در صورتی که میوتکس در لحظه در دسترس تسک در حال اجرا نباشد، امکان لحاظ کردن تایم اوت برای آزاد شدن میوتکس وجود دارد. تا زمان منقضی شدن تایم اوت، تسک به حالت بلاک در می آید و زمانی از پردازنده نمی گیرد. کد زیر این کار را انجام می دهد. و قبل از استفاده از منبع اشتراکی قرار می گیرد.

در روش FreeRTOS

xSemaphoreTake(myMutexHandle, portMAX_DELAY);

در روش CMSIS-RTOS

osMutexWait(myMutexHandle, osWaitForever);

آزاد کردن منبع اشتراکی

تسکی که در حال استفاده از منبع اشتراکی است، بعد از پایان استفاده از منبع اشتراکی باید میوتکس قفل شده را به سیستم بازگرداند و اصطلاحا میوتکس را آزاد کند. کد زیر کار آزاد سازی میوتکس منبع اشتراکی را انجام می دهد. این دستور باید بعد از منبع اشتراکی قرار گیرد.

در روش FreeRTOS

xSemaphoreGive(myMutexHandle);

در روش CMSIS-RTOS

osMutexRelease(myMutexHandle);

فرم استفاده از میوتکس

مراحل گفته شده در بالا، به شکل کلی زیر پیاده سازی می شود. در هر تسک قبل و بعد از منبع اشتراکی باید میوتکس گرفته و آزاد شود، مشابه کد زیر.

در روش FreeRTOS

xSemaphoreTake(myMutexHandle, portMAX_DELAY);
// منبع اشتراکی (Shared Resource)
xSemaphoreGive(myMutexHandle);

در روش CMSIS-RTOS

osMutexWait(myMutexHandle, osWaitForever);
// منبع اشتراکی (Shared Resource)
osMutexRelease(myMutexHandle);

از اینکه همراه کافه میکرو بودید و تا پایان آموزش FreeRTOS نحوه استفاده از میوتکس Mutex همراه ما بودید به شما تبریک میگیم.

از بخش های دیگر کافه میکرو در فروشگاه و وبلاگ هم می توانید دیدن فرمایید.

منتظر مقالات و آموزش های دیگر کافه میکرو باشید.

دیدگاه شما
محصول با موفقیت به سبد خرید اضافه شد.