<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>