'Big Endian'에 해당되는 글 1건

  1. 2009.04.24 [ATmega1128] ATmega128은 Little endian일까 Big endian일까 2

[ATmega1128] ATmega128은 Little endian일까 Big endian일까

이를 확인하기 위해 다음과 같은 프로그램을 작성하였다.

  1. #include <avr/io.h>  
  2.   
  3. void delay_us(unsigned char time_us)  
  4. {  
  5.   
  6.         register unsigned char i;  
  7.   
  8.         for(i=0; i<time_us; i++)                     
  9.         {  
  10.                 asm volatile(" PUSH R0 ");     
  11.                 asm volatile(" POP R0 ");      
  12.                 asm volatile(" PUSH R0 ");  
  13.                 asm volatile(" POP R0 ");     
  14.                 asm volatile(" PUSH R0 ");   
  15.                 asm volatile(" POP R0");     
  16.         }  
  17. }  
  18.   
  19. void delay_ms(unsigned int time_ms)  
  20. {  
  21.         register unsigned int i;  
  22.         for(i=0; i<time_ms; i++)  
  23.         {  
  24.                 delay_us(250);  
  25.                 delay_us(250);  
  26.                 delay_us(250);  
  27.                 delay_us(250);  
  28.         }  
  29. }  
  30.   
  31. int main()  
  32. {  
  33.     int iData= 0x1234;  
  34.     unsigned    char *cP = (unsigned char*)&iData;  
  35.       
  36.     DDRF = 0xFF;    //포트F를 출력으로 설정  
  37.       
  38.     PORTF = *cP;  
  39.     delay_ms(3000);  //3초간 딜레이  
  40.     PORTF = *(cP+1);  
  41.       
  42.     return 0;  
  43. }  


 소스 코드를 보면 2바이트 int형 데이터를 선언하고(atmega128에서 int형은 2바이트),
1바이트 포인터로 주소값을 저장하였다.

 만약, Big endian이라면 0x12가 먼저 출력되고 3초뒤에 0x34가 출력될테고,
Little endian이라면 0x34가 먼저 출력되고 3초뒤에 0x12가 출력될 것 이다.

 키트를 연결시킨후 hex파일을 전송 시켜보았다.





 여기서 켜지는 것이 0이고, 불이 들어오지 않은 것이 1이다.
위의 사진에서 00110100으로 출력되고 3초뒤의 모습인 아래 사진에서 00010010으로 출력되는 것을 알 수 있다.
즉, 0x34 -> 3초뒤 ->0x12로 출력되는 것이다.

 따라서, 0x1234가 34, 12 의 순으로 역순으로 저장되어있기 때문에 Little endian방식으로 메모리에 저장하는 것을 알 수 있다.