Ответ: вот кусок из описания на один из самых старых версий IAR. В основном так и сейчас. Но хорошо также почитать доки на современный XLINK IAR
(«Телесистемы»: «Конференция «Микроконтроллеры и их применение»»)

миниатюрный аудио-видеорекордер mAVR

Отправлено TQFP 26 апреля 2003 г. 20:45
В ответ на: Ответ: А что можно еще почитать на эту тему кроме Атмеловского апнота. отправлено back 26 апреля 2003 г. 19:01

-Z[(<тип>)]<сегмент(ы)>

Определяет сегменты.

Синтаксис этой опции:

-Z[(<тип)>]<список сегментов>[<тип размещения>][список диапазонов]

(<тип>) необязателен (см.3.5).
В <списке сегментов> имена сегментов разделяются запятыми. Сегменты размещаются
в порядке их следования в списке. Присоединение "+nn" к имени сегмента вызывает
увеличение отведенной под него памяти на nn байт. Например, "CODE+100" увеличит
отведенную под сегмент CODE память на 100 байт (шестнадцатиричное).
<тип размещения> необязателен, и может быть "=" или "#".
"=" размещает сегменты, начиная с начальных адресов в диапазонах,
"#" размещает сегменты, заканчивая конечными адресами в диапазонах.
Диапазон не обязателен и определяет адреса, в которых будут размещаться
сегменты. В списке диапазонов указываются одиночные адреса или диапазоны
(число-число), разделенные запятыми. Короткий пример:
-Z(UNTYPED) SEGA, SEGB=100-200, 400-700, 1000
SEGA и SEGB - сегменты типа UNTYPED. SEGA будет размещен между адресами 100 и
200, если поместится или в адресах 400 - 700. Если SEGA не помещается ни в один
из этих диапазонов, он будет размещен с адреса 1000. SEGB будет размещен по тем
же правилам, но обязательно после SEGA (в более старших адресах). См.3.5.

-r[<символ>]
Поместить в выходной файл отладочную информацию. Подробнее см. описание
отладчика. Указание ключа -r подавляет указанный опцией -F формат выходного
файла.
-e<символ 1>=<символ 2>,<символ 3>,...
Заменяет внешние символические имена. Все символы с именами <символ 2>,
<символ 3>... переименовываются в <символ 1>. Очень полезно для целей
конфигурации, так как позволяет перенаправить вызов одной функции на другую
функцию, а также для отладки программ, так как ссылки к неопределенным еще
функциям можно перенаправить к какой-либо одной "пустой" функции.
Параметр
-e smallprintf = printf
заменит вызовы printf вызовами smallprintf.

3.5. Определение сегментов

Полный синтаксис ключа -Z:
-Z<(тип)> <список сегментов> - размещение по первому
сегменту

-Z<(тип)> <список сегментов>=<определение памяти> - размещение в младших
адресах
-Z<(тип)> <список сегментов> = <определение памяти> - размещение в старших
адресах

<(тип)> указывает тип всех сегментов, определяемых данным ключом -Z.

Тип может быть следующим:

CODE - коды программы (ПЗУ)
DATA - данные
UNTYPED - используется по умолчанию, если (<тип>) не указан
XDATA - данные во внешнем ОЗУ
IDATA - данные во встроенном ОЗУ
BIT - битовые данные

<список сегментов> имеет следующий синтаксис:

<сегмент> <+приращение>, <сегмент> <+приращение>,...

Заметим, что порядок перечисления сегментов в списке определяет порядок их
загрузки.
<Приращение> (необязательное) определяет количество байт, дополнительно
присоединяемое к концу сегмента (по умолчанию значение шестнадцатиричное).
<определение памяти> или список диапазонов - это набор диапазонов и/или
начальных адресов, в которых размещаются сегменты.
Диапазон определяется как

<начальный адрес>-<конечный адрес>

Примеры:
размещение в младших адресах:

-ZSEGA,SEGB+10,SEGC+10=10-50,60

Увеличить размер сегментов SEGB и SEGC на 10h байт каждый. Если SEGA поместится
в память с адреса 10h по адрес 50h, он будет размещен в этой области, иначе он
будет размещен с адреса 60h. Затем линкер пытается разместить сегменты SEGB и
SEGC, начиная с SEGB. Когда размещение завершено, сегменты будут расположены в
таком порядке: SEGA, затем SEGB, и в самых старших адресах - SEGC.

Размещение в старших адресах:

-ZSEGA, SEGB, SEGC#10-50,90

SEGA, если уместится, будет размещен в диапазоне 10h - 50h, заканчивая
адресом 50h. Если не уместится, SEGA будет заканчиваться адресом 90h. Затем
будут размещены SEGB и SEGC, причем SEGB размещается перед SEGA (в более младших
адресах), а SEGC - перед SEGB.
Если диапазон адресов слишком мал, генерируется ошибка "сегмент <сегмент>
перекрывает сегмент <сегмент>".
SEGA будет размещен в более старших адресах, чем SEGB, а SEGB - в более
старших адресах, чем SEGC.

Приоритетное размещение:

-ZSEGA,SEGB+10,SEGC+10
-ZSEGB,SEGD=1000

Увеличить SEGB и SEGC на 10h. Сначала разместить SEGA, затем SEGB и SEGD,
начиная с адреса 1000h. Затем, в самых старших адресах, разместить SEGC.


Составить ответ ||| Конференция ||| Архив

Ответы



Перейти к списку ответов ||| Конференция ||| Архив ||| Главная страница ||| Содержание

E-mail: info@telesys.ru