Ревич, Ю.В. Программирование микроконтроллеров AVR: от Arduino к ассемблеру
Глава б. Основы программирования МКАVR 161 в пределах 1 00-300 микросекунд. А если вдруг даже такая задержка будет мешать, то всегда можно подключить к делу таймер и отсчитывать задержки с его помощью аппаратно, вообще не тормозя контроллер. Программа при этом получается слож нее, потому мы здесь ее не приводим, т. к. на практике такой метод требуется не часто (пример такой программы приведен в главе 12). ПРИМЕЧАНИЕ Напоминаю, что все эти программы на счет по нажатию (count_push.asm и count_ push_int. asm) , а также по отпусканию (count_release.asm и count_release_int.asm) вы можете найти в архиве по адресу, указанному во введении. Наверняка читатель еще далеко не во всем разобрался, и в применении некоторых команд многое ему непонятно. В последующих главах мы рассмотрим многие во просы подробнее, а сейчас пойдем дальше и посмотрим, что происходит с про граммами после того, как вы их написали и откомпилировали. Сравнение ассемблерной программы с программами Ardu i no и другими языками высокого уровня Как писал классик программирования Дональд Кнут, «каждый, кто всерьез интере суется компьютерами, должен рано или поздно изучить по крайней мере один ма шинный язык» . Ассемблер - это первично, а все остальное вторично. Но ассемб лер обладает одним большим недостатком : программы на его основе получаются громоздкими и неудобочитаемыми. Это вызвано тем, что здесь любую операцию приходится разлагать на составляющие . Особенно это характерно для RISС архитектур (к которым относится и АVR) - например, в системе команд АVR нет даже операции деления, да и операция умножения работает не во всех моделях. Никакой речи о том, чтобы следовать знаменитому лозунгу Дейкстры «программи рование без goto», тут идти не может, т. к. ассемблерная программа, если можно так выразиться, состоит из сплошных goto - «лапши» условных и безусловных переходов, по выражению Дейкстры (он намекал на многочисленные линии ветв ления, которые возникают в блок-схемах таких программ). Таким образом, для ра боты на ассемблере требуется учить реализацию всех типовых приемов програм мирования - различных циклов с условными и безусловными переходами, мате матических операций, самостоятельно организовывать деление на локальные и глобальные переменные и т. п. Это и служит основным аргументом в пользу языков высокого уровня, где подобные реализации в большинстве случаев уже сделаны за вас . «Обычные» программисты, как огня, боятся замкнутых циклов, условие выхода из которых может не выполниться хотя бы теоретически. Бесконечное ожидание при хода символа с клавиатуры или из СОМ-порта, в котором не предусмотрено ника ких альтернативных средств выхода из цикла, повесит не только саму программу, но и всю систему, если речь идет об однозадачной DOS или «кооперативной много-
Made with FlippingBook
RkJQdWJsaXNoZXIy MTExODQxMg==