Циклический исполнительный

редактировать

A циклический исполнительный является альтернативой операционной системе реального времени. Это форма совместной многозадачности, в которой есть только одна задача. Единственная задача обычно реализуется как бесконечный цикл в main (), например в C.

Основная схема состоит в циклическом циклическом выполнении повторяющейся последовательности действий с заданной частотой (также известное как циклический исполнительный механизм, запускаемый по времени). Например, рассмотрим пример встроенной системы, предназначенной для мониторинга датчика температуры и обновления дисплея LCD. На ЖК-дисплее может потребоваться запись двадцать раз в секунду (т.е. каждые 50 мс). Если датчик температуры должен считываться каждые 100 мс по другим причинам, мы могли бы построить цикл следующего вида:

int main (void) {while (1) {// Этот цикл рассчитан на 100 мс, то есть // все шаги в сумме составляют 100 мс. // Поскольку это демонстрационный код, и мы не знаем, сколько // времени потребуется на выполнение tempRead или lcdWrite, мы предполагаем, // что они занимают нулевое время. // В результате задержки отвечают за планирование / время выполнения задачи. // Считываем температуру один раз за цикл (каждые 100 мс) currTemp = tempRead (); // Запись на ЖК-дисплей дважды за цикл (каждые 50 мс) lcdWrite (currTemp); задержка (50); lcdWrite (currTemp); задержка (50); // Теперь 100 мс (delay (50) + delay (50) + tempRead + lcdWrite + lcdWrite) // прошло, поэтому мы повторяем цикл. }}

Внешний цикл 100 мс называется основным циклом. В этом случае также имеется внутренний второстепенный цикл продолжительностью 50 мс. В этом первом примере сравнение внешнего и внутреннего циклов неочевидно. Мы можем использовать счетный механизм для уточнения основных и второстепенных циклов.

int main (void) {int я == 0; while (1) {// Этот цикл рассчитан на 50 мс. // Поскольку это демонстрационный код, и мы не знаем, сколько // времени потребуется на выполнение tempRead или lcdWrite, мы предполагаем, // что они занимают нулевое время. // Поскольку мы хотим, чтобы tempRead выполнялся каждые 100 мсек, мы используем // оператор if, чтобы проверить, является ли счетчик четным или // нечетным, и решить, выполнять ли tempRead. // Считываем температуру каждый второй цикл (каждые 100 мс) if ((i% 2) == 0) {currTemp = tempRead (); } // Запись на ЖК-дисплей один раз за цикл (каждые 50 мс) lcdWrite (currTemp); задержка (50); i ++; // Теперь прошло 50 мс, поэтому повторяем цикл. }}
См. Также
Ссылки
Последняя правка сделана 2021-05-16 12:28:54
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте