احتمالا با مفهوم سیستم عامل آشنا هستید . سیستم عامل یک نرم افزار اصلی در سیستم ها به شمار می رود. این نرم افزار با قرار گیری روی پردازنده اصلی، اجازه می دهد تا بسیاری از برنامه ها روی یک پردازنده اجرا شوند. در حقیقت به جای اینکه برای هر برنامه یک پردازنده نیاز داشته باشیم، چندین برنامه روی یک پردازنده اجرا گردد.
در دنیای میکروکنترلرها و امبدد سیستم ها، سیستم عامل های بی درنگ( RTOS ها) یک پاسخ قطعی برای پروژه های پیچیده ی امروزی و پروژه هایی که نیاز به انجام چند کار به صورت همزمان (مولتی تسکینگ Multi-Tasking) دارند هستند.
سیستم عامل FreeRTOS یک سیستم عامل رایگان متن باز است. بنابراین با کمی تغییر میتوان آن را بر روی کلیه پلتفرمها، اجرا کرد. اما این سیستم عامل به صورت پیش فرض روی میکروکنترلرهای ARM نصب است.علاوه بر بردهای STM32 مبتنی بر تراشه ARM، برد قدرتمند ESP32 هم سیستم عامل FreeRTOS را به صورت پیشفرض داراست. برد ESP32 در هسته آردوینو خود، سیستم عامل FreeRTOS را به صورت نصب شده دارد.
به طور پیشفرض شما می توانید از این قابلیت در محیط برنامه نویسی آردینو استفاده کنید که کار را بسیار راحت می کند و نیازی به فریمور یا بوت لودر خاصی ندارید.
چراغ چشمک زن
می خواهیم یک پروژه بسیار ساده را باهم بررسی کنیم که چراغ روی برد خود ESP32 را هر نیم ثانیه خاموش و روشن می کند. اما مانند مثال ساده ای که به عنوان اولین پروژه انجام داده اید نیست و قرار است که این کار را به سیستم عامل بسپاریم.
Code as Text
همان طور که مشاهده می کنید ما از هیچ کتابخانه ای استفاده می کنیم و توسط تابع ()xTaskCreatePinnedToCore یک تسک به نام TaskBlink ساخته ایم که خروجی و ورودی آن خالی می باشد.
به پارامتر اول این تابع توجه کنید (1024). این عدد میزان استک و رم مورد نیاز این تسک هستش که باید نسبت با کاری که شما انجام می دهید همخوانی داشته باشد . در این کد ساده که ما نیازی به مصرف زیادی رم نداریم این عدد مناسب است. اما به عنوان مثال اگر می خواهید یک فایل JSON را رمز گشایی کنید(پست مربوط به این مطلب) به طور حتمی نیاز بیشتری به رم در این تسک دارید…حال تصور کنید که تعداد زیادی تسک داشته باشیم و سیستم عامل نتواند تامین انرژی کند. چه اتفاقی می افتد؟؟
یکی دیگر از پارامتر هایی که باید به آن دقت کنید پارامتر چهارم می باشد که برای سیستم عامل میزان اهمیت تسک را مشخص می کنیم که 0 کمترین می باشد و 3 بیشترین می باشد.پس سیستم عامل در مواقع ضروری اگر خوش شانس باشیم و کرش نکنیم ابتدا تسک های با اهمیت بالاتر را اجرا می کند.
در آخر باید بگم که در این روش ما برای هر تسک یک حلقه LOOP & SETUP جدید داریم که برای شما در مثال خودمان علامت زدم. در این روش مدیریت شلوغی کد را به سیستم عامل بسپارید اما حتما به مصرف و بهینه کردن کد خود باید بسیار توجه کنید و یا با کرش های غیر منتظره مواجه خواهید شد.
منابع