"DVDXpert" - компас в мире Hi-Fi и High End техники и другой stereo и home cinema аппаратуры.
ГЕНЕРАЦИЯ ОБЪЕКТНЫХ МОДУЛЕЙ (ФАЙЛОВ) |
17-01-2024 |
НЕКОТОРЫЕ ПРЕДУПРЕЖДЕНИЯ ПО ПОВОДУ ПРИМЕНЕНИЯ СКРИПТОВ
Компания Microchip® приводит следующие предупреждения, связанные с применением скриптов компоновщика:
Вполне возможно, что перед использованием вам понадобится модифицировать файлы скриптов, поставляемые в комплекте с MPLINK.
Вам понадобится устанавливать размер стека, если вы используете MPLABC17/C18 с MPLINK.
Вам понадобится разделять страницы памяти, если ваш код содержит инструкции GOTO или CALL без применения псевдоинструкции PAGESEL.
В MPASM вы не можете переключать впредназад секции в одиночном файле, т.е. вы не должны делать нечто наподобие этого'
CODE MY_ROM
(инструкции программы)
UDATA MY_VARS (переменные)
CODE MY_ROM
(вновь инструкции программы)
КАК РАБОТАЕТ КОМПОНОВЩИК
В предыдущих разделах этой главы мы в общих чертах описали, какие задачи выполняет компоновщик. Вполне возможно, что многим разработчикам этой информации будет достаточно. Для более глубокого знакомства с компоновщиком MPLINK надо знать не только что он делает, но и как он это делает.
Итак, как мы уже знаем, компоновщик комбинирует входные объектные модули в один выходной исполняемый модуль. Входные объектные модули могут содержать перемещаемые или абсолютные секции кода или данных, которые компоновщик разместит в памяти. Архитектура памяти описана в скрипте компоновщика. Скрипт предоставляет гибкий механизм для спецификации блоков памяти. Если компоновщик не может найти блок памяти, в котором должна располагаться специфицированная секция, то генерируется ошибка.
Как только компоновщик успешно распределил все секции из всех входных модулей в доступной памяти, начинается процесс перераспределения свойств указателей или символов. Остановимся подробнее на обобщенном понятии символа.
Использование символов является механизмом для описания и идентификации различных частей программы. Этими частями являются имена функций, имена переменных, имена секций, имена файлов и т.д. В зависимости от контекста, когда мы говорим о символах, мы можем иметь в виду имена переменных, имена меток, другие понятия. Соответственно, если мы говорим о пе
ременной, то имени переменной (ее символу) поставлен в соответствие адрес ОЗУ или смещение от начального адреса. Если мы говорим о подпрограмме, то ее имени (символу) поставлен в соответствие абсолютный или относительный адрес в памяти программ. Эти адреса являются значениями названных символов.
Указателисимволы, определенные в каждой входной секции, имеют условные значения адреса, отсчитываемые относительно начала секции. Впоследствии компоновщик придает этим адресам конкретные значения в соответствии с текущими адресами секций. После того, как компоновщик перераспределил значения символов в каждой входной секции, он рассчитывает значения внешних символов. Компоновщик пытается установить соответствие между всеми символьными ссылками и символьными значениями. Если для некоторых символьных ссылок не удается подобрать соответствующее внешнее определение, делается попытка найти эти определения в подключенных библиотечных файлах. Если и там нужные определения не найдены, генерируется сообщение об ошибке.
Возможности виртуальных студий
Небесная битва
Эфирное цифровое телевидение: DVB-T
Цифровое телевидение в России