Помощь
-
Поиск
-
Пользователи
-
Календарь
Полная версия этой страницы:
Как бы по-правильному вытащить текущий адрес (PC) в сишный код?
Форум разработчиков электроники ELECTRONIX.ru
>
Микроконтроллеры (MCs)
>
ARM
abcdefg
Dec 4 2006, 17:40
В целях отладки пытаюсь добавить диагностику места возникновения ошибки следующим макросов:
#define RaiseErr(aErrCode, aExtCode) \
{ \
extern unsigned long E_LastErrAdr; \
__asm { LDR E_LastErrAdr, PC }; \
printf (" error address: %lu\n", E_LastErrAdr); \
}
компиляция не проходит
Подскажите работающий вариант...
aaarrr
Dec 4 2006, 17:46
А если так попробовать:
Код
#define RaiseErr(aErrCode, aExtCode) \
{ \
extern unsigned long E_LastErrAdr; \
unsigned long x; \
__asm { mov x, pc }; \
E_LastErrAdr = x; \
printf (" error address: %lu\n", E_LastErrAdr); \
}
А то LDR E_LastErrAdr, PC - это уж совсем неправильно.
abcdefg
Dec 4 2006, 17:48
Цитата(aaarrr @ Dec 4 2006, 17:46)
А если так попробовать:
Всё равно орет "error C197: inline-asm: Syntax error"
aaarrr
Dec 4 2006, 18:17
Тогда попробуйте
mov x, r15
или
ldr r0, =E_LastErrAdr
str r15, [r0]
abcdefg
Dec 4 2006, 18:27
Заработало! (с)Матроскин
Спасибки!
Цитата(aaarrr @ Dec 4 2006, 18:17)
Тогда попробуйте
mov x, r15
или
ldr r0, =E_LastErrAdr
str r15, [r0]
abcdefg
Dec 5 2006, 16:33
В догонку, почему то keil игнорирует строки (кроме первой) конструкции:
__asm
{
.............
.............
}
пришлось для каждой строки отдельно __asm { ........ } указывать.
конечный вариант:
extern unsigned long E_LastErrAdr; \
__asm { ldr r6, =E_LastErrAdr; } \
__asm { add r7, pc, #0; } \
__asm { str r7, [r6, #0x00]; } \
printf (" error address = 0x%08lx", E_LastErrAdr); \
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке
.
Invision Power Board © 2001-2025
Invision Power Services, Inc.