반응형

Little-Endian / Big-Endian

 

여태까지 Little-Endian에 익숙해져 있다가,
PowerPC 계열의 440 Core를 쓰면서 Big-Endian을 써보게 되었다.
특별히 고생은 안했지만, 비트를 계산할때 햇갈림은 어쩔수 없는가 보다.

 

little-endian bit 순서
+--+--+--+--+--+--+--+--+---------+--+--+--+--+--+--+--+--+
|31|30|29|28|27|26|25|24|     ~~    |07|06|05|04|03|02|01|00|
+--+--+--+--+--+--+--+--+---------+--+--+--+--+--+--+--+--+

big-endian bit 순서
+--+--+--+--+--+--+--+--+---------+--+--+--+--+--+--+--+--+
|00|01|02|03|04|05|06|07|     ~~    |24|25|26|27|28|29|30|31|
+--+--+--+--+--+--+--+--+---------+--+--+--+--+--+--+--+--+

 

0x11223344 DWORD 데이터 저장 순서
 little-endian   : 0x44[0] 0x33[1] 0x22[2] 0x11[3]
 big-endian    : 0x11[0] 0x22[1] 0x33[2] 0x44[3]

 

Kernel Level에서의 사용 함수
 little-endian 기준 작성시 : le32_to_cpu(), le16_to_cpu(), cpu_to_le32(), cpu_to_le16()
 big-endian 기준 작성시    : be32_to_cpu(), be16_to_cpu(), cpu_to_be32(), cpu_to_be16()

 

Application Level에서의 사용 함수
 __bswap_32(), __bswap_16() --> #include <bits/byteswap.h>
 함수 호출시 무조건 swapping 된다.
 서로 다른 Endian에서 생성된 파일을 건드릴 경우 외에는 극히 사용할 필요가 없다.
 경우에 따라 ntohl() ntohs() / htonl() htons() 를 사용하는 편이 좋을 수도 있다.

 

레지스터 컨트롤의 경우 (host[ppc] to pci[little])
 DWORD 단위 제어 : cpu_to_le32() / le32_cpu_to() 함수를 어드레스에 무관하게 사용한다.
 WORD 단위 제어  : little 기준으로 어드레스 계산 후, cpu_to_le16() / le16_to_cpu() 사용

[출처] little/big-endian|작성자 땅콩과별


반응형

'IT' 카테고리의 다른 글

Notion에서 아이펜슬로 그림 추가하는 방법  (0) 2021.03.14
2010 문화체육관광부 우수 학술도서 선정~!  (0) 2010.07.31
PKI  (0) 2010.05.26
콘덴서 읽기  (0) 2010.05.20
전압분배법칙  (0) 2010.05.20

+ Recent posts