Александр Микушин - Занимательно о микроконтроллерах стр 40.

Шрифт
Фон

Александр Микушин - Занимательно о микроконтроллерах

В листинге 7.6 текст программы практически не отличается от описания алгоритма. В начале процесса разработки программного обеспечения подпрограммы обычно еще не написаны. Для того чтобы можно было оттранслировать программу, можно воспользоваться механизмом заглушек. Подпрограмма-заглушка ничего не делает, но уже объявлена и имеет имя, совпадающее с тем действием, которое она должна будет в дальнейшем реализовать.

Подпрограммы будут написаны позднее, когда уже будет отлажен верхний уровень программы. При написании подпрограмм уже не нужно будет заботиться о верхнем уровне, т. к. он уже к этому времени будет отлажен. Не потребуется также учитывать остальные подпрограммы, т. к. подпрограммы одного уровня не зависят друг от друга.

Для улучшения восприятия текста программы, кроме "говорящих" названий подпрограмм широко используются "говорящие" имена переменных. Особенно улучшается читаемость программы в том случае, если имена этих переменных связаны с аппаратурой микроконтроллерного устройства.

Например, для микроконтроллера at89c5l можно назначить флагу завершения приема по последовательному порту R1 имя BytePeredan. Тогда участок программы на языке программирования С-51, соответствующий ожиданию завершения приема байта последовательным портом, будет выглядеть следующим образом:

if (BytePeredan) SBUF = SledujushchiyByte;

При таком выборе имени переменной исходный текст программы практически совпадает с фрагментом алгоритма, который этот участок программы реализует! В этом случае можно даже отказаться от применения комментария для пояснения фрагмента программы.

Применение подпрограмм является не только средством структурирования программы, но и существенно сокращает размер машинного кода, если подпрограммы многократно используются. Однако необходимо отметить, что при использовании подпрограмм несколько уменьшается быстродействие устройства. В случае если для разрабатываемого устройства это недопустимо, вместо подпрограмм можно использовать макросы, в названии которых точно так же будет отображаться выполняемое действие. Макрос, в отличие от подпрограммы, не передает управление в отдельную область памяти с последующим возвратом к следующему за вызовом подпрограммы оператору, а вызывает повторную подстановку одних и тех же команд столько раз, сколько в тексте программы встретилось имя макроса. Для образования макроса в программе на языке программирования С-51 достаточно объявить подпрограмму с префиксом inline.

Основная идея структурного программирования заключаются в том, что существует только четыре структурных оператора. При использовании этих структурных операторов можно построить сколь угодно сложную программу.

Линейная цепочка операторов

Первая управляющая конструкция это линейная цепочка операторов. Она довольно часто используется, поскольку многие задачи могут быть разбиты на несколько более простых последовательно выполняемых подзадач. Однако такой подход достаточно очевиден и применялся с самого начала программирования. Недостаток прямого использования такого подхода - это то, что пока не написана вся программа целиком, ее нельзя отлаживать. В результате отлаживаемая программа получается сложной и в ней трудно найти ошибки.

При использовании линейной цепочки операторов выполнение подзадач может быть поручено подпрограмме, в названии которой можно (и нужно) отразить подзадачу, которую должна решать эта подпрограмма. При этом вместо настоящих программ имеет смысл использовать подпрограммы-заглушки, принцип работы с которыми был рассмотрен ранее.

Блок-схема стандартной структурной конструкции управления "линейная цепочка операторов" приведена на рис. 7.4. Поясним процесс преобразования этой блок-схемы в исходный текст программы.

Занимательно о микроконтроллерах

Рис. 7.4.Блок-схема конструкции управления "линейная цепочка операторов"

На момент написания алгоритма (и программы) верхнего уровня нам не известны детали их реализации, поэтому вместо настоящих подпрограмм, соответствующих элементам блок-схемы "Действие 1" и "Действие 2", поставим подпрограммы-заглушки, которые ничего не делают! Однако в именах подпрограмм отразим те алгоритмические действия, которые они должны осуществлять в дальнейшем. Для отладки программы (и алгоритма) того уровня, который пишется в данный момент, неважно, что подпрограммы ничего не делают. Главное, что мы можем проверить, каков порядок вызовов подпрограмм, и соответствует ли он ожидаемому. На этом же этапе можно отладить взаимодействие между программами.

Для этого мы можем произвести трансляцию программы и на отладчике проследить все действия программы. Возможность производить трансляцию и отладку программы на любом этапе ее написания позволяет находить ошибки сразу же после написания оператора! Ведь если мы написали только один оператор, то и совершить ошибку мы могли только в этом месте! То есть процесс поиска ошибки существенно упрощается. А ведь процесс написания программы на 90 % состоит из поиска ошибок.

После завершения отладки программы (и алгоритма!) текущего уровня можно перейти к написанию и отладке любой из подпрограмм, т. е. к превращению подпрограммы-заглушки в нормальную отлаженную программу. При этом очень важно заметить, что подпрограммы отлаживаются независимо друг от друга, что значительно облегчает написание программы (да и чтение этой программы в дальнейшем).

Пример использования подпрограмм-заглушек для реализации конструкции управления "линейная цепочка операторов" на языке программирования С-51 приведен в листинге 7.7, а на языке программирования ASM-51 - в листинге 7.8.

Александр Микушин - Занимательно о микроконтроллерах

Александр Микушин - Занимательно о микроконтроллерах

Как видно из приведенного в листинге 7.7 исходного текста программы, для организации подпрограммы-заглушки на языке программирования С-51 достаточно определить подпрограмму, не помещая в ее тело ни одного оператора. При этом объявление подпрограммы-заглушки должно быть точно таким же, как у подпрограммы в готовой написанной и отлаженной программе.

На языке программирования ASM-51 имя подпрограммы совпадает с меткой в начале подпрограммы. Однако, в отличие от языков программирования высокого уровня, для организации подпрограммы-заглушки один исполняемый оператор все-таки нужен. Это оператор возвращения из подпрограммы ret. И еще одно замечание. При программировании на языке ассемблера первый написанный оператор и выполняется первым.

Для того чтобы исключить возможность случайного попадания в подпрограмму не по вызову подпрограммы, подпрограммы обычно располагаются в конце исходного текста программы, за обязательным бесконечным циклом основной программы. Иногда подпрограммы все же располагаются до основной программы, сразу за векторами прерывания, но в этом случае все подпрограммы обходятся при помощи команды безусловного перехода LJMP.

Условное выполнение операторов

Вторая конструкция управления называется условным выполнением операторов. Достаточно часто одно или другое действие должно исполняться в зависимости от определенного условия, которое зависит от результатов выполнения предыдущей части программы или от состояния (сигналов) внешних устройств. Блок-схема конструкции управления "условное выполнение операторов" приведена на рис. 7.5.

Занимательно о микроконтроллерах

Рис. 7.5.Блок-схема конструкции управления "условное выполнение операторов"

Как видно из приведенной в листинге 7.9 программы на языке С-51, конструкция условного выполнения операторов реализуется благодаря встроенным средствам самого языка С-51, т. к. он относится к структурированным языкам программирования. В приведенном примере подпрограммы-заглушки использованы для отображения названий частей условного оператора.

В структурированных языках программирования второе плечо условного оператора записывается после зарезервированного слова "else".

В случае необходимости использования в любом из плеч нескольких операторов применяется структурный оператор "линейная цепочка операторов", реализация которого была описана ранее.

Александр Микушин - Занимательно о микроконтроллерах

Пример реализации конструкции управления "условное выполнение операторов" на языке программирования ASM-51 приведен в листинге 7.10. Язык программирования ASM-51 не является структурированным, поэтому для реализации конструкции условного выполнения операторов приходится использовать несколько команд микропроцессора (операторов языка программирования ассемблер).

Ваша оценка очень важна

0
Шрифт
Фон

Помогите Вашим друзьям узнать о библиотеке