Всем доброго дня
Поставил IAR EWARM 7.4 для ARM, (STM32F407VG)
uint32_t PD12;
Команда
PD12 = 0x42020C48;
вызывает зависание (возможно прерывание, но векторы пока не настроены)
причем в симуляторе все нормально.
ARM ассемблер пока не очень знаю, но код генирируемый для симуляторе и ST-LINK для этой инструкции разный!
Я понял что есть ограничения на immediate для LDR,
ну тогда хорошо, думаю раз процессор поддерживет ARMv7
используем mov
Код:
|
__asm("mov r0,#0x0C48\n"
"movt r0,#0x4202"); |
и второй вариант (прямо из EWARM Dev Guide)
Код:
|
int Mov32()
{
unsigned int a;
asm("movw %0,%L1 \n"
"movt %0,%H1 \n" : "=r"(a) : "i"(0x12345678UL));
return a;
} |
Для обоих вариант компилятор генерирует все равно код с использованием LDR
которые все равно дает хрень на выходе.
Тип процессора стоит Cortex-M4 или STM32F407VG.
Когда ставлю дебаггер target Simulator
он генерирует код с использованием MOV
который дает нормальный результат.
Кто нибудь понимает в чем дело?
P.S.
Сейчас попробую Keil
==
===
В Keil все нормально, единственное, при запуске debug (Ctrl-F5), при изменении кода он автоматически не перекомпилирует и загружает во флэш.