"DVDXpert" - компас в мире Hi-Fi и High End техники и другой stereo и home cinema аппаратуры.
ГЕНЕРАЦИЯ ОБЪЕКТНЫХ МОДУЛЕЙ (ФАЙЛОВ) |
21-12-2023 |
Для предотвращения подобных ситуаций добавлены новые директивы, BANKSEL и PAGESEL. Эти директивы дают компоновщику команду выполнить предварительную проверку и при необходимости сгенерировать коды переключения страницы или банка для корректного обращения к указанной метке.
Когда преобразование исходного текста к виду, соответствующему требованиям перемещаемого кода, завершено, может быть сгенерирован объектный файл Для этого в оболочке MPASM для Windows или в соответствующем окне MPLABIDE надо галочкой отметить опцию "Object File" Диалоговые окна среды MPLAB подробно описаны в предыдущей главе.
Далее мы рассмотрим пример несложной программы, сначала в виде абсолютного кода, а затем разобьем исходный файл на две части, одна из которых будет представлять собой вызываемую подпрограмму, которую можно включить в состав библиотеки и вызывать из других программ, а вторая часть будет представлять собой главный модуль, вызывающий подпрограмму.
Программа имеет иллюстративный характер, однако будучи ассемблированной, работает правильно. Исходный текст предназначен для контроллеров Р16С5Х, но с незначительными изменениями его можно применить и для PIC16X8X. Этот пример иллюстрирует создание перемещаемого кода и библиотечного модуля. Практические примеры программ с подробными комментариями мы рассматриваем далее, в соответствующей главе.?
Очевидно, что подпрограмма, перемножающая два 8битных числа, может нам понадобиться в дальнейшем и ее целесообразно выделить в библиотечный модуль. Для этого, как показано далее, выделяем подпрограмму в отдельный фрагмент и объявляем переменные mulcnd, mulplr, H_byte и L_byte как глобальные. Также объявляем глобальным имя подпрограммы умножения тру. Для того чтобы компоновщик зарезервировал ячейки ОЗУ под переменные, отводим им секцию данных директивой UDATA и директивой RES резервируем под каждую переменную необходимое число ячеек. Далее исходный файл ассемблируется как объектный модуль и на выходе получается объектный файл с расширением ".О".
Основной модуль программы считывает данные с выводов портов (по умолчанию после сброса они настроены на ввод) и вызывает подпрограмму умножения.
Когда по ходу написания некой прикладной программы необходимо несколько раз поместить в нее фрагмент, выполняющий перемножение двух чисел, нет нужды повторять фрагмент исходного кода, надо лишь вызвать макрос и передать ему в качестве аргументов имена необходимых переменных (множителей и приемников результата) В выходной исполняемый код при ассемблировании будут помещены необходимые процессорные команды со ссылками на соответствующие ячейки памяти Разумеется, это иллюстративный пример, и логичнее было бы оформить этот фрагмент как подпрограмму Но бывают случаи, когда, например, необходимо выполнять одинаковую последовательность действий над разными ячейками памяти (регистрами общего пользования)
Возможности виртуальных студий
ОСТАНОВ ПО УСЛОВИЮ
ЦИФРОВЫЕ КОНСТАНТЫ И СИСТЕМЫ СЧИСЛЕНИЯ
Маршрутизатор