Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Metoda_beta2_8.doc
Скачиваний:
5
Добавлен:
16.11.2019
Размер:
838.66 Кб
Скачать

3. Рекомендуемый путь и этапы создания проекта в vdsp

3.1 Пример и описание .Ldf файла

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

Ниже приведён перечень основных команд и директив, используемых в LDF.

ARCHITECTURE() – определение типа процессора.

MAP() – определение выходного файла карты памяти.

MEMORY {} – определение карты памяти. Оно должно соответствовать типу процессора, указанного командой ARCHITECTURE. После того, как объявлены имена сегментов памяти с помощью этой команды, компоновщик может использовать их для размещения разделов программы в памяти через команду SECTIONS {}. Нет ограничений на число объявляемых сегментов и на длину имени раздела. Длина имени сегмента ограничена восьмью символами. Если не определена карта памяти процессора, компоновщик не может скомпоновать вашу программу. Если объединенные разделы требуют большего объема памяти, чем определено в сегменте, компоновщик выдаёт сообщение об ошибках и останавливает компоновку.

Синтаксис команды:

MEMORY

{

имя_сегмента {TYPE(тип_памяти) START(начальный_адрес_сегмента) LENGTH(длина_сегмента)| END(конечный_адрес_сегмента) WIDTH(разрядность_сегмента) }

………

}

Здесь:

| - знак альтернативы;

тип_памяти = DM|PM RAM|ROM|PORT;

START+LENGTH=END;

DM – память данных;

PM – программная память;

IOM – память ввода-вывода;

ROM – ПЗУ;

RAM – ОЗУ;

PORT – порт.

$LIBRARIES и $OBJECTSмакроопределения, получающие объектный (.DOJ) и библиотечный (.DLB) файл на входе.

LINK_AGAINST()проверка компоновщиком указанных исполняемых программ (.DXE и .SM) для разрешения переменных и меток, которые не были разрешены локально. Эта команда должна присутствовать в LDF при компоновке мультипроцессорных программ.

PROCESSOR {} - объявление процессора и соответствующей ему информации. Инструкция PROCESSOR {} содержит команды MEMORY {}, SECTIONS {} и другие команды компоновщика, которые применяются только к данному процессору. Если не определён тип процессора инструкцией PROCESSOR {}, компоновщик не сможет скомпоновать вашу программу.

OUTPUT()определение выходного исполняемого файла (.DXE), должно предшествовать команде SECTIONS {}.

SECTIONS {}команда, определяющая место программных разделов выходного файла для данного процессора. Этот файл использует определения памяти. Команда SECTIONS{} определяет размещение разделов программы в памяти, используя сегменты, определенные командой MEMORY {}, и включает в себя описания (определения разделов и выражения).

Синтаксис определения разделов (символы “[“, “]” при определении разделов не печатаются):

имя_раздела [тип_раздела ] {команды_раздела} [ > сегмент_памяти ]

Одной из команд раздела является команда INPUT_SECTIONS(), определяющая раздел.

Её синтаксис:

INPUT_SECTIONS(исходный_файл часть_архива(входные_метки)])

Здесь:

исходный_файл – макроопределение типа $COMMAND_LINE_OBJECTS или список файлов;

часть_архива – этот параметр вместе с левой и правой скобками [ ] используется, в случае если, исходный файл с входной меткой является архивом;

входные_метки – входные метки раздела, берутся из имён раздела (директива .SECTION) ассемблерной программы.

MEMORY_SIZEOF()размер в словах сегмента памяти, имя которого указано в скобках.

(.) –счётчик текущего расположения, то есть текущего адреса.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]