<html><body>Počet errorů klesl na 1:<br><br> [E0004]<br>         Illegal operand<br>     adr r1, ble<br><br>PH<br><br><p>Od: Tom Meinlschmidt <hw@meinlschmidt.org><br></p><blockquote>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 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 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 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>