Густав Олссон, Джангуидо Пиани - Цифровые системы автоматизации и управления (1087169), страница 110
Текст из файла (страница 110)
е, допускать многокра „ атпып вызовы и пРиостановкУ исполнениЯ, котоРые не влиЯют лРУг на друга. Эти пРогрп огрпм мы должны использовать только регистры процессора или память вызывающих „, процессов, т. е. не иметь локальных переменных. В результате реентерабельный мод „ дуяь разделяемый несколькими процессами, можно прервать в любое время и про„'о жить с другой точки программы, поскольку он работает со стеком вызвавшего е процесса. Таким образом, реентерабельная процедура может оказаться одновремсп но в контексте нескольких различных процессов.
Эффективность исполнения является одним из наиболее важных параметров сп. стем реального времени. Процессы должны выполняться быстро, и часто приходи ж искать компромисс между ясностью и структурированностью программы и ее бысп родействием. Жизненный опыт показывает, что если для достижения цели нужно чем-то пожертвовать, то это обычно лелается.
Не всегла возникает противоречпп между структурностью и эффективностью, но если первое должно быть принесено в жертву второму, необходимо полностью документировать все принятые решения, иначе супьественно осложняется дальнейшее сопровождение программы. 10.Б.4. Обработка прерываний и исключений Системы реального времени соединены с внешней средой (физический процесс) через аппаратные интерфейсы. доступ к интерфейсам и внешним данным осущесгп ляется либо по опросу, либо по прерыванию.
При опросе (Ро(йпд) программа должна циклически последовательно проверя~~ все входные порты на наличие у них новых данных, которые затем считываются и обрабатываются. Очередность и частота опроса определяют время реакции систеь'ы реального времени на входные сигналы, Опрос является простым, но незффекгпп ным методом из-за повторяющихся проверок входных портов. Получение данных по прерыванию (кипеггаРГ) происходит иначе. Интерфейс ейснпе ем спгустройство, получившее новые данные, привлекает внимание ЦП, посылая ему с прерывал прерывания через системную шину.
По отношению к текущему процессу ир Р вания являются асинхронными событиями, требующими немедленнои реакц тек. ьпегп лучив сигнал прерывания, процессор приостанавливает исполнение те У г аммыоп процесса, сохраняет в стеке его контекст, считывает из таблицы адрес прогр „бработработки прерывания и передает ей управление. Эта программа называется о Р аний заклЮ чиком прерывания (1ипеггирГ 'аапгйег).
Другов вариант обработки прерыван ооытип идп чается в том, что планировщик выбирает из очереди ожидания этого соо прерывания следующий процесс и переводит его в очередь готовых проце ессов. Когда процессор передает управление обработчику прерываний, он о бычпо сп , Об аботчи храняет только счетчик команд и указатель на стек текущего процесса.
О Р прерываний должен сохранить во временных буферах или в стеке все регистрь' "" „вти" торые он собираешься использовать, н восстановить их в конце. Эта операпия Р вбежат иа по времени и, как правило, требует запрета прерываний для того, чтобы из переключения процессов во время ее выполнения. 19 б, Методы пРогРаммирования в реальном времени 449 При Управлении прерываниями время реакции должно быть как можно м Оно представляет собой сумму времени, необходимого процессору, чтобы среагироть на прерывание (латентность прерывания), и времени, необходимого на пере- ключение контекста до запуска обработчика прерываний. Типичная загрузка систе- мы также играет определенную роль.
Если система должна об . служивать много дновременных прерываний, вновь поступающие прерывания бу улуг ждать в очере- ди пока процессор не освободится. Программы обработки прерывания должны быть предельно компактными (длина кода) и короткими (время выполнения). Если сложное действие, требующее большо- ,е расхода процессорного времени, например вычисления или до б ступ к азе данных, пеобходимо выполнить после возникновения прерывания, то его о его лучше вынести из брпботчика прерывания в процесс. Программа обработки прерывания должна вы- полнять лишь минимально необходимые операции, например сч име считать входные дан- пып, сформировать сообщение и передать другой программе, извещая ее, вещая ее, что про- пзошло прерывание и требуется дальнейшая обработка, Хор орошим стилем для обработчиков прерываний является использование реентерабельного кода.
Это по- зволяет избежать конфликтов в случае, если прерывается са. б б я сам о ра отчик и тот же кпд вызывается для обслуживания нового прерывания пре режде, чем закончилась об- работка предыдущего. Реакция на исключения (ехсер6опп)1 похожа на обработку прерываний. Исклю- чениями называются нештатные ситуации, когда процессор не может правильно вы- полнить команд . П име ом у, р р исключения является деление на ноль или обращение по несуществующему адресу. В англоязычной литературе лля разных видов исклю- пеппй применяются термины (гар,уапц абьлт.
Обычно опе ационная си р стема обрабатывает исключения, прекращая текущий процесс, и выводит сообщение, четко описывающее ситуацию, на устройство отобра- жения, обычно монито з или п и принтер. Приемлемая при интерактивной многоиользова- ьпяьской последовательной о ой обработке, внезапная остановка процесса в системах реального в смени о быть абсолютно искльочена. Нельзя допустит управляемые мик оп о е р р ц ссором автопилот самолета или автоматическая тормозная 'пстема автомобиля (АиготагксВгайкий5узгет — А В В) внезапно прекратили работу из- 'пделения на ноль. В системах ах реального времени все возможные исключения должны адизироваться за анее с оп ад р прелелением соответствующих процедур обработки. ложной проблемой п и об р " р обработке исключений является проверка, что исключеи не возникнет снова после т того, как оно оыло обработано. Или иными словами, ра отка исключений должна за спт а л ж а заниматься причиной, а не симптомами аномальной Уации.
Если исключение об бработано некорректно, оно может возникнуть опять, пптч„п, , тавляя процессор снова и снова р нова переходить к модулю обработки. Например, обрачик деления на нуль должен позлят У л н проверять и изменять операнды, а не просто возоблять исполнение с места и пу цикл Редшествующего ошибке, что приведет к бесконечнотичсские адреса прог аммн ппуске с ро р . мных модулей известны только после их загрузки. При оке системы в таблиц об або агр;, Ужаются об аботчи у р тки прерываний записываются адреса памяти, ку а р ики, которые затем вызываются по ссылкам из 6 , ь ", ти,куда ьлкам из зтои таблицы. е путать с "взаимным исключением" — кп"г"абцчучизя — аз пз .
'".32. Л вЂ” аз раздела 1о В 2. — Лримем уед. н Зкм ~пю 450 Глава 10. Программирование систем реального вр емени 10.6.5. Программирование операций ожидания Процесс реального времени может явным образом ждать истечения некотор ороге интервала (относитсльнос время) или наступления заданного момента (абсолю чютное время). Соответствующие функции обычно имеют следующий формат: зеа11 (и) 451 9 б Методы программирования в реальном времени 10 а ошибка исполнение ошибка исполнение 9тот принцип проиллюстрирован на рис. 10.9 б, где номинальное время отложено »орнзонтальной оси. Когда абсолютное время принимается в качестве опорного, вв »о вь хоплепия ошибок времени удается избежать.
зиа11 цп111 (время) где п — интервал в секундах или миллисекундах, а переменная "время" имеет форм часы, минуты, секунды, миллисекунды Когда выполняется одна из этих функций, операционная система помещает про цссс в очередь ожилания. После истечения»»наступления заданного времени проце~~ переводится в очередь готовых процессов. Распространенный, но нс лучший метод организации временной задержкн— цикл, контроль системного времени в цикле занятого ожидания гереа1 (' холостой ход ') цпп! (Вше = 12:00:00); Как правило, подобные активные циклы ожидания представляют собой бесполезную трату процессорного времени, и их следует избегать.
Однако имеются исключения. В системе, гле аналого-цифровое преобразование занимает 20 мкс, а операция переключения процессов — 10 мкс, более экономно организовать ожидание на 20 мкс перед тем, как считать новые данные, чем начинать процедуру переключения процессов, неявно подразумеваемую "хорошей" операцией ожидания. Каждый случай требует индивидуального подхода — для этого обычно нужно хорошее знание системы и развитое чутье.
Важной особенностью процессов, запускаемых периодически, — например, филь трация и алгоритмы регулирования, — является накопленная ошибка времени. Это связано с тем, что процесс из очереди ожилания события опять попадает в очередь, не уже готовых процессов и должен ждать некоторый случайный интервал времени прежде, чем получит управление (рис.