سلام. عنوان سوال شاید گمراه کننده باشه. مالتی تسک در واقع اصطلاح خیلی بزرگیه برای این سوال من.
در مدارات عادی مبتنی بر میکروکنترلرها، فرض کنید چندین ورودی (برای راحتی از جنس کلید) داریم. و هر کلید باید وظیفه ای رو انجام بده. حالا ممکنه این وظیفه زمانبر باشه مثلا کاری که کلید یک باید انجام بده ممکنه 10 بار و هر یک ثانیه یکبار وضعیت یک خروجی رو معکوس کنه. خب در برنامه نویسی عادی ما با استفاده مکرر از تابع delay اینکار رو انجام میدیم ولی عملا با اینکار عملکرد ورودیهای دیگه تا اتمام این تسک ، معطل میمونه.
اینجاست که ما باید میکرو رو اصطلاحا معطل نکنیم. تسک رو به حالتهای ریز تر بشکونیم و بعد از انجام هر حالت تا رسیدن زمان حالت بعد بریم سراغ کارهای دیگه مثلا بررسی وضعیت کلیدهای دیگه.
شما برای اینکه تسکها رو به حالتهای ریزتر بشکونید و وظایف مختلف رو در دل هم پیاده سازی کنید (به عبارت ساده تر از تابع delay استفاده نکنید) چطور کد میزنید؟
من عملا برای انجام ساده اینکار، یک آرایه ساده دارم که توش حالتها شماره بندی شدند و زمان انجام هر حالت داخلش نوشته میشه. این آرایه در داخل روتین تایمر بررسی میشه و موعد هر حالت که برسه انجام داده میشه.
این در واقع پیاده سازی ساده صف queue و ماشین حالت هست .
در مدارات عادی مبتنی بر میکروکنترلرها، فرض کنید چندین ورودی (برای راحتی از جنس کلید) داریم. و هر کلید باید وظیفه ای رو انجام بده. حالا ممکنه این وظیفه زمانبر باشه مثلا کاری که کلید یک باید انجام بده ممکنه 10 بار و هر یک ثانیه یکبار وضعیت یک خروجی رو معکوس کنه. خب در برنامه نویسی عادی ما با استفاده مکرر از تابع delay اینکار رو انجام میدیم ولی عملا با اینکار عملکرد ورودیهای دیگه تا اتمام این تسک ، معطل میمونه.
اینجاست که ما باید میکرو رو اصطلاحا معطل نکنیم. تسک رو به حالتهای ریز تر بشکونیم و بعد از انجام هر حالت تا رسیدن زمان حالت بعد بریم سراغ کارهای دیگه مثلا بررسی وضعیت کلیدهای دیگه.
شما برای اینکه تسکها رو به حالتهای ریزتر بشکونید و وظایف مختلف رو در دل هم پیاده سازی کنید (به عبارت ساده تر از تابع delay استفاده نکنید) چطور کد میزنید؟
من عملا برای انجام ساده اینکار، یک آرایه ساده دارم که توش حالتها شماره بندی شدند و زمان انجام هر حالت داخلش نوشته میشه. این آرایه در داخل روتین تایمر بررسی میشه و موعد هر حالت که برسه انجام داده میشه.
این در واقع پیاده سازی ساده صف queue و ماشین حالت هست .
دیدگاه