سیستم عامل بلادرنگ RTOS بخش چهارم (semaphore Counting)

300,000 ریال

برای کنترل دسترسی به منبع می توان از پرچم زنی شمارشی (Counting semaphore) استفاده کرد. برای به دست آوردن کنترل یک منبع ، یک تسک ابتدا باید یک سمافور را بدست آورد. بنابراین مقدار پرچم زنی شمارشی کاهش می یابد. وقتی مقدار شمارش به صفر برسد ، هیچ منبع آزاد وجود ندارد. هنگامی که یک تسک با منبع تمام می شود ، پرچم زنی را به عقب بر می گرداند و در نتیجه مقدار شمارش سمافور را افزایش می دهد.

توضیحات

در این آموزش قصد داریم از سمافور باینری( semaphore Counting) در STM32 استفاده کنیم.

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

سمافور یا پرچم زنی اساساً برای همگام سازی تسک ها با سایر وقایع موجود در یک سیستم استفاده می شوند. در FreeRTOS ، سمافورها بر اساس مکانیسم صف انجام می شوند. در FreeRTOS  ۴ نوع سمفور وجود دارد:

  • سمافور (پرچم زنی) دودویی

  • سمافور شمارشی ( Counting semaphores)

  • ممانعت دو جانبه یا دو طرفه (Mutex)

  • بازگشتی (Recursive)


سمافور چیست؟

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

به عنوان مثال گرفتن یک پرچم توسط یک فعالیت است. فعالیت متوقف است تا زمانی که پرچم زده شود و یا مدت زمان انتظار به سر برسد.

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

برای کنترل دسترسی به منبع می توان از پرچم زنی شمارشی (Counting semaphore) استفاده کرد. برای به دست آوردن کنترل یک منبع ، یک تسک ابتدا باید یک سمافور را بدست آورد. بنابراین مقدار پرچم زنی شمارشی کاهش می یابد. وقتی مقدار شمارش به صفر برسد ، هیچ منبع آزاد وجود ندارد. هنگامی که یک تسک با منبع تمام می شود ، پرچم زنی را به عقب بر می گرداند و در نتیجه مقدار شمارش سمافور را افزایش می دهد.

این روش پرچم زنی به این صورت عمل می کند که دفعات فعال شده آنرا می شمارد(به تعداد محدود).

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


مدت ویدئو: ۲۶ دقیقه

نوع آموزش: فارسی

کد سورس: دارد

شماتیک مدار: ندارد

کامپایلر: STM32 CUBE IDE

کتابخانه: HAL Library


توجه: برای پخش ویدئو نرم افزار های KMPlayer و K-Lite Codec Pack در سیستم شما نصب باشد.