Notice
Recent Posts
Recent Comments
LuvSea
ATmega128은 Little endian일까 Big endian일까?? 본문
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
이를 확인하기 위해 다음과 같은 프로그램을 작성하였다.
- #include <avr/io.h>
- void delay_us(unsigned char time_us)
- {
- register unsigned char i;
- for(i=0; i<time_us; i++)
- {
- asm volatile(" PUSH R0 ");
- asm volatile(" POP R0 ");
- asm volatile(" PUSH R0 ");
- asm volatile(" POP R0 ");
- asm volatile(" PUSH R0 ");
- asm volatile(" POP R0");
- }
- }
- void delay_ms(unsigned int time_ms)
- {
- register unsigned int i;
- for(i=0; i<time_ms; i++)
- {
- delay_us(250);
- delay_us(250);
- delay_us(250);
- delay_us(250);
- }
- }
- int main()
- {
- int iData= 0x1234;
- unsigned char *cP = (unsigned char*)&iData;
- DDRF = 0xFF; //포트F를 출력으로 설정
- PORTF = *cP;
- delay_ms(3000); //3초간 딜레이
- PORTF = *(cP+1);
- return 0;
- }
소스 코드를 보면 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방식으로 메모리에 저장하는 것을 알 수 있다.
'sTudy' 카테고리의 다른 글
Boot Code(Startup Code) (0) | 2009.08.10 |
---|---|
RS232 시리얼 통신 관련 레지스터 정리 (0) | 2009.08.10 |
Volatile 한정자 (0) | 2009.08.10 |
DDRA, PORTA를 찾아보자. (0) | 2009.08.10 |
부호 확장(Sign extension) (0) | 2009.08.10 |
Comments