
AVR. Учебный Курс. Архитектура Программ Часть 2
Диспетчер
Данная организация программы требует чуть большего количества кода чем
флаговый автомат (Хотя это еще как посмотреть. С увеличением числа задач
служебный код динамического диспетчра не увеличивается, а вот флаговый
автомат разрастается за счет большего числа флагов и проверок этих флагов,
плюс быстродейтсвие снижается, чего нет в диспетчере) , но зато лишена
ряда недостатков.
Во первых тут очередь выполнения задач не жестко заданная, а
динамическая, конвеерного типа. То есть у нас есть в памяти массив из
указателей на задачи-функции. Диспетчер берет указатель и, если он не
указывает на Idle, осуществлет переход по этому адресу. Предварительно
удалив его из очереди и подкинув очередь.
Заброс указателей-задач в очередь осуществляется другими задачами и
прерываниями, а также программными таймерами. Собственно, принцип
передачи управления от задачи к задаче похож на флаговый автомат —
работаем через посредника. Только у нас тут отстутствуют проверки флагов,
а переход делается диспетчером. За счет этого увеличение числа задач не
сказывается на увеличении размера управляющей структуры.
Благодаря такой системе управляющую структуру можно вынести в
отдельную библиотеку, сварганить к ней конфиг и таскать за собой ее туда
сюда. Очень удобно.
А теперь подробно распишу тот диспетчер, который стоит в 90% моих
проектов на Си.
Очередь задач
Основа основ. С нее все начинается.