вопрос по АРМэовскому ассембюлру
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

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

Отправлено Eliseev 12 октября 2004 г. 18:42

у меня перед запуском сишного main'а есть небольшая инициализация на ассемблере.
чтобы перейти на main в этом ассемблерном файле стоит инструкция
b main
так вот. если я линкеру указываю, чтобы функцию main засунул в тот же сегмент что и инициализационный ассемблерный код, то всё линкуется замечательно. а если пытаюсь записывать main в область

SDRAM, то линкер ругается
Error[e18]: Range error,
Where $ = initialization_start + 0x5C [0x1000015C]
in module "init" (D:\Work\Projects\IAR_loader\Debug\Obj\s3c44b0x_init.r79),
offset 0x5C in segment part 1, segment ICODE
What: 0xEB000000 | main - ($ + 8) >> 2 & 0xFFFFFF [0xFBFFFE9C]
Allowed range: 0xFDFFFFFC - 0x2000000

в xlink.pdf написано, что это из-за того что переход слишком длинный. И там совет даётся сделать переход как-нить по-другому.
Подскажите, плиз, как можно в другой сегмент перейти, чтобы линкер не ругался. SDRAM у меня внешняя, с адреса 0XC000000, а инициализационный код во внутренней памяти проца. Это начиная с адреса 0x10000000, т.е. ссылка ведёт как бы назад.

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

Ответы



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

E-mail: info@telesys.ru