آموزش freertos از صفر تا صد و نکات و اصول مبتدی
اگر در ویکی پدیا اولین خط در صفحه مربوط به FreeRTOS را مطالعه کنید، در می یابید که FreeRTOS یک سیستم عامل بلادرنگ برای سامانه های نهفته کوچک است.
این مطلب صحیح است – البته تا حدی . با این حال اگر شما مهندس نرم افزاری هستید که از دستگاه های محاسباتی پیشرفته تر (یعنی اصلاً هر دستگاه محاسباتی دیگر) به سراغ ریزپردازنده ها آمده باشید ممکن است فکر کنید که “سیستم عامل” نامیدن FreeRTOS تا حدی در تعریف آن اغراق به حساب می آید. FreeRTOS مشخصاً فقط از یک زمان بند رشته ای به علاوه یک پشته TCP/IP تشکیل شده است و در واقع، حافظه مجازی ندارد؛ همچنین سیستم های فایل و مدل امنیتی در آن وجود ندارد. شما کرنل (بخش مرکزی) FreeRTOS را دقیقاً درون اپلیکیشن خود کامپایل می کنید، که سپس روی MCU شما بارگذاری می شود.
البته باید گفت که خیلی هم ساده نیست.
اولین چیزی که باید درباره FreeRTOS بدانید، نام عجیب و غریب آن است: ویژگی “RTOS” نسبت به دیگر ویژگی ها جذابیت کمتری دارد. دیگر ویژگی های جالب را در ادامه آورده ایم:
مزایای FreeRTOS
اولین ویژگی ساده بودن آن است. در مورد FreetRTOS چیز خیلی پیچیده ای وجود ندارد. همان طور که پیش تر مطرح کردیم، FreeRTOS فقط یک بخش کوچک است که به جز یک زمان بندی کننده رشته ها (که در FreeTROS “وظیفه” نامیده می شوند) و یک پشته TCP/IP چیزی در آن وجود ندارد.
کرنل تنها سه فایل را در بر میگیرد و همه چیز مانند یک هایکو زیبا و کوتاه است. هر خط از کد نویسی تا جایی که ضرورت داشته باشد؛ خلاصه شده است و چیز دیگری وجود ندارد. در نتیجه، چیز زیادی وجود ندارد که منجر به اشتباه بشود. همچنین، تمام فایل های .c برای کل سیستم عامل دقیقاً در دسترس قرار دارد – بنابراین اگر نیاز به splunk کردن کد کرنل پیدا کردید، به سادگی می توانید انجام بدهید.
یک روش دیگر برای ساخت نرم افزار: اسکرام چیست؟ اجزای آن و روش توسعه دهنده شدن
پس از سادگی می توان به کوچک بودن اندازه FreeTROS اشاره کرد. بسیاری از ریزپردازنده ها، RAM محدودی دارند، همچنین حافظه فلش نیز در آنها محدودیت هایی دارد. FreeTROS کوچک است و می تواند هزینه های شما را تا حد قابل توجهی کاهش بدهد. زمانی که با این MCU های کوچک کار می کنید، با ذخیره کردن چندین بایت شادمان خواهید شد زیرا فضا همیشه کم است.
ویژگی دیگر FreeRTOS آن است که به طور گسترده مورد استفاده قرار گرفته است. در واقع روی هر یک MCUهای مدرن و کوچک به کار گرفته می شود. این ویژگی زمانی که شما یک محصول را به بازار عرضه می کنید، به کار می آید زیرا تاحدی جداسازی سخت افزاری را در اختیار شما قرار می دهد. اگر کدنویسی خود را روی FreeTROS ایجاد کنید، به این معناست که پرتابل تر می باشد و این به نوبه خود بدان معناست که شما کمتر به فروشنده ریزپردازنده ای که انتخاب کرده اید؛ وابسته خواهید بود.
حتما دانلود کنید: آموزش مهندسی نرم افزار با 30 درس رایگان (و نکات کاربردی)
همان طور که از نام Free مشخص می شود، FreeRTOS کاملاً منبع باز است، البته درباره این موضوع کمی ترس، عدم قطعیت و تردید (FUD) وجود دارد؛ البته بیشتر میان طرفداران فریمورک های منبع باز بحث وجود دارد. به این دلیل که FreeTROS در سال 2017 توسط آمازون ارائه شده است و آمازون یک نسخه فوق العاده از FreeTROS را ارائه داده است که پیوستن دستگاه کوچک اینترنت اشیاء شما را به AWS آسان می کند. با این حال، کل سیستم عامل، به وضوح کل سیستم عامل تحت مجوز مجاز MIT در دسترس است. به سختی می توان در مورد استفاده از FreeTROS مشکل یا ایرادی پیدا کرد – حتی اگر به هر دلیلی از آمازون خوشتان نمی آید-
اکنون در انتهای فهرست، باید گفت که FreeTROS یک سیستم عامل بلادرنگ است. “بلادرنگ” در زبان سیستم عامل به این معناست که طراح سیستم می تواند اطمینان داشته باشد که رویدادهای مهم زمانی، دقیقاً در زمان پاسخ تعریف شده، توسط پردازنده سرویس دهی می شوند. FreeTROS برای انجام این عمل بسیار مناسب است. لینوکس یک سیستم عامل فوق العاده است اما علیرغم تلاش های مختلفی که در طول این سال ها انجام شده است؛ RTOS (بلادرنگ) نیست.
حتما بخوانید: چگونه نرم افزار بسازیم؟ (و آموزش رایگان مهارت های لازم)
موضوع این است که هرچقدر که ریزپردازنده ها قدرتمندتر شدند، تعداد اپلیکیشن هایی که به زمان بندی شدیداً بلادرنگ نیاز دارند؛ کاهش پیدا می کند، البته هنوز وجود دارند، اما تعداد آنها اندک است.
به همین دلیل است که ویژگی RTOS (بلادرنگ) بودن سیستم عامل FreeTROS نسبت به دیگر ویژگی ها کمتر جالب به نظر می رسد. به هر ترتیب به نظر می رسد که FreeTROS برای دستگاه های کوچک انتخاب فوق العاده ای باشد حتی اگر نیاز به سیستم بلادرنگ نداشته باشند.
دروس آموزشی FreeTROS
این نکات و اصول و یاداوری ها رو بلد باش
پس فهمیدیم که فریتوس یک سیستم عامل بلادرنگ متنباز و سبکوزن است که برای سیستمهای تعبیهشده (Embedded Systems) طراحی شده است. این سیستم عامل به دلیل سادگی، انعطافپذیری و کارایی بالا، محبوبیت زیادی در بین توسعهدهندگان سیستمهای تعبیهشده دارد. در اینجا آموزش FreeRTOS را به زبان ساده و گامبهگام برای مبتدیان توضیح میدهیم:
۱. مفاهیم اولیه FreeRTOS
-
وظیفه (Task): کوچکترین واحد اجرایی در FreeRTOS. هر وظیفه میتواند به صورت موازی با دیگر وظایف اجرا شود.
-
صف (Queue): برای انتقال داده بین وظایف استفاده میشود.
-
سمفور (Semaphore): برای هماهنگی و مدیریت دسترسی به منابع مشترک.
-
تایمر (Timer): برای اجرای وظایف در بازههای زمانی مشخص.
-
مدیریت حافظه: FreeRTOS از روشهای مختلفی برای مدیریت حافظه پویا استفاده میکند.
۲. نصب و راهاندازی FreeRTOS
-
دانلود FreeRTOS:
-
به وبسایت رسمی FreeRTOS بروید: freertos.org.
-
آخرین نسخه FreeRTOS را دانلود کنید.
-
-
اضافه کردن به پروژه:
-
فایلهای FreeRTOS را به پروژه خود در محیط توسعه (IDE) اضافه کنید.
-
معمولاً از محیطهایی مانند Keil, IAR یا Eclipse استفاده میشود.
-
۳. ایجاد اولین پروژه با FreeRTOS
-
مرحله ۱: پیکربندی FreeRTOS:
-
فایل
FreeRTOSConfig.h
را ویرایش کنید تا پارامترهای سیستم عامل را تنظیم کنید. -
مثلاً تعداد وظایف، اندازه پشته و اولویتها را تعیین کنید.
-
-
مرحله ۲: ایجاد وظایف (Tasks):
-
یک وظیفه جدید ایجاد کنید. هر وظیفه یک تابع است که به صورت بینهایت اجرا میشود.
-
مثال:
void vTaskFunction(void *pvParameters) { while (1) { // کد وظیفه vTaskDelay(1000 / portTICK_PERIOD_MS); // تاخیر ۱ ثانیه } }
-
-
مرحله ۳: شروع وظایف:
-
از تابع
xTaskCreate
برای ایجاد و شروع وظایف استفاده کنید. -
مثال:
xTaskCreate(vTaskFunction, "Task1", configMINIMAL_STACK_SIZE, NULL, 1, NULL);
-
-
مرحله ۴: شروع زمانبند (Scheduler):
-
پس از ایجاد وظایف، زمانبند FreeRTOS را شروع کنید تا وظایف اجرا شوند.
-
مثال:
vTaskStartScheduler();
-
۴. کار با صفها (Queues)
-
ایجاد صف:
-
از تابع
xQueueCreate
برای ایجاد یک صف استفاده کنید. -
مثال:
QueueHandle_t xQueue = xQueueCreate(10, sizeof(int));
-
-
ارسال داده به صف:
-
از تابع
xQueueSend
برای ارسال داده به صف استفاده کنید. -
مثال:
int data = 42; xQueueSend(xQueue, &data, portMAX_DELAY);
-
-
دریافت داده از صف:
-
از تابع
xQueueReceive
برای دریافت داده از صف استفاده کنید. -
مثال:
int receivedData; xQueueReceive(xQueue, &receivedData, portMAX_DELAY);
-
۵. کار با سمفورها (Semaphores)
-
ایجاد سمفور:
-
از توابع
xSemaphoreCreateBinary
یاxSemaphoreCreateMutex
برای ایجاد سمفور استفاده کنید. -
مثال:
SemaphoreHandle_t xSemaphore = xSemaphoreCreateBinary();
-
-
دریافت سمفور:
-
از تابع
xSemaphoreTake
برای دریافت سمفور استفاده کنید. -
مثال:
xSemaphoreTake(xSemaphore, portMAX_DELAY);
-
-
ارسال سمفور:
-
از تابع
xSemaphoreGive
برای ارسال سمفور استفاده کنید. -
مثال:
xSemaphoreGive(xSemaphore);
-
۶. کار با تایمرها (Timers)
-
ایجاد تایمر:
-
از تابع
xTimerCreate
برای ایجاد تایمر استفاده کنید. -
مثال:
TimerHandle_t xTimer = xTimerCreate("Timer", pdMS_TO_TICKS(1000), pdTRUE, NULL, vTimerCallback);
-
-
شروع تایمر:
-
از تابع
xTimerStart
برای شروع تایمر استفاده کنید. -
مثال:
xTimerStart(xTimer, portMAX_DELAY);
-
-
تابع بازخوانی (Callback):
-
تابعی که در هر بار فعال شدن تایمر اجرا میشود.
-
مثال:
void vTimerCallback(TimerHandle_t xTimer) { // کد بازخوانی }
-
هر زبان برنامه نویسی را رایگان از اینجا می توانید یاد بگیرید
سلام وقت بخیر
پاسخقسمت 10 این آموزش کی منتشر میشه؟
بسیار عالی
پاسخ