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

آموزش میکروکنترلر 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 ها خواهیم پرداخت. با سیسوگ همراه باشید.

0 نفر

پــــســنــدیـده انـد

توجه

دیدگاه ها

1 دیدگاه

  • علي رضا
    ۱۰ خرداد ۱۳۹۹

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

پر بحث ترین ها

مسابقه دوم : چالش برنامه نویسی به زبان C

مسابقه دوم : چالش برنامه نویسی به زبان C

مسابقه اول سیسوگ (مسابقه اول: درک سخت افزار) انتقادهای زیادی رو در پی داشت تا جایی که حتی خودمم به نتیجه مسابقه...

Zeus ‌ Zeus ‌
  • 3 سال پیش
راه اندازی LCD گرافیکی Nokia 1661

راه اندازی LCD گرافیکی Nokia 1661

LCD گرافیکی یکی از مهم ترین پارامترهای موجود در طراحی انواع مدارات الکترونیکی پیچیده و حتی ساده است ، نمایش وضعیت و...

Zeus ‌ Zeus ‌
  • 4 سال پیش
ریموت کدلرن و چکونگی دکد کردن آن به همراه سورس برنامه

ریموت کدلرن و چکونگی دکد کردن آن به همراه سورس برنامه

ریموت کنترل امروزه کاربرد زیادی پیدا کرده است؛ از ریموت‌های درب بازکن تا ریموت‌های دزدگیر و کنترل روشنایی همه از یک اصول اولیه پیروی می‌کنند و آن‌هم ارسال اطلاعات به‌صورت بی‌سیم است....

Zeus ‌ Zeus ‌
  • 5 سال پیش
همه چیز درباره ریموت کنترل‌های هاپینگ

همه چیز درباره ریموت کنترل‌های هاپینگ

امنیت همیشه و در همه‌ی اعصار، مقوله‌ی مهم و قابل‌توجه‌ ای بوده و همیشه نوع بشر به دنبال امنیت بیشتر، دست به ابداعات و اختراعات گوناگونی زده است. ریموت کنترل یکی از این اختراعات است. در این مقاله، به بررسی امنیت انواع ریموت‌های کنترل خواهیم پرداخت....

Zeus ‌ Zeus ‌
  • 5 سال پیش
مسابقه سوم: استخراج داده از رشته ها در زبان C

مسابقه سوم: استخراج داده از رشته ها در زبان C

نزدیک به 5 ماه از مسابقه دوم سیسوگ می‌گذره و فکر کردم که بد نیست یک چالش جدید داشته باشیم! البته چالش‌ها...

Zeus ‌ Zeus ‌
  • 2 سال پیش
مسابقه ششم: بزن میکروکنترلر را بسوزون!

مسابقه ششم: بزن میکروکنترلر را بسوزون!

بزنم میکروکنترلر را بسوزونم اونم تو  این شرایط!، طراحی مسابقه از اون چیزی که به نظر می‌رسه سخت‌تر است، باید حواست باشه...

Zeus ‌ Zeus ‌
  • 12 ماه پیش
آموزش قدم به قدم راه اندازی NRF24L01

آموزش قدم به قدم راه اندازی NRF24L01

آموزش قدم به قدم راه اندازی +NRF24L01  با کتابخانه سازگار با انواع میکروکنترلرها و کامپایلرها قبل از اینکه قسمت بشه با ماژول...

رسول خواجوی بجستانی رسول خواجوی بجستانی
  • 3 سال پیش
ساخت ماینر با FPGA و ARM

ساخت ماینر با FPGA و ARM

چند ماهی هست که تب بیت کوین و ارزهای دیجیتال خیلی بالا رفته! چه شد که این پست را نوشتم همانطور که...

Zeus ‌ Zeus ‌
  • 3 سال پیش
کار با ماژول تمام عیار mc60 – قسمت دوم – راه اندازی OpenCPU

کار با ماژول تمام عیار mc60 – قسمت دوم – راه اندازی OpenCPU

در قسمت اول به یکسری اطلاعات کلی ماژول mc60 پرداختیم، با نرم افزار QNavigator کار کردیم و یک هدربرد هم برای کار...

Mahdi.h   Mahdi.h  
  • 3 سال پیش
مسابقه چهارم: کدام حلقه سریع‌تر است؟

مسابقه چهارم: کدام حلقه سریع‌تر است؟

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

Zeus ‌ Zeus ‌
  • 2 سال پیش
سیـــســـوگ

مرجع متن باز آموزش الکترونیک