EasyMCU RTOS

EasyMCU RTOS

EasyMCU RTOS

EasyMCU RTOS : سیستم عامل بلادرنگ EasyMCU بر پایه ی سیستم عامل FreeRTOS پیاده سازی شده است.
RTOS کوتاه شده ی عبارت Real Time Operating System به مفهوم سیستم عامل بلادرنگ می باشد
اگر اطلاعی در مورد دلیل استفاده از سیستم عامل در میکروکنترلرها ندارید، این مقاله ی عالی رو از دست ندهید!
این صفحه به روز رسانی می شود. آخرین به روز رسانی 8/22/2016

 

Thread

کلاس Thread (نخ ، ریسمان) به شما امکان ایجاد و کنترل Thread ها را می دهد، در واقع در EasyMCU OS مشاهده می کنید که Task ها در قالب Thread ها تعریف می شوند!
تابع main یک thread خاص می باشد و تنظیمات اولیه و شروع باقیه thread ها از این تابع می باشد. تابع main توسط RTOS به عنوان اولین thread فراخوانی می شود.

 

حالات مختلف یک Thread

Thread : RUNNING ای که هم اکنون در حال اجراست در وضعیت RUNNING قرار می گیرد. تنها یک thread در هر لحظه می تواند در این وضعیت باشد.

Thread : READY هایی که آماده اجرا هستند در وضعیت READY قرار می گیرند. زمانی که thread در حال اجرا به پایان رسید و یا به خواب (sleep) رفت، thread بعدی که در وضعیت READY قرار دارد و اولویت بالاتری دارد به وضعیت RUNNING می رود.

Thread : WATING هایی که به خواب(sleep) رفته اند و یا منتظر یک رخداد هستند تا اتفاق بیفتند در وضعیت WAITING قرار دارند.

Thread : INACTIVE هایی که ساخته نشده اند یا پایان یافته اند (terminated) در وضعیت INACTIVE قرار می گیرند. این thread ها به صورت معمول از منابع سیستم استفاده نمی کنند.

 

Mutex

یک Mutex (میوتکس) برای محافظت از منابع در اشتراک سیستم مورد استفاده قرار می گیرد. برای مثال چند thread که ممکن است همزمان قصد دسترسی و استفاده از یک منبع خاص را داشته باشند، در حالی که در هر لحظه فقط یکی از آنها باید به این منبع دسترسی داشته باشد.

Mutex ها نباید درون روال ISR (وقفه) مورد استفاده قرار بگیرند.

 

Signals

هر thread برای اجرا شدن می تواند منتظر یک سیگنال (رویداد) باشد. منشاء سیگنال می تواند یک thread دیگر و یا روال وقفه (ISR) باشد. چرا که در سبک کد نویسی سیستم عامل همیشه سعی می کنیم روال های وقفه تا حد ممکن خلاصه و کوتاه باشند. در اصطلاح تخصصی کلاس signal همان Semaphore binary می باشد.

 

Queue

یک Queue (صف) به شما این امکان را می دهد که یک Queue از اشاره گرها به داده ها را ، از thread تولید کننده به thread مصرف کننده تشکیل دهید. به این ترتیب قادرید اطلاعات را بین دو thread مجزا رد و بدل کنید.

 

RTOS Timer

کلاس RtosTimer به شما امکان می دهد تا قابلیت کنترل کردن عملکردهای تایمر را در سیستم داشته باشید. به تعداد دلخواه می توان تایمر ایجاد کرد و تایمرها به صورت نرم افزاری و دقیق کار می کنند و زمانی که دوره ای منقضی شود تابع تایمر مدنظر فراخوانی می شود. تایمرها به دو صورت یکباره و دوره ای می توانند پیکربندی شوند. یک تایمر عملکردهای start ، reset و stop را می تواند داشته باشد.

 

روال وقفه (ISR)

تمامی API های RTOS می توانند در ISR مورد استفاده قرار بگیرند، جهت بعضی موارد خاص در انتهای نام متود از عبارت FromISR استفاده شده است که این متودها خاص ISR باید استفاده شوند. در ISR دو نکته وجود دارد.

استفاده از Mutex در ISR مجاز نیست.

استفاده از sleep و تاخیر در ISR مجاز نیست. همه پارامترهای timeout متودها باید با مقدار 0 تنظیم شوند (بدون تاخیر).

 

Timeout های پیشفرض

در EasyMCU RTOS تمام timeout های API ها به صورت پیشفرض برای متودهای تولید کننده برابر 0 (بدون تاخیر) و برای متودهای مصرف کننده این مقدار برابر بینهایت می باشد.

یک تولید کننده می تواند یک واحد جانبی باشد که جهت اعلان یک رویداد، وقفه ای را تولید می کند. در این روال وقفه استفاده از تاخیر مجاز نیست ( چرا که کل سیستم زمان بندی هسته سیستم عامل را مختل می کند. ) در سمت دیگر، مصرف کننده می تواند thread ای باشد که در پشت پرده منتظر وقوع یک رویداد است تا بتواند ایفای نقش کند. در چنین وضعیتی مادامی که مصرف کننده در پشت پرده منتظر می ماند، هیچ زمانی از CPU تلف نمی شود، بنابراین زمان تاخیر پیشفرض برای منتظر ماندن در این وضعیت بینهایت است.

 

توجه : زمانی که عملکردی برای یک شیء در روال وقفه (ISR) صدا زده می شود، پارامتر timeout باید برابر 0 مقدار دهی شود (بدون تاخیر) چرا که استفاده از تاخیر در روال وقفه مجاز نمی باشد.