Inline assembler

Ahoj nadlidi, mám prosbu…tento kód:

asm("movw r9, #0xE000");  
asm("movt r9, #0x0800");

dělá to co bych chtěl, ale potřeboval bych předat hodnoty z Cčka. Zkusil jsem něco jako:

uint32_t Index1 = 0xE000;
uint32_t Index2 = 0x0800;

asm volatile(
    "movw r9, %[value1]\n\t"
    "movt r9, %[value2]\n\t"
    :: [value1] "r" (Index1), [value2] "r" (Index2)
    );   

ale překladači se to nelíbí s chybou:

Error: constant expression expected -- `movw r9,r3'
Error: constant expression expected -- `movt r9,r2'

nedokáže někdo poradit kde je problém? Dík

GCC ? To bych se raději šel zastřelit než toto :wink: Bohužel neporadím…

No já jsem to nakonec obešel jinak, ale tohle mi furt vrtá hlavou.

Funguje to takto:

register uint32_t adr asm("r3") = 0x0800E000;
    
asm volatile("mov r9, r3" :: "r" (adr)); 

Ještě bych potřeboval upravit ld script, ale to už je jiná písnička…
L.