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