<html><body>Zajímavé je, že chybu to hlásilo stejnou s ldr i adr:-)<br>Asi se dělá kontrola operandů ještě před kontrolou instrukcí.<br><br>PH<br><br><p>Od: Josef Štengl <ok1ced@nagano.cz><br></p><blockquote>No bodeď, když adr není instrukce ARMu :-D<br><br>Dne 22.1.2015 v 21:02 Pavel Hudeček napsal(a):<br>> Počet errorů klesl na 1:<br>><br>> [E0004]<br>> Illegal operand<br>> adr r1, ble<br>><br>> Od: Tom Meinlschmidt <hw@meinlschmidt.org><br>> tipnul bych<br>><br>> .global ble\n<br>> adr r1, ble\n<br>><br>> > On Jan 22, 2015, at 20:34 , Pavel Hudeček <edizon@seznam.cz> wrote:<br>> ><br>> > Odhad byl správný, jedná se o arm, konkrétně AM3358.<br>> > Překladač Ti v5.1.1<br>> > K výsledku to zatím nevede:<br>> ><br>> > . asm(" .ref ble\n"<br>> > . " ldr r1,ble\n"<br>> > . " swi #458752\n"<br>> > . " mrc p15, #0, r0, c12, c0, #0\n"<br>> > . " str [r1], r0\n"<br>> > . );<br>> ><br>> > [W0000]<br>> > Defined symbol 'ble' cannot have a .ref<br>> > .ref ble<br>> ><br>> > [E0001]<br>> > Address must be defined in the current section<br>> > ldr r1,ble<br>> ><br>> > [E0004]<br>> > Illegal operand<br>> > ldr r1,ble<br>> ><br>> > [E0005]<br>> > Missing operand(s)<br>> > str [r1], r0<br>> ><br>> > ble je globální proměnná typu uint32_t. Když jsem ji ještě navíc udělal static, zmizel první warning, ale zbytek<br>> zůstal. Lokální static i nestatic též jen s errory.<br>> ><br>> > Od: Josef Štengl <ok1ced@nagano.cz><br>> ><br>> > Správně se zeptat :-)<br>> > 1) Cílová platforma/procesor (lépe platforma, než označení čipu)<br>> > 2) Překladač který používáte - asm zápisy se různí.<br>> ><br>> > Pak si najít manuál k překladači. A je - li to Texas, tak popis assembleru bude v jiném manuálu.<br>> ><br>> > Jinak je to věštění z křišťálové koule (bohužel nemám žádnou funkční ;-).<br>> ><br>> ><br>> > Z hlavy střelím jen možnost pro ARM a ti překladač. Ale vzhledem k tomu, že pojem ctg mi nic neříká, tak to můžete být<br>> > třeba pro C6000, což neznám (jen trochu C2000, mršku jednu proradnou):<br>> ><br>> > .ref n<br>> > ldr r1, n ; adresa do r1<br>> > ldr r0, [r1] ; hodnota do r0<br>> ><br>> > opačně<br>> > ldr r1, n ; adresa do r1<br>> > str r0, [r1] ; hodnota z r0 do n<br>> ><br>> > Dne 22.1.2015 v 15:28 Pavel Hudeček napsal(a):<br>> > > mám proměnnou n, která obsahuje 32b unsigned int a chtěl bych ji dostat do registru r0. Jindy zas potřebuji<br>> opačný přenos.<br>> > ><br>> > > Při gůglení jsem našel, že by to v gcc mělo jít takto: mov r0,n. Jenže tak to nejde, takže se tu asi používá jiný<br>> > > překladač. (některé věci ze starterwaru mají dvě verze, jednu v adresáři gcc, druhou v cgt. Pokud první obsahuje<br>> asm, tak<br>> > > mi obvykle nejde přeložit)<br>> > ><br>> > > Jak to tedy správně dělat? / Jak se správně ptát?</blockquote></body></html>