Predavani hodnot mezi asm a C v CCS 550
Pavel Hudeček
edizon na seznam.cz
Pátek Leden 23 20:50:26 CET 2015
Protože se jedná o pokus, stačilo provizorní řešení: Podívat se, jak ukládá
hodnoty do pole a pak prostě mezi jeho přístupy k poli umístit svoje:-)
(čísla v komentářích jsou přečtené výsledky)
p32[1]=0x123456;
//p32[2]=&bleble;
asm(
. " swi #458752\n"
. " mrc p15, #0, r0, c0, c0, #3\n" // c0, TLB Type Register
. " str r0, [v3, #16]\n" // 01202000
. " mrc p15, #0, r0, c1, c0, #0\n" // c1, Control Register
. " str r0, [v3, #16+4]\n" // 7d18c500
. " mrc p15, #0, r0, c1, c1, #2\n" // c1, Nonsecure Access Control
Register
. " str r0, [v3, #16+8]\n" // 000c0700
. " mrc p15, #0, r0, c2, c0, #0\n" // c2, Translation Table Base Register
0
. " str r0, [v3, #16+12]\n" // 00400c80
. " mrc p15, #0, r0, c2, c0, #1\n" // c2, Translation Table Base
Register 1
. " str r0, [v3, #16+16]\n" // 0
. " mrc p15, #0, r0, c2, c0, #2\n" // c2, Translation Table Base Control
Register
. " str r0, [v3, #16+20]\n" // 0
. " mrc p15, #0, r0, c3, c0, #0\n" // c3, Domain Access Control Register
. " str r0, [v3, #16+24]\n" // 55555555
. " mrc p15, #0, r0, c5, c0, #0\n" // c5, Data Fault Status Register
. " str r0, [v3, #16+28]\n" // 0
. " mrc p15, #0, r0, c5, c0, #1\n" // c5, Instruction Fault Status
Register
. " str r0, [v3, #16+32]\n" // 0
. " mrc p15, #0, r0, c6, c0, #0\n" // c6, Data Fault Address Register
. " str r0, [v3, #16+36]\n" // 0
. " mrc p15, #0, r0, c6, c0, #2\n" // c6, Instruction Fault Address
Register
. // 0
. // c8, TLB operations
. " str r0, [v3, #16+40]\n"
. " mrc p15, #0, r0, c10, c0, #0\n" // c10, TLB Lockdown Registers - data
. " str r0, [v3, #16+44]\n" // 0000c013
. " mrc p15, #0, r0, c10, c0, #1\n" // c10, TLB Lockdown Registers - instr
. " str r0, [v3, #16+48]\n" // 00000011
. " mrc p15, #0, r0, c10, c2, #0\n" // c10, Memory Region Remap Registers
- prim
. " str r0, [v3, #16+52]\n" // a48a0900
. " mrc p15, #0, r0, c10, c2, #1\n" // c10, Memory Region Remap Registers
- norm
. " str r0, [v3, #16+56]\n" // e048e044
. " mrc p15, #0, r0, c13, c0, #0\n" // c13, FCSE PID Register
. " str r0, [v3, #16+60]\n" // 0
. " mrc p15, #0, r0, c13, c0, #1\n" // c13, Context ID Register
. " str r0, [v3, #16+64]\n" // 0
);
p32[2]=bleble;
-------------------------------------
a takhle to přeložil:
LDR V9, $C$CON158 ; [DPU_8_PIPE0] |965|
STR V9, [V3, #4] ; [DPU_8_PIPE0] |965|
swi #458752
mrc p15, #0, r0, c0, c0, #3
str r0, [v3, #16]
mrc p15, #0, r0, c1, c0, #0
str r0, [v3, #16+4]
mrc p15, #0, r0, c1, c1, #2
str r0, [v3, #16+8]
mrc p15, #0, r0, c2, c0, #0
str r0, [v3, #16+12]
mrc p15, #0, r0, c2, c0, #1
str r0, [v3, #16+16]
mrc p15, #0, r0, c2, c0, #2
str r0, [v3, #16+20]
mrc p15, #0, r0, c3, c0, #0
str r0, [v3, #16+24]
mrc p15, #0, r0, c5, c0, #0
str r0, [v3, #16+28]
mrc p15, #0, r0, c5, c0, #1
str r0, [v3, #16+32]
mrc p15, #0, r0, c6, c0, #0
str r0, [v3, #16+36]
mrc p15, #0, r0, c6, c0, #2
str r0, [v3, #16+40]
mrc p15, #0, r0, c10, c0, #0
str r0, [v3, #16+44]
mrc p15, #0, r0, c10, c0, #1
str r0, [v3, #16+48]
mrc p15, #0, r0, c10, c2, #0
str r0, [v3, #16+52]
mrc p15, #0, r0, c10, c2, #1
str r0, [v3, #16+56]
mrc p15, #0, r0, c13, c0, #0
str r0, [v3, #16+60]
mrc p15, #0, r0, c13, c0, #1
str r0, [v3, #16+64]
PH
Od: Josef Štengl <ok1ced na nagano.cz>
"Hmm. Že posílám maily s chybným obsahem to vím, ale že i ty co jsem
nechtěl, protože mi došlo že píši kraviny ... :-(
Adr existuje.
""
Dne 23.1.2015 v 15:07 Pavel Hudeček napsal(a):
> 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í.
>
> 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/fb93b027/attachment.html>
Další informace o konferenci Hw-list