7.7. Ультразвуковой дальномер из предыдущего вопроса был собран и протестирован. Однако обнаружилось, что с течением времени показания медленно изменяются. Сначала грешили на дрейф, но генератор оказался стабильным. Немного подумав, один студент предположил, что скорость звука зависит от условий окружающей среды. После небольшого исследования он вывел следующую зависимость скорости звука от температуры:
Vt = V0∙√(1 + (Δt/273)),
где V0 — скорость распространения при 20 °C, a Vt — скорость при температуре
Глава 8
Инструментальные средства для работы с языком ассемблера
Начиная С главы 3, мы написали уже достаточно программ. Для доходчивости эти программы были написаны таким образом, чтобы их легче было понимать человеку. То есть команды представлялись короткими мнемониками, например return вместо Ь’00000000001000’. Аналогично, регистры имели имена, такие как INTCON, а строки имели метки и комментарии. Однако такое символьное представление годится только для человека. Микроконтроллер и знать ничего не знает, кроме двоичных кодов (см. стр. 64), составляющих исполнимый код и данные.
Воспользовавшись описанием набора команд (см. Приложение Г), можно вручную транслировать программу из подобного удобочитаемого формата в машиночитаемый двоичный код. В принципе для таких устройств, как микроконтроллеры PIC, имеющих сокращенный набор команд (RISC) и небольшое число режимов адресации, это не так уж и сложно. Однако это довольно долгий и утомительный процесс, особенно если программа достаточно большая. Кроме того, при таком подходе велика вероятность возникновения ошибок и усложняется внесение изменений в программу.
Знакомые вам компьютеры незаменимы там, где необходимо быстро и аккуратно выполнять однообразные операции. Очевидно, что задача перевода программы из символьного представления в машинный код полностью подходит под эту категорию. В данной главе мы вкратце рассмотрим различные программные средства, помогающие осуществлять этот процесс трансляции. В следующей главе мы также познакомимся с аналогичными средствами для языка высокого уровня.
Прочитав эту главу, вы:
• Узнаете, что такое язык ассемблера и как он соотносится с машинным кодом.
• Поймете преимущества символьного представления перед машинным кодом.
• Разберетесь в назначении ассемблера.
• Поймете разницу между абсолютным и перемещаемым кодом.
• Поймете назначение компоновщика.
• Ознакомитесь с процессом трансляции ассемблерной программы в абсолютный машинный код.
• Узнаете структуру файла машинных кодов и назначение программы-загрузчика.
• Научитесь использовать интегрированную среду разработки для автоматизации взаимодействия между различными программными средствами, необходимыми для превращения исходного кода в запрограммированный микроконтроллер.
Суть процесса преобразования ассемблерной программы показана на Рис. 8.1. Программа была набрана в символьном виде человеком, преобразована компьютером и выдана в машиночитаемом виде. Разумеется, за этой простотой скрываются гораздо более сложные процессы, которые мы разберем довольно подробно, что поможет вам в написании программ (в степени, достаточной, чтобы вы могли свободно писать программы).
Рис. 8.1.
Вообще говоря, различные трансляторы и утилиты выпускаются и продаются огромным числом компаний, занимающихся разработкой программного обеспечения, поэтому конкретные детали и операции в различных коммерческих продуктах несколько отличаются. Что же касается конкретно микроконтроллеров PIC, то их производитель, компания Microchip Technology Inc, избрала стратегию бесплатного предоставления программных средств для работы с языком ассемблера. Именно это сыграло большую роль в популярности данных микроконтроллеров. Поэтому коммерческое ПО для работы на таком низком уровне встречается достаточно редко, и, более того, используемый синтаксис обычно совпадает с синтаксисом, принятым в программах самой Microchip. По этой причине в данной главе мы будем рассматривать пакет инструментальных средств Microchip.
Использование компьютеров для трансляции кода, представленного в удобном для человека символьном виде (
0AA0 0820 3Е06 1905 00A0 0008