آموزش نصب و راه اندازی سیستم عامل Free RTOS روی STM32

آموزش نصب و راه اندازی سیستم عامل Free RTOS روی STM32
جهت نصب و راه اندازی سیستم عامل FreeRTOS مستقیم به سراغ cubeMX می رویم، تنظیمات مربوط به میکروکنترلر STM32 را انجام می دهیم. بعد از اینکه با نحوه ی نصب و راه اندازی سیستم عامل آشنا شدیم، پروژه را در محیط Keil اجرا می کنیم و اولین تجربه عملی با سیستم عامل RTOS را رقم خواهیم زد. آماده اید ؟!
اگر از لحاظ مفهومی اطلاعاتی از سیستم عامل بلادرنگ و RTOS ها ندارید، در انتهای این مقاله، لینک های مفید را بررسی کنید، مطالب زیادی در این باره منتشر کردم.
مشاهده ویدئو
تنظیمات محیط cubeMx
شروع برنامه نویسی در محیط Keil
حداقل سخت افزار مورد نیاز
در این مطلب از برد معروف و محبوب mini STM32 استفاده می کنیم که تصویر آن را در زیر مشاهده می کنید. بردی ارزان از نسل ARM Cortex-M3 که برای شروع و وارد شدن به دنیای RTOS کاملا مناسب است.
تنظیمات RTOS در cubeMx
از نرم افزار STM32CubeMX استفاده می کنیم تا تنظیمات اولیه پروژه را سریعتر و راحت تر در محیطی گرافیکی انجام دهیم. در این پروژه قصد داریم دو تسک تعریف کنیم و در هر تسک یک LED را به صورت چشمک زن در آوریم، به گونه ای که استقلال تسک ها را نسبت به یک دیگر ببینیم.
اگر با نرم افزار cubeMX و آماده سازی پروژه آشنایی ندارید، اینجا کلیک کنید.
شروع برنامه نویسی به روش RTOS
تنظیمات انجام شده در محیط cubeMX را می توانیم در محیط Keil به صورت کدهای برنامه نویسی ببینم. cubeMX به صورت پیش فرض از CMSIS-RTOS استفاده می کند و پروژه را تولید می کند. cmsis-rtos صرفا یک لایه روی API های خود FreeRTOS است. بنابراین دقت کنید که یک سیستم عامل جداگانه به حساب نمی آید، تنها شکل برنامه نویسی را تغییر می دهد. محیط Keil را مطابق تصویر زیر خواهیم داشت.
با استفاده از کد زیر اقدام به ایجاد و تعریف دو تسک Task می کنیم. به این مفهوم که مادامی که پردازنده روشن است، سیستم عامل این دو تسک را رسیدگی می کند.
#define LED1_SET(x) HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, x) #define LED2_SET(x) HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, x) #define DELAY_LOW (300) #define DELAY_HIGH (350) //--> tasks handle definitions osThreadId led1TaskHandle; osThreadId led2TaskHandle; //--> tasks routine definitions void led1Task(void const * arg); void led2Task(void const * arg); int main(void) { //--> Init System HAL_Init(); SystemClock_Config(); //--> Config peripherals MX_GPIO_Init(); MX_USART1_UART_Init(); //--> Task1 Definition osThreadDef(task1, led1Task, osPriorityNormal, 0, 128); led1TaskHandle = osThreadCreate(osThread(task1), NULL); //--> Task2 Definition osThreadDef(task2, led2Task, osPriorityNormal, 0, 128); led2Taskhandle = osThreadCreate(osThread(task2), NULL); //--> Start Scheduler osKernelStart(); while (1) { } } //--> task1 routine void led1Task(void const * arg) { while(1) { LED1_SET(1); osDelay(DELAY_LOW); LED1_SET(0); osDelay(DELAY_LOW); } } //--> task2 routine void led2Task(void const * arg) { while(1) { LED2_SET(1); osDelay(DELAY_HIGH); LED2_SET(0); osDelay(DELAY_HIGH); } }
همانطور که مشاهده می شود بعد از اجرا شدن تابع osKernelStart در تابع main ، حالت اجرای برنامه از روش bare metal به RTOS تغییر می کند و برنامه زین پس در روتین تسک های تعریف شده اجرا می شود و نه در تابع main
اگر در روش تعریف تسک Task ها کنجکاو هستید، قبلا مقاله ای در این باره نوشته شده است. برای اطلاعات بیشتر روی لینک زیر کلیک کنید.
نحوه ی سیم بندی سخت افزار
به منظور دیدن نتیجه، سخت افزار ساده ای به شرح تصویر زیر بر روی بردبورد می بندیم.
کامپایل برنامه و پروگرام کردن برد
همه چیز آماده است، با کلیک کردن بر روی Icon دانلود مطابق تصویر زیر در محیط Keil ، برد برنامه ریزی می شود.
در صورتی که با نحوه ی برنامه ریزی برد با St-link و یا JLINK آشنایی ندارید، لینک های زیر انواع روش های برنامه ریزی را با جزئیات به شما نشان خواهند داد.
منابع پیشنهادی جهت یادگیری بیشتر FreeRTOS
در لینک زیر می توانید کتاب الکترونیکی را دانلود کرده و یک شروع سریع با سیستم عامل FreeRTOS برای میکروکنترلر STM32 داشته باشید.
همینطور می توانید در دوره جامع آموزش سیستم عامل FreeRTOS در لینک زیر شرکت کنید.
لینک های مرتبط
آموزش نحوه استفاده از صف Queue در FreeRTOS
آموزش نحوه استفاده از میوتکس Mutex در FreeRTOS
لینک های مفید
استفاده از سیستم عامل RTOS در میکروکنترلرها
مقایسه برنامه نویسی به روش RTOS و Super Loop
RTOS یا سیستم عامل بلادرنگ چیست؟
اگر سوال، پیشنهاد، نظر و یا … دارید، از قسمت نظرات در پایین همین صفحه، می توانید با ما و بقیه ی خوانندگان درمیان بگذارید.
جهت مطلع شدن از آموزش های جدید به خبرنامه ی EasyMCU بپیوندید.
درباره مرتضی زندی
خلق کردن شماره 1 علاقه مندی های من هست. برنامه نویسی بهترین ابزاری بوده که تا الان برای این کار پیدا کردم. بیس الکترونیک دارم و دستی بر آتش در دنیای رشته های مجاور. تجربه سال ها فعالیت در تیم های R&D رو دارم، در این بین در حوزه ی امبدد سیستم ها فعالیتم پررنگ تر هست. عاشق یادگیری و یاد دادن هستم و تلاش می کنم تجربیاتم رو به زبانی ساده از طریق EasyMCU.org به نحوی کاربردی و موثر با علاقه مندان این حوزه به اشتراک بذارم.
نوشته های بیشتر از مرتضی زندیمطالب زیر را حتما مطالعه کنید
آموزش نصب و راه اندازی سیستم عامل Free RTOS برای آردوینو Arduino
آموزش FreeRTOS نحوه استفاده از میوتکس Mutex
آموزش Free RTOS نحوه استفاده از سمافور Semaphore
آموزش STM32 راه اندازی وقفه خارجی EXTI
معرفی کتاب ARM
راه اندازی واحد سریال UART در STM32
10 دیدگاه
به گفتگوی ما بپیوندید و دیدگاه خود را با ما در میان بگذارید.
دیدگاهتان را بنویسید لغو پاسخ
این سایت از اکیسمت برای کاهش هرزنامه استفاده می کند. بیاموزید که چگونه اطلاعات دیدگاه های شما پردازش میشوند.
سلام
ممنون از شما
آموزش رو با کیفیت و عالی تهیه کردید
درود بر شما آقا مهدی گرامی.
سپاس از فیدبک شما.
خوشحالم که آموزش مورد توجهتون قرار گرفته و مفید واقع شده.
با آرزوی بهترین ها.
مثل همیشه عالی
کلا یه وقت می خوام خالی کنم
یه بارکی با دوره های شما این RTOS رو شروع کنم
درود بر شما آقا فرشاد گرامی
سپاس از فیدبک شما.
خوشحالم مفید بوده و لذت بردید.
همراه شما هستیم.
با آرزوی بهترین ها.
سلام وقت بخیر
من با توابع HAL کار کردم میتونم RTOS کار کنم ؟ یا قبلش حتما باید با CMMSIS کار کرده باشم ؟
درود بر شما آقا پارسا عزیز
برای کار کردن با RTOS نیاز نیست CMSIS کار کرده باشید. کافیه با سبک عادی برنامه نویسی ( که اصطلاحا برمتال یا سوپر لوپ گفته میشه) کار کرده باشید و قدری تجربه در برنامه نویسی میکروکنترلر و زبان C داشته باشید. اگر با توابع HAL آشنایی دارید، بنابراین بنظر میرسه که تجاربی در این زمینه دارید و میتونید RTOS رو شروع بفرمایید.
با آرزوی بهترین ها
عالی بود امیدوارم ادامه بدید
با اینکه بلد بودم باز نشستم تا آخرشو دیدم
از اموزشتون لذت بردم
درودها آقا مهدی …
مرسی از کامنت انرژی بخش شما.
با آرزوی بهترین ها
سلام و عرض ادب
عالی …عالی
متشکرم از زحماتتون…
درودها
ممنون از فیدبک شما. خوشحالم مفید بوده.
با آرزوی بهترین ها.