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

В языке программирования ASM-51 для этой цели используется директива public (общедоступные). Директива может быть использована в любом месте исходного текста модуля, однако обычно она размещается в его начале. Имена переменных в этой директиве перечисляются через запятую. Если в результате получается слишком длинная строка, то можно использовать несколько таких директив. Глобальное имя может быть объявлено только в одном модуле программы. Несколько глобальных переменных или подпрограмм с одним и тем же именем недопустимы.

Пример использования директивы public на языке программирования ASM-51:

PUBLIC Buflnd, Parametr

PUBLIC Podprogr,?Podprogr?Byte

Для ссылки на переменную или метку, объявленную в другом модуле, используется директива extrn. Идентификатор в пределах одного модуля не может быть одновременно объявлен как public и как extrn. В директиве extrn перечисляются через запятую имена подпрограмм и переменных, числовое значение которых редактор связей должен получить из других модулей и модифицировать все команды, в которых эти метки или переменные используются. Кроме того, для правильного использования инструкций микроконтроллера в директиве extrn должен быть указан тип памяти (data, bit, code, idata или xdata), в которой расположена переменная или метка. Для передачи числовых констант между модулями можно воспользоваться вспомогательным словом number Директива extrn может располагаться в любом месте исходного текста модуля. Идентификатор внешнего имени не может быть переопределен в программном модуле каким-либо способом. Рекомендуется с целью оптимизации результирующего объектного кода (в частности, команд JMP и CALL) размещать директиву EXTRN до ссылки на соответствующее внешнее имя (как правило, в начале исходного текста программного модуля или программного сегмента). Пример использования директивы extrn на языке программирования ASM-51:

EXTRN DATA (Buflnd, ERR), CODE (ASC_BIN, BIN_ASC), NUMBER (LIMIT)

EXTRN CODE (Podprogr)

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

Файл-заголовок на языке программирования asm-51 записывается на диск с расширением *.inc (сокращение от английского слова include — включать) и включается в исходный текст программы при помощи директивы include. Например:

$INCLUDE (REG51.INC)

При работе с пакетом программ, поставляемым фирмой keil, программа-транслятор с языка программирования ASM-51 «понимает» и файлы-заголовки, написанные для языка программирования С-51. Поэтому можно воспользоваться и этими файлами. Например:

#include

$include (init.inc)

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

Приведем пример вызова редактора связей из командной строки DOS для объединения трех модулей:

r151.exe progr.obj, modul1.obj, modul2.obj

В результате работы редактора связей в этом примере будет создан исполняемый модуль с именем progr. Формат записи информации в этом файле остается прежним — объектным. Это позволяет объединять модули по частям, т. е. при желании можно из нескольких мелких модулей получить один более крупный.

Перейти на страницу:

Поиск

Похожие книги