
مبانی FreeRTOS و مدیریت وظایف درEmbedded System
- ارسال شده توسط Reza Mehrabani
- تاریخ آگوست 8, 2025
- دسته بندی آمادگی مصاحبه Embedded system
- نظرات 0 نظر
📘 بخش اول: مبانی FreeRTOS و مدیریت وظایف در سیستمهای نهفته
در این مقاله، با مفاهیم پایهای FreeRTOS آشنا میشویم و به بررسی دقیق ساختار وظایف (Tasks)، همزمانی، مدیریت وقفهها و پیکربندی اولیه این سیستمعامل قدرتمند برای میکروکنترلرها میپردازیم.
✅ FreeRTOS چیست و چرا مهم است؟
FreeRTOS یک هسته سیستمعامل بلادرنگ (Real-Time OS) رایگان و متنباز است که برای سیستمهای نهفته (Embedded Systems) طراحی شده. این سیستمعامل سبک، با مصرف حداقل منابع، امکان اجرای چندوظیفهای، زمانبندی دقیق و همزمانی ایمن را فراهم میکند.
📌 کاربردها:
-
دستگاههای IoT
-
سیستمهای صنعتی
-
تجهیزات پزشکی
-
کنترلرهای خودرو
-
پروژههای مبتنی بر STM32، AVR، ESP32 و …
✅ تفاوت FreeRTOS با سیستمعاملهای معمولی چیست؟
| ویژگی | FreeRTOS | سیستمعاملهای عمومی (مثل Linux) |
|---|---|---|
| حجم | بسیار سبک (چند کیلوبایت) | سنگین (دهها مگابایت) |
| زمانبندی | بلادرنگ | عموماً غیربلادرنگ |
| منابع مورد نیاز | کم | زیاد |
| مناسب برای | میکروکنترلرها | رایانهها / SBCها |
✅ اجزای اصلی FreeRTOS
-
Task (وظیفه): واحد اجرایی مستقل، مشابه Thread
-
Queue (صف): برای تبادل داده بین Taskها
-
Semaphore / Mutex: ابزار همزمانی و کنترل دسترسی به منابع
-
Timer: اجرای کد در بازههای زمانی مشخص
-
Event Group: هماهنگی بین چندین Task
✅ ویژگیهای کلیدی FreeRTOS
-
پشتیبانی از چندوظیفهای پیشگیرانه (Preemptive Multitasking)
-
زمانبندی اولویتمحور
-
بسیار سبک و قابل اجرا روی منابع محدود
-
قابل پورت شدن به بیش از ۴۰ نوع معماری پردازنده
-
دارای API ساده و قابل فهم
✅ مزایای FreeRTOS در سیستمهای نهفته
-
بهبود ساختار کد و توسعه آسان پروژههای پیچیده
-
زمانبندی دقیق برای اجرای عملیات حساس
-
پشتیبانی از معماری بلادرنگ
-
کاهش مصرف حافظه و انرژی
-
مناسب برای پروژههای صنعتی، خودرویی، پزشکی و IoT
🔧 مدیریت وظایف (Tasks) در FreeRTOS
🔹 1. Task چیست؟
Task یک تابع مستقل است که توسط Scheduler اجرا میشود. هر Task دارای پشتهی اختصاصی، اولویت و زمانبندی جداگانه است. Taskها همزمان (یا به شکل مجازی) اجرا میشوند.
🔹 2. زمانبندی وظایف چگونه انجام میشود؟
-
FreeRTOS از Scheduler اولویتمحور استفاده میکند.
-
وظایف با اولویت بالاتر، زودتر اجرا میشوند.
-
اگر چند Task اولویت برابر داشته باشند، به صورت گردشی (Round Robin) اجرا میشوند.
🔹 3. پشته هر Task چه کاربردی دارد؟
پشتهی Task محل نگهداری متغیرهای محلی، رجیسترهای CPU و بازگشت از توابع است. هر Task پشته مخصوص به خود را دارد. در صورت تعیین اندازهی نامناسب، ممکن است دچار Stack Overflow شوید.
🔹 4. چگونه یک Task جدید ایجاد میشود؟
با تابع xTaskCreate():
xTaskCreate( MyTaskFunction, // تابع وظیفه "MyTask", // نام وظیفه 128, // اندازه پشته NULL, // پارامتر ورودی 2, // اولویت NULL // هندل خروجی (اختیاری) );
🔹 5. اولویت Task چیست؟
عدد صحیحی که میزان اهمیت Task را مشخص میکند. عدد بزرگتر = اولویت بالاتر. Scheduler همیشه ابتدا Taskهای با اولویت بالاتر را اجرا میکند.
🔁 همزمانی در FreeRTOS
🔹 6. Semaphore چیست؟
ابزاری برای همگامسازی Taskها یا کنترل دسترسی به منابع مشترک. انواع آن:
Binary Semaphore (سیگنالدهی)
Counting Semaphore (کنترل چند دسترسی همزمان)
🔹 7. Mutex چیست؟
نوع خاصی از Semaphore که برای قفلگذاری انحصاری استفاده میشود.
ویژگی کلیدی آن:
Priority Inheritance برای جلوگیری از وارونگی اولویت
🔹 8. Queue چیست و چه کاربردی دارد؟
صف برای انتقال داده ایمن بین Taskها یا از ISR به Task استفاده میشود. مثال: ارسال داده از سنسور به یک Task نمایشگر.
🔹 9. Priority Inversion چیست و FreeRTOS چطور با آن مقابله میکند؟
زمانی که یک Task کماولویت مانع اجرای Task پراولویت شود.
راهحل FreeRTOS:
📌 استفاده از Priority Inheritance در Mutex
🔹 10. تایمر نرمافزاری چیست؟
اجازه اجرای توابع در زمان مشخص (Delay) یا به صورت دورهای (Periodic) را میدهد. بسیار مفید برای Timeoutها و عملیات زمانبندیشده.
⚡ مدیریت وقفهها در FreeRTOS
🔹 11. ISR چیست و چه کاربردی دارد؟
Interrupt Service Routine تابعی است که هنگام وقوع یک رویداد سختافزاری اجرا میشود.
در FreeRTOS:
باید بسیار کوتاه و سریع باشد.
برای ارتباط با Taskها از توابع
FromISRاستفاده کنید.
🔹 12. ارتباط بین ISR و Task چگونه انجام میشود؟
با استفاده از توابعی مانند:
xQueueSendFromISR()
xSemaphoreGiveFromISR()
vTaskNotifyGiveFromISR()همراه با آرگومان
pxHigherPriorityTaskWokenبرای سوییچ فوری بین Taskها.
🔹 13. Tick Interrupt چیست؟
یک وقفهی دورهای (مثلاً هر ۱ms) که:
شمارنده زمان سیستم را بهروز میکند.
وظایف Delayشده را فعال میکند.
زمانبندی وظایف را کنترل میکند.
💾 مدیریت حافظه در FreeRTOS
🔹 14. چگونه حافظه به صورت پویا مدیریت میشود؟
FreeRTOS دارای ۵ روش مدیریت Heap است (
heap_1تاheap_5).
توابع مهم:
pvPortMalloc(): تخصیص حافظه
vPortFree(): آزادسازی حافظه
🔹 15. Stack Overflow چیست و چطور تشخیص داده میشود؟
وقتی که Task بیش از اندازه از پشته استفاده کند.
راههای جلوگیری:
انتخاب مناسب اندازه پشته
فعالسازی تشخیص سرریز با:
define configCHECK_FOR_STACK_OVERFLOW 1
پیادهسازی
vApplicationStackOverflowHook()
📌 نتیجهگیری (پایان بخش اول)
در این بخش با مفاهیم پایه FreeRTOS و اصول طراحی و مدیریت Taskها، همزمانی، وقفهها و حافظه آشنا شدیم. این دانش پایه برای ورود به مباحث پیشرفتهتر مانند طراحی سیستمهای بلادرنگ، پورت کردن و کاربرد در پروژههای صنعتی است.
- در این مقاله با مفاهیم پایهای FreeRTOS از جمله Task، Semaphore، Queue، وقفهها و مدیریت حافظه آشنا میشوید. راهنمایی جامع برای شروع برنامهنویسی بلادرنگ با FreeRTOS در Embedded system
کلمات کلیدی اصلی (Primary Keywords):
FreeRTOS چیست
آموزش FreeRTOS
RTOS برای میکروکنترلر
مدیریت وظایف در FreeRTOS
زمانبندی وظایف در RTOS
تفاوت FreeRTOS با لینوکس
آموزش مقدماتی FreeRTOS
سیستمعامل بلادرنگ برای STM32
مفهوم Task در RTOS
پشته (Stack) در میکروکنترلرها
Queue در RTOS چیست
Semaphore در FreeRTOS
ساختار وقفه در FreeRTOS
tick interrupt در FreeRTOS
مدیریت حافظه در سیستمهای نهفته
کلمات کلیدی فرعی (Secondary/LSI Keywords):
real time operating system برای میکروکنترلر
آموزش زمانبندی وظایف در پروژههای embedded
مقایسه RTOS و bare-metal
مفاهیم مقدماتی RTOS
نقش idle task در FreeRTOS
ایجاد Task جدید در FreeRTOS
مشکلات stack overflow در پروژههای embedded
ارتباط بین ISR و Task در RTOS
تفاوت Mutex و Semaphore در FreeRTOS
ما کنار هم رشد می کنیم.
شما همچنین ممکن است دوست داشته باشید
مفاهیم پیشرفته FreeRTOS، پورت کردن و اصول بلادرنگ
راهنمای مصاحبه طراحی PCB – سطح پیشرفته
