ARM, STM32, آموزش, آموزش میکروکنترلر STM32F4, مقاله های سیسوگ, میکروکنترلر

آموزش میکروکنترلر STM32F4 قسمت یازدهم : سمافور و موتکس

آموزش میکروکنترلر STM32F4 سمافور و موتکس

در قسمت دهم آموزش میکروکنترلر STM32F4 به سیستم عامل زمان واقعی (RTOS) و مبحث Thread پرداختیم. در این قسمت از آموزش میکروکنترلر STM32F4 به ادامه RTOS  و مباحث سمافور و موتکس می‌پردازیم. با سیسوگ همراه باشید.

 

سمافور

یکی از ساده ترین مفاهیم سیستم عامل سمافور (Semaphore) است. ممکن است شما منابعی داشته باشید که چند قسمت از سیستم شما تمایل به استفاده از آنها در یک زمان را داشته باشند. برای مثال، ممکن است چند بخش از برنامه شما بخواهند داده‌ای را از رم بخوانند یا در آن بنویسند. یک راه این است که محدودیتی نداشته باشید و به همه اجازه بدهید که هر بار می‌خواهند از رم استفاده کنند. ولی اگر برنامه شما دارای تابع‌های زیادی باشد و تعداد دسترسی‌ها به رم بیش از اندازه شود به احتمال زیاد باس داده و آدرس که به رم متصل هستند نمی‌توانند به همه این درخواست‌ها برسند. در اینجا می‌توانید برای حل مشکل و جلوگیری از قفل شدن سیستم یا کند شدن آن، محدودیتی روی تعداد درخواست‌هایی که رم می‌تواند بپذیرد قرار دهید. این مقدار در واقع توسط سمافور تعیین می‌شود.

 

سمافور semaphore

 

با یک سمافور دسترسی به یک گروه از وسایل جانبی مشابه، مدیریت می‌شود. تعداد منابع موجود، در پارامتر تابع osSemaphoreCreate  بیان می‌شود. هر بار با تابع osSemaphoreWait  یک token می‌گیرید و از شماره سمافور، یک عدد کم می‌شود. وقتی شماره سمافور، به صفر رسید، دیگر token نمی توان گرفت. برای آزاد کردن سمافور هم، از تابع osSemaphoreRelease استفاده می‌شود. این تابع شماره سمافور را یک عدد افزایش می‌دهد. در نهایت تابع osSemaphoreDelete نیز آن را پاک می‌کند.

تابع‌های تعریف شده

 

توابع semaphore

 

ماکروهای تعریف شده

 

ماکروهای semaphore

 

برنامه نمونه زیر طرز کار این سمافور را نشان می‌دهد. دو ریسمان در رقابت برای کسب token هستند. سمافور تک token است (تابع osSemaphoreCreate یک token برای سمافور ساخته است.) Thread اول هر سه میلی ثانیه بررسی می‌کند که آیا سمافور token دارد یا خیر. به مدت 1 میلی ثانیه نیز منتظر می‌ماند تا token را بگیرد. ولی Thread دوم که اولویت زیادی ندارد، همواره منتظر می‌ماند تا هر وقت که بلیتی در دسترس بود آن را بگیرد.

 

 

موتکس

موتکس (Mutex) برای هم آهنگی اجرای Thread ها به کار می رود. گاهی یک منبع، فقط باید هر بار، توسط یک Thread دستکاری شود. برای نمونه قسمتی از حافظه که به LCD نگاشته می‌شود. به نوعی، موتکس یک سمافور با تنها یک token است.

 

موتکس Mutex

تابع‌های تعریف شده

 

توابع mutex

 

ماکروهای تعریف شده

 

ماکروهای mutex

 

در برنامه نمونه زیر نحوه کار با موتکس نشان داده شده است.

 

 

در قسمت دوازدهم آموزش میکروکنترلر STM32F4 به ابزارهای ارتباطی بین Thread ها خواهیم پرداخت. با سیسوگ همراه باشید.

انتشار مطالب با ذکر نام و آدرس وب سایت سیسوگ، بلامانع است.

شما نیز میتوانید یکی از نویسندگان سیسوگ باشید.   همکاری با سیسوگ

1 دیدگاه در “آموزش میکروکنترلر STM32F4 قسمت یازدهم : سمافور و موتکس

  1. Avatar for علي رضا علي رضا گفت:

    سلام و عرض ادب
    ممنون از اين همه مهرباني ..
    مي خواستم بدونم چرا در تابع
    void WaitMutex (void)
    از osMutexCreate به جاي osMutexWait استفاده كرده است؟
    خيلي ممنون

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *