<html><body>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:-)<br>(čísla v komentářích jsou přečtené výsledky)<br><br>p32[1]=0x123456;<br>//p32[2]=&bleble;<br>asm(<br>. " swi #458752\n"<br>. " mrc p15, #0, r0, c0, c0, #3\n" // c0, TLB Type Register<br>. " str r0, [v3, #16]\n" // 01202000<br>. " mrc p15, #0, r0, c1, c0, #0\n" // c1, Control Register<br>. " str r0, [v3, #16+4]\n" // 7d18c500<br>. " mrc p15, #0, r0, c1, c1, #2\n" // c1, Nonsecure Access Control Register<br>. " str r0, [v3, #16+8]\n" // 000c0700<br>. " mrc p15, #0, r0, c2, c0, #0\n" // c2, Translation Table Base Register 0<br>. " str r0, [v3, #16+12]\n" // 00400c80<br>. " mrc p15, #0, r0, c2, c0, #1\n" // c2, Translation Table Base Register 1<br>. " str r0, [v3, #16+16]\n" // 0<br>. " mrc p15, #0, r0, c2, c0, #2\n" // c2, Translation Table Base Control Register<br>. " str r0, [v3, #16+20]\n" // 0<br>. " mrc p15, #0, r0, c3, c0, #0\n" // c3, Domain Access Control Register<br>. " str r0, [v3, #16+24]\n" // 55555555<br>. " mrc p15, #0, r0, c5, c0, #0\n" // c5, Data Fault Status Register<br>. " str r0, [v3, #16+28]\n" // 0<br>. " mrc p15, #0, r0, c5, c0, #1\n" // c5, Instruction Fault Status Register<br>. " str r0, [v3, #16+32]\n" // 0<br>. " mrc p15, #0, r0, c6, c0, #0\n" // c6, Data Fault Address Register<br>. " str r0, [v3, #16+36]\n" // 0<br>. " mrc p15, #0, r0, c6, c0, #2\n" // c6, Instruction Fault Address Register<br>. // 0<br>. // c8, TLB operations<br>. " str r0, [v3, #16+40]\n"<br>. " mrc p15, #0, r0, c10, c0, #0\n" // c10, TLB Lockdown Registers - data<br>. " str r0, [v3, #16+44]\n" // 0000c013<br>. " mrc p15, #0, r0, c10, c0, #1\n" // c10, TLB Lockdown Registers - instr<br>. " str r0, [v3, #16+48]\n" // 00000011<br>. " mrc p15, #0, r0, c10, c2, #0\n" // c10, Memory Region Remap Registers - prim<br>. " str r0, [v3, #16+52]\n" // a48a0900<br>. " mrc p15, #0, r0, c10, c2, #1\n" // c10, Memory Region Remap Registers - norm<br>. " str r0, [v3, #16+56]\n" // e048e044<br>. " mrc p15, #0, r0, c13, c0, #0\n" // c13, FCSE PID Register<br>. " str r0, [v3, #16+60]\n" // 0<br>. " mrc p15, #0, r0, c13, c0, #1\n" // c13, Context ID Register<br>. " str r0, [v3, #16+64]\n" // 0<br>);<br>p32[2]=bleble;<br><p><br></p><p>-------------------------------------<br></p><p>a takhle to přeložil:</p><p><br></p><p> LDR V9, $C$CON158 ; [DPU_8_PIPE0] |965| <br> STR V9, [V3, #4] ; [DPU_8_PIPE0] |965| <br> </p><p> swi #458752<br> mrc p15, #0, r0, c0, c0, #3<br> str r0, [v3, #16]<br> mrc p15, #0, r0, c1, c0, #0<br> str r0, [v3, #16+4]<br> mrc p15, #0, r0, c1, c1, #2<br> str r0, [v3, #16+8]<br> mrc p15, #0, r0, c2, c0, #0<br> str r0, [v3, #16+12]<br> mrc p15, #0, r0, c2, c0, #1<br> str r0, [v3, #16+16]<br> mrc p15, #0, r0, c2, c0, #2<br> str r0, [v3, #16+20]<br> mrc p15, #0, r0, c3, c0, #0<br> str r0, [v3, #16+24]<br> mrc p15, #0, r0, c5, c0, #0<br> str r0, [v3, #16+28]<br> mrc p15, #0, r0, c5, c0, #1<br> str r0, [v3, #16+32]<br> mrc p15, #0, r0, c6, c0, #0<br> str r0, [v3, #16+36]<br> mrc p15, #0, r0, c6, c0, #2<br> str r0, [v3, #16+40]<br> mrc p15, #0, r0, c10, c0, #0<br> str r0, [v3, #16+44]<br> mrc p15, #0, r0, c10, c0, #1<br> str r0, [v3, #16+48]<br> mrc p15, #0, r0, c10, c2, #0<br> str r0, [v3, #16+52]<br> mrc p15, #0, r0, c10, c2, #1<br> str r0, [v3, #16+56]<br> mrc p15, #0, r0, c13, c0, #0<br> str r0, [v3, #16+60]<br> mrc p15, #0, r0, c13, c0, #1<br> str r0, [v3, #16+64]</p><p><br></p><p>PH<br></p><p><br></p><p>Od: Josef Štengl <ok1ced@nagano.cz></p><blockquote>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 ... :-(<br>Adr existuje. <br></blockquote><blockquote><br>Dne 23.1.2015 v 15:07 Pavel Hudeček napsal(a):<br>> Zajímavé je, že chybu to hlásilo stejnou s ldr i adr:-)<br>> Asi se dělá kontrola operandů ještě před kontrolou instrukcí.<br>><br>> Od: Josef Štengl <ok1ced@nagano.cz><br>> No bodeď, když adr není instrukce ARMu :-D<br>><br>> Dne 22.1.2015 v 21:02 Pavel Hudeček napsal(a):<br>> > Počet errorů klesl na 1:<br>> ><br>> > [E0004]<br>> > Illegal operand<br>> > adr r1, ble<br>> ><br>> > Od: Tom Meinlschmidt <hw@meinlschmidt.org><br>> > 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<br>> > 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<br>> 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<br>> > 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<br>> > 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>