Predavani hodnot mezi asm a C v CCS 550

Josef Štengl ok1ced na nagano.cz
Čtvrtek Leden 22 22:36:32 CET 2015


No bodeď, když adr není instrukce ARMu :-D

ced


Dne 22.1.2015 v 21:02 Pavel Hudeček napsal(a):
> Počet errorů klesl na 1:
>
>   [E0004]
>           Illegal operand
>       adr r1, ble
>
> PH
>
> Od: Tom Meinlschmidt <hw na meinlschmidt.org>
>
>     tipnul bych
>
>     .global ble\n
>     adr r1, ble\n
>
>      > On Jan 22, 2015, at 20:34 , Pavel Hudeček <edizon na seznam.cz> wrote:
>      >
>      > Odhad byl správný, jedná se o arm, konkrétně AM3358.
>      > Překladač Ti v5.1.1
>      > K výsledku to zatím nevede:
>      >
>      > . asm(" .ref ble\n"
>      > . " ldr r1,ble\n"
>      > . " swi #458752\n"
>      > . " mrc p15, #0, r0, c12, c0, #0\n"
>      > . " str [r1], r0\n"
>      > . );
>      >
>      > [W0000]
>      > Defined symbol 'ble' cannot have a .ref
>      > .ref ble
>      >
>      > [E0001]
>      > Address must be defined in the current section
>      > ldr r1,ble
>      >
>      > [E0004]
>      > Illegal operand
>      > ldr r1,ble
>      >
>      > [E0005]
>      > Missing operand(s)
>      > str [r1], r0
>      >
>      > 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.
>      >
>      > Od: Josef Štengl <ok1ced na nagano.cz>
>      >
>      > Správně se zeptat :-)
>      > 1) Cílová platforma/procesor (lépe platforma, než označení čipu)
>      > 2) Překladač který používáte - asm zápisy se různí.
>      >
>      > Pak si najít manuál k překladači. A je - li to Texas, tak popis assembleru bude v jiném manuálu.
>      >
>      > Jinak je to věštění z křišťálové koule (bohužel nemám žádnou funkční ;-).
>      >
>      >
>      > 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
>      > třeba pro C6000, což neznám (jen trochu C2000, mršku jednu proradnou):
>      >
>      > .ref n
>      > ldr r1, n ; adresa do r1
>      > ldr r0, [r1] ; hodnota do r0
>      >
>      > opačně
>      > ldr r1, n ; adresa do r1
>      > str r0, [r1] ; hodnota z r0 do n
>      >
>      > Dne 22.1.2015 v 15:28 Pavel Hudeček napsal(a):
>      > > 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.
>      > >
>      > > 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ý
>      > > překladač. (některé věci ze starterwaru mají dvě verze, jednu v adresáři gcc, druhou v cgt. Pokud první obsahuje
>     asm, tak
>      > > mi obvykle nejde přeložit)
>      > >
>      > > Jak to tedy správně dělat? / Jak se správně ptát?
>
>
>
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
>


Další informace o konferenci Hw-list