آموزش سیستم عامل بلادرنگ FREERTOS (اولویت بندی تسک ها) در STM32

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

این آموزش برای اولین بار در وب سایت هایی فارسی به صورت عملی است و موارد زیر را شامل می شود:

۱- تنظیم FREERTOS با استفاده از CubeMX

۲- مزایای استفاده از RTOS

۳- ایجاد تسک ها با یا بدون  CubeMX

۴- استفاده از اولویت ها برای مرتب کردن برخی مشکلات رایج

 

مزیت استفاده از RTOS

بیایید وضعیتی را فرض کنیم ، جایی که می خواهم ۲ پین را هر کدام با تاخیر مربوطه تغییر (toggle ) دهیم. بنابراین اساساً ، ما می خواهیم که هر دو پین به طور همزمان toggle شوند. البته ، با برنامه نویسی ساده امکان پذیر نیست ، زیرا میکروکنترلر ۱ دستورالعمل اول و سپس دوم را اجرا می کند. و اول باید منتظر بماند که اجرای دوم اجرا شود ، حتی در یک حلقه while.

برای رفع این مشکل ، از RTOS استفاده خواهیم کرد. بنابراین ، ما ۲ وظیفه (task) ایجاد کرده ایم.

 

تولید یک تسک

برای ایجاد یک تسک جدید ، ما باید چند مرحله را دنبال کنیم ، و آنها به شرح زیر هستند:

 

۱٫) ThreadID را برای این تسک تعریف کنید. این متغیر شناسه منحصر به فرد (ID) را از تسک ایجاد شده است را ذخیره می کند. بعداً ، تمام عملیات به این شناسه (ID) احتیاج دارند.

osThreadId Task3Handle؛

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

 

رسیدگی به اولویت ها در RTOS FREE

تاکنون ، ما دیدیم که چگونه می توان با استفاده از RTOS چند تسکی (multitask ) را تنظیم کرد. اما مشکلات خاصی وجود دارد که به وجود می آید. به عنوان مثال ، فرض کنید که می خواهیم برخی از داده ها را از طریق هر سه تسک به طور همزمان از طریق UART ارسال کنیم.

وقتی برای این کار برنامه ای می نویسیم ، نتیجه دقیقاً یکسان نخواهد بود. در عوض ، انتقال به شکلی صورت می گیرد که فقط یک تسک داده ها را در ۱ ثانیه ارسال می کند ، تا یک تسک دیگر برای ثانیه دیگر و غیره.

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

برای جلوگیری از این شرایط ، ما برای کارهای مختلف از اولویت های (تسک های) مختلف استفاده می کنیم. این بدان معناست که ما باید در اولویت ها تسک خود را دوباره تعریف کنیم.


دانلود پروژه