??? Вопрос по большому массиву (>=32K) в IAR AVR 3.10C (3.10D)
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

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

Отправлено ПВ 05 мая 2004 г. 09:57

Народ, все картошку посадили? Вот напоролся я на глюк - хотелось бы узнать, это у всех так или только у меня? Кто-нибудь знает способ создать большой массив в IAR AVR 3.10, чтобы в этот массив можно было бы явно, напрямую, класть байты по старшим адресам? Компилер сует линкеру отрицательные смещения! Ж8-О. Например:

-Z(DATA)EXTRAM=1100-FFFF (сегмент данных во внешнем ОЗУ Меги128, XCL-файл)

Объявляем массив:

__no_init char IOBuf [60000] @ "EXTRAM";

В основной проге:

IOBuf [0] = 1;
IOBuf [32767] = 1;
IOBuf [32768] = 1;

Получаем:

312 IOBuf [0] = 1;
\ 00000000 E001 LDI R16,1
\ 00000002 9300.... STS IOBuf,R16
313 IOBuf [32767] = 1;
\ 00000006 9300.... STS (IOBuf + 32767),R16
314 IOBuf [32768] = 1;
\ 0000000A 9300.... STS (IOBuf - 32768),R16

Естественно, линкер орет:

Error[e18]: Range error,
Address out of range. Valid range is 0 to 65535 (0xFFFF).
Source: STS (IOBuf - 32768),R16
What: (IOBuf + 0xFFFF8000) [0xFFFF9100]
Allowed range: 0x0 - 0xFFFF
Operand: IOBuf [0xffff9100]

Вот такая, блин, бредятина...
Допустимый диапазон 0-FFFF, компилер же оперирует 32-битными смещениями (ну это понятно - общее процессоронезависимое ядро), путает старшую единицу со знаком и сам на себя ругается.

Вопрос - расслабиться и получать "удовольствие"?
Или есть может какой способ "настроить" компилятор?
(про то, что можно класть косвенно, через указатели, через волятиле, через кардан и выхлопную трубу - я знаю.)

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

Ответы



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

E-mail: info@telesys.ru