بهینه ترین حالت خواندن ورودی ها در FreeRTOS

با سلام
برای خواندن ورودی های دیجیتال در یک سیستم با STM32H7 و کلاک 280Mhz که از FreeRTOS استفاده شده.
و task های زیر وجود دارد:
دو تا مدباس ۴۸۶
یک مدباس شبکه
یک ارتباط دیتا و پیامک با ماژول M66

و یک تسک اصلی که وظیفه کنترل و اعمال خروجی ها رو دارد.

من اگر بخوام ورودی ها را با نرخ ۱ میلی ثانیه بخونیم و فیلتر و ON ,OFF delay براشون داشته باشم.

و همچنین تسک کنترلی در مواقعی واقعا لازم به اجرا نیست و می تواند به block برود و منتظر تغییر ورودی ها یا دریافت داده از درگاه های مدباس یا ماژول gsm باشد( با استفاده از vTaskNotifyTake در تسک کنترلی و xTaskNotify در هر کدام از تسک هایی که ممکن است داده جدیدی داشته باشند).

و واقعا لازم هست task کنترلی اصلی وقتی کاری برای انجام ندارد به block برود تا سایر task ها با اولیت های پایین تر بتوانند اجرا شوند.

:stop_sign: سوال من اینکه خواندن از ورودی های دیجیتال را در یک تسک جدا قرار بدهم؟ یا داخل tickhook ؟
چرا که لازم دارم ضمن بحث فیلتر روی ورودی ها (ON,OFF delay با حداقل زمان 1ms ) بتونیم در صورت تغیرات روی ورودی ها به تسک اصلی notify بدم و از block خارج اش کنم.

در این نوع سیستم ها ورودی های دیجیتال رو چه طوری می خوانند که بتوانند به نرخ ۱ میلی ثانیه(با شرایط گفته شده) برسند ؟ چه روشی استاندارد تر است ؟

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