[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