안녕하세요 오늘은 엔디안에 대해 알아보겠습니다.
엔디안이란 데이터에 여러 바이트가 있는 경우 바이트 순서를 정하는 규칙입니다.
빅 엔디안(big endian)과 리틀 엔디안(little endian)두가지 방법이 있습니다.
리틀 엔디안은 숫자의 하위 바이트가 메모리의 최하위 주소에 저장되고 상위 바이트가 최상위 주소에 저장됨을 의미합니다.
빅 엔디안은 숫자의 상위 바이트가 최하위 주소에 저장되고 하위 바이트가 최상위 주소에 저장됨을 의미합니다.
STM32는 일반적으로 리틀 엔디안 형식입니다
실제로 빌드된 STM32의 메모리값을 보겠습니다.
볼 메모리 값은 _estack입니다
_estack은 ORIGIN(RAM) + LENGTH(RAM)이므로 0x20005000입니다.
.bin파일을 HxD에디터로 열어봤습니다(HxD다운: https://mh-nexus.de/en/hxd/)
리틀 엔디안방식으로 0x20005000값이 저장된걸 볼 수 있습니다.
아래의 코드는 바이트의 순서를 변경하는 코드입니다
#include <stdio.h>
int main() {
int input = 0x12345678;
int result=0;
printf("input : 0x%x \r\n", input);
for (int j = 0; j < 4; j++) {
result |= ((input << (j * 8)) & 0xFF000000) >> ((3-j)*8);
}
printf("result : 0x%x \r\n", result);
return 0;
}
------------실행결과------------
input : 0x12345678
result : 0x78563412
------------------------------------
'지식 > MCU지식' 카테고리의 다른 글
MCU-Open drain 알아보기 (0) | 2023.10.15 |
---|---|
ARM 명령어 아키텍처 (1) | 2023.04.23 |
MCU GPIO 전류 측정하기 (0) | 2023.01.23 |
UART통신 알아보기 (1) | 2022.12.24 |
MCU-push pull 알아보기 (0) | 2022.06.02 |