Predavani hodnot mezi asm a C v CCS 550

Pavel Hudeček edizon na seznam.cz
Čtvrtek Leden 22 20:38:41 CET 2015


Protože to tak bylo implicitně nastaveno a teď vede změna k mnoha errorům.

PH

Od: Jaroslav Buchta <jaroslav.buchta na hascomp.cz>
"

Proc vlastne pouzivate TI prekladac a ne GCC? Jen se ptam, taky neco planuji
s temito procesory a zatim resim jen HW...
Ja CCS studio kdysi pouzil pro nejake DSP a nejak jsem dosel k nazoru, ze 
toto uz nikdy vice, ale je to uz par let.

Dne 22. 1. 2015 v 20:34 Pavel Hudeček napsal(a):

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

PH




Od: Josef Štengl <ok1ced na nagano.cz>(mailto: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

ced




Dne 22.1.2015 v 15:28 Pavel Hudeček napsal(a):
> Dobrý den všem,
> 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/20150122/9badc7d5/attachment.html>


Další informace o konferenci Hw-list