[elektro] 8bit->32bit
Ábrahám Gábor
agabor2 at freemail.hu
Wed May 8 05:54:47 CEST 2013
A bitmező definit módón implementáció függő,
ezért legjobb nem használni. Én inkább írok makrókészlet
set_valami(x) x |= (1<<5);
clr_valami(x) x &= ~(1<<5);
inv_valami(x) x ^= (1<<5);
is_valami(x) (x & (1<<5))
Ha megnézel egy hálózati software forrást
pl. egy IP protokollét, mindenütt htonl() , htons(), illetve
ntohl(), ntohs() és hasonló makrókkal konvertálnak
hoszt és hálózati bájtsorrend között. A makrók persze
fordítástól függően üresek, ha az adott környezetben nincs szükség
konverzióra.
További ötletek:
Writing endian-independent code in C
<http://www.ibm.com/developerworks/aix/library/au-endianc/>
Időtlen időkkel ezelőtt felmerült, hogy kell csinálni egy terminált,
ahol az X11 a grafikus kártyán fut. Akkor sokat olvasgattam az
X forrását. Nagyon tanulságos.
A make először lefordít egy kis programot. kb :
main()
{
int x = 1;
if (*(char *)&x == 1)
printf ("#define little-endian\t1");
else
printf("#define little-endian\t0");
}
Ezt lefuttatja és beleirányítja az endian.h nevű file-ba.
Ez aztán szerepel mindenhol.
Indiánságon kívül remek szívási lehetőség az alignmnet és a
packed, unpacked struktúrák.
<http://en.wikipedia.org/wiki/Data_structure_alignment>
Szép feladat az eredetileg gépfüggőre írt kód portolása.
Crash-ről crash-re, ahogy a kollégám mondta.
Vannak átkapcsolható CPU-k, amik tudják a kicsit is, meg a nagyot is (az
XScale pl.).
Na ezzel lehet igazán nagyot szívni.
Gábor
----- Eredeti üzenet -----
From: Fuzesi Arnold
Sent: Tuesday, May 07, 2013 10:55 PM
To: elektro at tesla.hu
Subject: [elektro] 8bit->32bit
portolnom kellene AVR-rol ARM-re egy böszme kódot.
Nagyjabol látom mik a buktatók, de szivesen veszek tanacsot, ha valakinek
van
keznel, mire kell nagyon figyelni, ami nem trivialis feltetlen.
Elso korben a bitmező union stb hogyan is alakul? Ha jol remlik ez pl
"cikis"
kategoria...
A jobbra-balra igazitas fordito fuggo, vagy definit?
A lentit lehet úgy írni, hogy "portable" legyen ha nem definit?
pl:
union{
struct{
ulong in1_act :1; //LSB
ulong in1_res :1;
ulong in2_act :1;
ulong in2_res :1;
ulong in3_act :1;
ulong in3_res :1;
ulong in4_act :1;
ulong in4_res :1;
ulong sw_act :1;
ulong sw_res :1;
ulong auto_test_act :1;
ulong auto_test_res :1;
ulong Vin_err_act :1;
ulong Vin_err_res :1;
ulong tmp1_err_act :1;
ulong tmp1_err_res :1;
ulong tmp1_low_act :1;
ulong tmp1_low_res :1;
ulong tmp1_high_act :1;
ulong tmp1_high_res :1;
ulong tmp2_err_act :1;
ulong tmp2_err_res :1;
ulong tmp2_low_act :1;
ulong tmp2_low_res :1;
ulong tmp2_high_act :1;
ulong tmp2_high_res :1; //MSB
}b;
ulong W;
}flag_gprs;
köszi,
A.
-----------------------------------------
elektro[-flame|-etc]
-----
A(z) üzenetben nem található vírus.
Ellenőrizte: AVG - www.avg.com
Verzió: 2013.0.2904 / Vírus adatbázis: 3162/6272 - Kiadás dátuma:
2013.04.25.
A belső Vírusadatbázis elavult.
More information about the Elektro
mailing list