При необходимости предоставления пользователю возможностей манипулирования ходом вычислительного процесса на микооконтроллерной системе (загрузка новых модулей из инструментальной системы, изменение содержимого памяти данных и оперативной памяти программ, запуск модулей на выполнение, управление обменом информацией в мультимикроконтроллерных системах) в состав программного обеспечения микроконтроллерной системы вводятся компоненты, обладающие способностью управления процессом выполнения задач на основе команд оператора. Такие npoграммные системы, называемые операционными системами (ОС), содержат в своем составе: ядро, реализующее общую логику функционирования операционной системы (реакция на прерывания, исполнение команд и др.). модули диалога с пользователем (проведение которого предполагает наличие в составе микропроцессорной системы устройств ввода-вывода информации), модули управления задачами (загрузкой, выгрузкой, переключением между задачами в мультизадачных системах, определением достижения условий останова и др.), а также модули связи с внешними вычислительными системами (в мультимикроконтроллерных системах, в системах с инструментальными ЭВМ и др.) (рис.).
Значение, строение и функционирование нервной системы. Видеоурок по биологии 8 класс
Рис. Структура операционной системы МК
Для осуществления своих функций ядро операционной системы, передача управления на которое осуществляется в соответствии с определенными временными метками, должно использовать высшие приоритеты системы обработки прерываний (рис.). В отличие от операционных систем, библиотеки подпрограмм непосредственно не решают задачи управления вычислительным процессом, однако содержат набор функционально законченных модулей, выполняющих типовые действия по обмену информацией с устройствами ввода-вывода, математические функции и т. п.
Программы диагностики выполняют проверку исправности микроконтроллерной системы и ее составных частей. Проведение диагностических процедур описано в
Структура и функции инструментального ПО
В состав инструментального ПО входят: сервисные программы, трансляторы, размещающие программы и средства отладки.
К сервисным программам относятся редакторы, библиотекари, информационно-обучающие программы и др.
Редакторы предназначены для подготовки исходных текстов программ микроконтроллерной системы. Редакторы принимают исходную программу с некоторого устройства ввода-вывода (клавиатуры, дисковой памяти и пр.) и заносят в оперативную или дисковую память инструментальной ЭВМ. Для подготовки программ в инструментальных системах используются общецелевые редактирующие программы, которые могут использоваться для создания исходных программ на любом языке. Редактор оперирует с исходной программой как с текстом, не учитывая те синтаксические правила, которым должна удовлетворять программа.
Библиотекари предназначены для создания и ведения библиотек подпрограмм, реализующих типовые функции, часто применяемые в разработках. Библиотекари, как правило, имеют команды организации библиотеки, включения и удаления программных модулей, получения информации о еодержа- щихся в библиотеке программных модулях.
Строение клетки за 8 минут (даже меньше)
Информационно-обучающие программы предназначены для начинающих пользователей и позволяют приобрести некоторые навыки применения инструментальных систем.
Трансляторы преобразуют исходную программу, написанную на входном языке (в качестве которого, как правило, применяются ассемблер и ряд языков высокого уровня, в частности язык Си) в результирующую — так называемую объектную программу на языке кодов команд микроконтроллера. Кроме объектной программы трансляторы выдают листинг программы, содержащий распечатку исходной и объектной программ, таблицы идентификаторов, сообщения об ошибках и другие виды диагностической информации. Как правило, трансляторы обладают возможностью формировать объектную программу в перемещаемых адресах и обрабатывать внешние связи между программными модулями.
Размещающие программы преобразуют объектные программы к виду, непосредственно готовому к выполнению на микропроцессорной системе, и заносят полученные программы в память микроконтроллерной системы (МКС). Процесс перевода объектных программ к виду, пригодному для исполнения, включается в преобразовании перемещаемого варианта объектной программы в вариант программы в абсолютных адресах. При необходимости установления связей между отдельными объектными модулями производится дополнительное редактирование внешних ссылок. Отметим, что сам процесс внесения программы в память микропроцессорной системы должен быть поддержан средствами как инструментальной вычислительной системы, так и самой МКС.
В качестве примера подобных систем можно привести пакет фирмы 2500 A.D. v4.02, включающий в себя макроассемблер Х8051 для МКС, совместимых с однокристальными микро-ЭВМ семейства МК-51, библиотекарь и редактор связей, формирующий результирующие программы в ряде широко распространенных форматов.
Структура и функции прикладного ПО
Прикладное ПО, реализующее процесс управления объектом, как любая сиожная программная система, строится по модульному принципу, в соответствии с которым каждая функционально законченная программная единица оформляется в виде подпрограммы, обращение к которой возможно из других программных модулей (рис.).
Задающие модули (задатчики) реализуют функцию, описывающую желаемое поведение объекта управления в виде набора ряда программнодоступных переменных управления. Информацию, необходимую для формирования задающей функции (например, выбор типа функции) задатчик может получать от оператора либо генерировать самостоятельно на основе информации об объекте управления. Функция, задающая желаемое поведение объема, может быть реализована либо путем математических вычислений, либо путем обращения к участку памяти, хранящему набор значений данной функции. Критериями выбора одной из методов служат необходимая точность и требуемая скорость вычислений
Рис. Организация взаимодействия прикладного ПО
Измерительные модули выполняют взаимодействие с аппаратурой датчиков объекта управления, предоставляя программам информацию о текущем состоянии объекта управления в виде значения ряда программно-доступных переменных.
Регулирующие модули (регуляторы) предназначены для построения выдаваемого на объект воздействия на основе информации о требуемом поведении объекта управления и его реальном поведении. В настоящее время в рамках теории автоматического управления разрабогано достаточно большое количество способов регулирования.
Драйверы объекта предназначены для преобразования информации об управляющем воздействии в управляющее воздействие того типа, которое соответствует объекту управления.
Так, например, для реализации управления частотой вращения шагового двигателя с тахогенератором в роли датчика частоты, задатчик формирует тре- буемое значение частоты вращения (в оборотах в секунду), измеритель опре- деляет текущее значение частоты в тех же единицах, что задатчик, осуществляя пересчет показаний аналого-цифрового преобразователя в количество оборотов в секунду, регулятор определяет уровень воздействия на объект (например, путем вычислений функции пропорционального регулятора), а драйвер преобразует полученный уровень воздействия в сигналы коммутации фазовых обмоток шагового двигателя, следующие с частотой, определяющейся информацией, полученной с регулятора.
Драйвер и измеритель принадлежат к объектно-зависимым компонентам прикладного ПО, а задатчик и регулятор— к объектно-независимым.
При смене объекта управления драйвер объекта также подлежит смене (в описанной системе замена шагового двигателя на двигатель постоянного гока потребует от драйвера объекта реализации управления, например, методом широтно-импульсной модуляции). При смене датчиков объекта замене подлежит измеритель.
Стадии разработки программного обеспечения
При проектировании программного обеспечения микроконтроллерных систем управления техническим объектом разработчику необходимо осуществить продвижение проекта через ряд стадий:
Анализ проблемы и построение математической модели.
Построение алгоритмов решения задачи.
Проектирование программы, решающей поставленную задачу.
Проведение автономной oтладки
Проведение комплексной отладки.
8 Передача в эксплуатацию.
Первый этап предполагает формирование описания (на естественном языке либо на языке специальных символов) условий задачи и желаемого результата. Как правило, постановка задачи представляется в виде технического задания.
На втором этапе осуществляется построение математической модели того физического процесса, который описывается в постановке задачи.
На третьем этапе математическая модель представляется в виде, удобном для числовой оценки, и осуществляется выбор метода решения задачи. На двух первых этапах описывалась сущность, которую необходимо получить в процессе проектирования, начиная с третьего этапа формируется способ реализации этой сущности — алгоритм получения результата на основе исходных данных.
На четвертом этапе осуществляется проектирование программного комплекса, завершающееся разработкой спецификаций требований к составным частям программного комплекса.
На пятом этапе выполняется собственно программирование, т. е. кодирование алгоритма с помощью выбранного языка программирования.
На шестом этапе выполняется автономная отладка каждой программы, входящей в состав программного комплекса, т. е. достижение правильности реализации функции, возложенной на данную программу.
На седьмом этапе проверяется соответствие техническому заданию всего программного комплекса.
На восьмом этапе разработанный программный комплекс передается в эксплуатацию с изготовлением необходимой документации.
Процесс сопровождения (девятый этап) заключается в устранении обнару-, женных ошибок, в модификации и улучшении применяемых подпрограмм.
Следует отметить, что в микроконтроллерных системах заключительная передача в эксплуатацию разработанного программного комплекса требует проведения комплексной отладки аппаратного и программного обеспечения (см. рис.).
Под отладкой понимается процесс поиска, обнаружения и исправления ошибок в разрабатываемой системе.
Отладка микроконтроллерных систем включает в себя стадии отладки аппаратных средств, программных средств, а также комплексную совместную отладку аппаратуры и программного обеспечения.
Источник: studopedia.su
Функции и структура программ
Функции разбивают большие вычислительные задачи на маленькие подзадачи и позволяют использовать в работе то, что уже сделано другими, а не начинать каждый раз с пустого места. Соответствующие функции часто могут скрывать в себе детали проводимых в разных частях программы операций, знать которые нет необходимости, проясняя тем самым всю программу , как целое, и облегчая мучения при внесении изменений.
Язык «C» разрабатывался со стремлением сделать функции эффективными и удобными для использования; «C»- программы обычно состоят из большого числа маленьких функций , а не из нескольких больших. Программа может размещаться в одном или нескольких исходных файлах любым удобным образом; исходные файлы могут компилироваться отдельно и загружаться вместе наряду со скомпилированными ранее функциями из библиотек . Мы здесь не будем вдаваться в детали этого процесса, поскольку они зависят от используемой системы.
Большинство программистов хорошо знакомы с «библиотечными» функциями для ввода и вывода / getchar , putchar / и для численных расчетов / sin , cos , sqrt /. В этой лекции мы сообщим больше о написании новых функций .
4.1. Основные сведения
Для начала давайте разработаем и составим программу печати каждой строки ввода , которая содержит определенную комбинацию символов. /Это — специальный случай утилиты grep системы » UNIX «/. Например, при поиске комбинации «the» в наборе строк
now is the time for all good men to come to the aid of their party
в качестве выхода получим
now is the time men to come to the aid of their party
основная схема выполнения задания четко разделяется на три части:
while (имеется еще строка) if (строка содержит нужную комбинацию) вывод этой строки
Конечно, возможно запрограммировать все действия в виде одной основной процедуры , но лучше использовать естественную структуру задачи и представить каждую часть в виде отдельной функции . С тремя маленькими кусками легче иметь дело, чем с одним большим, потому что отдельные не относящиеся к существу дела детали можно включить в функции и уменьшить возможность нежелательных взаимодействий. Кроме того, эти куски могут оказаться полезными сами по себе.
«Пока имеется еще строка» — это getline , функция , которую мы запрограммировали в «лекции №1″ , а » вывод этой строки» — это функция printf , которую уже кто-то подготовил для нас. Это значит, что нам осталось только написать процедуру для определения , содержит ли строка данную комбинацию символов или нет. Мы можем решить эту проблему, позаимствовав разработку из PL/1: функция index(s,t) возвращает позицию, или индекс, строки s , где начинается строка t , и -1 , если s не содержит t . В качестве начальной позиции мы используем 0 , а не 1 , потому что в языке «C» массивы начинаются с позиции нуль. Когда нам в дальнейшем понадобится проверять на совпадение более сложные конструкции , нам придется заменить только функцию index; остальная часть программы останется той же самой.
После того, как мы потратили столько усилий на разработку, написание программы в деталях не представляет затруднений. ниже приводится целиком вся программа , так что вы можете видеть, как соединяются вместе отдельные части. Комбинация символов, по которой производится поиск, выступает пока в качестве символьной строки в аргументе функции index , что не является самым общим механизмом. Мы скоро вернемся к обсуждению вопроса об инициализации символьных массивов и в «лекции №5» покажем, как сделать комбинацию символов параметром, которому присваивается значение в ходе выполнения программы . Программа также содержит новый вариант функции getline ; вам может оказаться полезным сравнить его с вариантом из «лекции №1» .
#define maxline 1000 main() /* find all lines matching a pattern */ < char line[maxline]; while (getline(line, maxline) >0) if (index(line, «the») >= 0) printf(«%s», line); > getline(s, lim) /* get line into s, return length * char s[]; int lim; < int c, i; i = 0; while(—lim>0 (c=getchar()) != EOF c != ‘n’) s[i++] = c; if (c == ‘n’) s[i++] = c; s[i] = ‘