Predavani hodnot mezi asm a C v CCS 550

Pavel Hudeček edizon na seznam.cz
Pátek Leden 23 15:07:13 CET 2015


Zajímavé je, že chybu to hlásilo stejnou s ldr i adr:-)
Asi se dělá kontrola operandů ještě před kontrolou instrukcí.

PH


Od: Josef Štengl <ok1ced na nagano.cz>

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

Dne 22.1.2015 v 21:02 Pavel Hudeček napsal(a):
> Počet errorů klesl na 1:
>
> [E0004]
> Illegal operand
> adr r1, ble
>
> 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?"
------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20150123/1218242b/attachment.html>


Další informace o konferenci Hw-list