Eliseev (12.10.2004 18:44, просмотров: 889)
вопрос по ассемблеру у меня перед запуском сишного 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, т.е. ссылка ведёт как бы назад.