Предыдущая Следующая

Примечание. Заданный по умолчанию выходной формат в IDE IAR Embedded Workbench — формат DEBUG, т. е. формат, предназначенный для отладчика.

29.4. Входные файлы и модули

Блочная диаграмма, приведенная на Рис. 29.2, иллюстрирует, как компоновщик IAR XLINK обрабатывает входные файлы и загрузочные модули для типичной программы на ассемблере или C/C++. Как видно из рисунка, основная программа собирается от двух исходных объектных файлов (module_a.snn и moduleJb.snri), чтобы получить два перемещаемых файла, которые включают в себя отдельные модули moduleja и modulejb, соответственно. По умолчанию, ассемблер назначает для модулей modulea и modulejb атрибут PROGRAM. Это означает, что эти модули будут загружаться и компоноваться всякий раз, когда они содержатся в файлах, обрабатываемых компоновщиком IAR XLINK.

Код и данные из единственного исходного файла на C/C++ (library.rnn) образуют отдельный модуль в создаваемом компилятором файле. Другими словами, имеет место взаимно-однозначное соответствие между исходными файлами на C/C++ и модулями C/C++. По умолчанию, компилятор дает этому модулю то же самое имя, что и у оригинального исходного файла на C/C++.

Объектные файлы: module_a.snn

module b.snn

library.rmr

Модули:

module_a (PROGRAM)

module_b (PROGRAM)

module с (PROGRAM)

module_d (LIBRARY)

module_e (LIBRARY)

module_f (LIBRARY)

Универсальный компоновщик XLINK

Абсолютный исполняемый объектный файл

Рис. 29.2. Блок-схема обработки IAR XLINK входных файлов и загрузочных модулей

Библиотеки для множества модулей C/C++ могут быть созданы с использованием построителя библиотек IAR XAR Library Builder™ или набора библиотек IARXLIB Librarian™.

Ассемблерные программы могут быть написаны таким образом, чтобы каждый отдельный исходный файл содержал множество модулей, как модулей программы, так и библиотечных.

29.4.1. Библиотеки

В изображенной на Рис. 29.2 блочной диаграмме, файл library.rnn состоит из некоторого множества (на рисунке — четырех) модулей, каждый из которых, возможно, является результатом работы ассемблера или компилятора. Модуль module_c будет загружаться всякий раз, когда файл library.rnn окажется в числе входных файлов компоновщика. Этот модуль запуска библиотек cstartup имеет атрибут PROGRAM, вследствие чего всегда подключается при компоновке проекта на C/C++. Подобный модуль обязательно входит в состав всех программ на C/C++.

Остальные модули в файле library.rnn имеют атрибут LIBRARY, т. е. являются библиотечными модулями. Библиотечные модули загружаются только в том случае, когда они содержат входы (функции, переменные или другие символы, объявленные как PUBLIC), на которые каким-то способом ссылаются другие загруженные модули. Например, если на входы, содержащиеся в module_e, нет ссылок ни в каком из уже загруженных модулей, modulee загружен не будет.

Необходимо отметить, что библиотечный файл является перемещаемым объектным файлом и не имеет принципиальных отличий от перемещаемых объектных файлов, содержащих программы. Атрибуты LIBRARYh PROGRAM, которые имеют эти файлы, лишь определяют условия их загрузки в компоновщик.


Предыдущая Следующая






Warning: include(./news.php) [function.include]: failed to open stream: No such file or directory in /var/www/picprof/data/www/picprof.com/book/book4_270.html on line 138

Warning: include(./news.php) [function.include]: failed to open stream: No such file or directory in /var/www/picprof/data/www/picprof.com/book/book4_270.html on line 138

Warning: include() [function.include]: Failed opening './news.php' for inclusion (include_path='.:/usr/share/pear:/usr/share/php') in /var/www/picprof/data/www/picprof.com/book/book4_270.html on line 138