реклама на сайте
подробности

 
 
> Ошибка в программировании..., Help
ASergej_R19
сообщение Mar 22 2008, 14:22
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 86
Регистрация: 5-02-07
Из: Москва
Пользователь №: 25 060



Пишу программу под ARM (LPC2292). Пишу основную часть на Си и часть функций идет на асме.
Проблема вот в чем:
в С-коде объявляю переменную "int Flag;", а потом в асме, пытаюсь что-нибудь загрузить из этой переменной. "EXTERN Flag", а потом внутри асм-кода "LDR R4, Flag". В результате линковщик выдает ошибку:

Error[e18]: Range error, Expression out of range
Where $ = Function + 0xC [0x80DC]
in module "AsmCodes" (C:\AsmCode.r79),
offset 0xC in segment part 0, segment CODE
What: Flag - ($ + 8) [0xF7FE4]
Allowed range: 0xFFFFF001 - 0x1000
Operand: Flag [0x1000c8]
in module TestARM (C:\TestARM.r79),
Offset 0x0 in segment part 7, segment DATA_Z

Где TestARM - файл с C-кодом, где объявлена переменная Flag. AsmCode - файл с асм-кодом, где я пытаюсь что-нибудь считать из переменной Flag.

Объясните пожаласт - что это такое? Как правильно выкручиваться из таких ситуаций?

P.S. пишу на IAR...
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
aaarrr
сообщение Mar 22 2008, 14:53
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Правильно "выкрутится" так:
Код
    EXTERN Flag

    ldr    r4, =Flag  ; Адрес переменной Flag
    ldr    r4, [r4]   ; Чтение переменной
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 22:35
Рейтинг@Mail.ru


Страница сгенерированна за 0.01331 секунд с 7
ELECTRONIX ©2004-2016