LITTLE_ENDIAN czy BIG_ENDIAN ???

May 25, 2004 4 Replies

Witam



Pytanie jak w temacie. Konkretnie chodzi mi o PC i mikroprocki takie jak AVR, 8051, motorolki. Który jak ma te bity u³o¿one - gdzie najstarszy bit w poszczególnych prockach? Wysy³am ca³e struktury (z polami bitowymi) danych szeregowo (po RS232 i po SPI ) i chcia³bym wiedziec jak to powinno byæ. Pytanie dotyczy takze kolejno¶ci bajtów w s³owie 16 lub 32 bit. Czy to zale¿y takze od kompilatora C ? Dzieki za wszelkie odpowiedzi. jfk



U¿ytkownik "jfk" snipped-for-privacy@poczta.fm napisa³ w wiadomo¶ci news:c8v7hd$mkn$ snipped-for-privacy@inews.gazeta.pl...

na PC'cie jest LITTLE ENDIAN

na prockach 8-bit owych to zalezy od kompilatora

KIEL na 8051 ma BIG ENDIAN a avr-gcc ma LITTLE

U¿ytkownik "jfk" snipped-for-privacy@poczta.fm napisa³ w wiadomo¶ci news:c8v7hd$mkn$ snipped-for-privacy@inews.gazeta.pl...

po RS zaraz za bitem START leci najmlodszy bit (LSB)

po SPI jest konfigurowalne w AVR'ach bit DORD, po resecie jest DODR = 0 czyli MSB fist

'51 jest dziwny :-)

adresy zaszyte w programie sa BE - Mov dptr,#..., Lcall, Ljmp. Ale juz DPTR w rejestrach jest polozony jak LE [DPL 82, DPH 83). CALL adresy na stos wrzuca LE.

Przy czym jest to praktycznie czysto 8-bit procesor, wiec kompilator moze zastosowac dowolna konwencje ... no brak instrukcji DEC dptr utrudnia operowanie na BE w XRAM.

Ale juz w takim 8080 czy Z80 - tylko LE.

J.

Jądro ARM ma endianess wybieralny, ale już konkretne implementacje mogą tą swobodę ograniczać. Najczęściej (np. w ARMach Atmela) jest to little endian (LSB first) i tak to widzi kompilator gcc. Podobnie jest w gcc-avr - też little endian (tzn. gdy np. słowo 32-bitowe leży w pamięci to najniższy adres zajmuje jego najmłodszy bajt).

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required