اطلاعیه

Collapse
No announcement yet.

مالتی تسک در میکرو (بدون سیستم عامل) رو شما چجوری پیاده سازی میکنید؟

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    مالتی تسک در میکرو (بدون سیستم عامل) رو شما چجوری پیاده سازی میکنید؟

    سلام. عنوان سوال شاید گمراه کننده باشه. مالتی تسک در واقع اصطلاح خیلی بزرگیه برای این سوال من.
    در مدارات عادی مبتنی بر میکروکنترلرها، فرض کنید چندین ورودی (برای راحتی از جنس کلید) داریم. و هر کلید باید وظیفه ای رو انجام بده. حالا ممکنه این وظیفه زمانبر باشه مثلا کاری که کلید یک باید انجام بده ممکنه 10 بار و هر یک ثانیه یکبار وضعیت یک خروجی رو معکوس کنه. خب در برنامه نویسی عادی ما با استفاده مکرر از تابع delay اینکار رو انجام میدیم ولی عملا با اینکار عملکرد ورودیهای دیگه تا اتمام این تسک ، معطل میمونه.
    اینجاست که ما باید میکرو رو اصطلاحا معطل نکنیم. تسک رو به حالتهای ریز تر بشکونیم و بعد از انجام هر حالت تا رسیدن زمان حالت بعد بریم سراغ کارهای دیگه مثلا بررسی وضعیت کلیدهای دیگه.
    شما برای اینکه تسکها رو به حالتهای ریزتر بشکونید و وظایف مختلف رو در دل هم پیاده سازی کنید (به عبارت ساده تر از تابع delay استفاده نکنید) چطور کد میزنید؟
    من عملا برای انجام ساده اینکار، یک آرایه ساده دارم که توش حالتها شماره بندی شدند و زمان انجام هر حالت داخلش نوشته میشه. این آرایه در داخل روتین تایمر بررسی میشه و موعد هر حالت که برسه انجام داده میشه.
    این در واقع پیاده سازی ساده صف queue و ماشین حالت هست .
    جدیدترین ویرایش توسط mojalan; ۱۰:۳۷ ۱۳۹۷/۰۹/۰۶.

    #2
    پاسخ : مالتی تسک در میکرو (بدون سیستم عامل) رو شما چجوری پیاده سازی میکنید؟

    سلام
    استفاده از ایده ای به نام RTOS که امکان داره به شکل های مختلف ولی با کلیت ثابت پیاده سازی بشه.
    What is RTOS - about RTOS and real time operating systems

    در واقع یک لوپ ایجاد میشه و تسک ها داخل این لوپ تقسیم بندی میشه. در نهایت صفی از تسک ها برای اجرا بر اساس اولویت تشکیل میشه و به این ترتیب میکروکنترلر بدون توقف تسک ها رو مدریت و اجرا می کنه.
    *** يا راهي خواهم يافت، يا راهي خواهم ساخت ... ***

    دیدگاه


      #3
      پاسخ : مالتی تسک در میکرو (بدون سیستم عامل) رو شما چجوری پیاده سازی میکنید؟

      با سلام
      این روشی هم که میگم مشابه همون روشهاییه که دوستان گفتن.
      من یک اینتراپت 100 هرتز می سازم و در هر سرویس روتین وقفه شرایط ورودیها رو بررسی میکنم و کارهایی که باید انجام بشه رو انجام میدم.
      البته فلوچارت تسک ها هم باید متناسب با این روش طراحی بشه. مثلا برای تاخیرها بایدبجای delay، شمارنده گذاشت تا در این وقفه ها مقادیرشون کم یا زیاد بشه.
      در حقیقت در هر وقفه بخشی از یک یا چند تسک انجام میشه و در مجموع همزمان به نظر میرسه.
      کمترین توقع از یک فرد تحصیلکرده، دانستن املای صحیح کلمات است.

      دیدگاه

      لطفا صبر کنید...
      X