Little Endian과 Big Endian
모든 프로세서는 Little Endian 또는 Big Endian 중 하나를 사용한다.
프로세서가 memory에 저장하는 방식을 의미하는데, 저장방식이 다른 것.
dword 0x12345678, word 0x1234, byte 0x12를 0x1000번지에 저장하는 방식
번지 하나에는 1byte가 들어간다. (dword는 4byte, word는 2byte, byte는 8bit)
| 0x1000 번지 | 0x1001 번지 | 0x1002 번지 | 0x1003 번지 | ||
| Big Endian | dword | 0x12 | 0x34 | 0x56 | 0x78 |
| word | 0x12 | 0x34 | |||
| byte | 0x12 | ||||
| Little Endian | dword | 0x78 | 0x56 | 0x34 | 0x12 |
| word | 0x34 | 0x12 | |||
| byte | 0x12 |
쉽게 말해서, Little Endian은 상위 bit (MSB)를 상위 주소에 저장하고 있다.
Little Endian으로 처리를 하면, 프로세서는 SW에서 정해준 Type 크기 만큼 그대로 읽어와서 처리하고, Big Endian의 경우 낮은 주소부터 읽어와서 MSB로 넣어주면 된다.
dword 0x12345678을 저장하는 것을 다시 나타내보면,
[ MSB → 0x12345678 ← LSB ]
| Big Endian | Little Endian | |
| 0x1003 번지 | 0x78 | 0x12 |
| 0x1002 번지 | 0x56 | 0x34 |
| 0x1001 번지 | 0x34 | 0x56 |
| 0x1000 번지 | 0x12 | 0x78 |
ARM의 경우 Little Endian을 지원하니, Little Endian의 경우를 잘 알아 두는 것이 좋다. (default로 Little Endian 세팅)
LSB와 MSB는 bit를 따질 때 높은 쪽 자리 숫자이냐, 낮은 쪽 자리 숫자이냐를 따질 때 쓰는 용어
10001000라는 이진수가 있을 때, 맨 왼쪽 자리를 MSB(Most Significant Bit), 가장 오른쪽 자리를 LSB(Least Significant Bit)라고 부른다.
컴파일에 대한 단상
인간은 Assembly로 coding, 이를 Native Code(기계어)로 바꾸어 주는 것이 compile의 목적
이 기계어, Assembler라는 것이 특정 프로세서에만 통하므로 다른 종류의 프로세서에는 동작하지 않는다는 문제점.
흔히 말하는 Compatibility 호환성 한계가 있었고, 새로운 entity를 만듬. 그게 바로 C나 C++ 같은 High Level Language compiler
결국 ARM Core로 예를 들면, C로 코딩한 후 compile 한다~는 의미는 C Compiler를 이용하여, ARM이 해석할 수 있는 Assembly를 만들어 낸 후, ARM Assembler를 이용하여, ARM Core가 해석할 수 있는 일련의 Big Pattern을 만들어 낸다고 할 수 있다.
이런 big pattern 한 덩어리 뭉쳐놓은 것을 흔히 말하는 Executable binary image라고 한다.
Cross compile 환경
Cross Complie이란 실제 Target에서 돌아갈 binary image를 PC 상에서 Compile 할 수 있게 해주는 환경
PC에서 컴파일 한 것은 PC에서 실행하는 게 정상인데, 임베디드 시스템에선 target 자체에서 컴파일을 수행하기엔 너무 작은 시스템이며, 불편하기에 이런 환경을 만들어 binary image를 PC 상에 만들어 내는 것
컴파일 공장 이야기
컴파일이 어떻게 이루어져서 결국 Binary Image가 될까?
컴파일 공장의 목적은, Native Code(기계어)의 집합인 Binary Image를 만들어 내는 것이 목적
Binary의 정체는 바로 프로세서만이 알아들을 수 있는 Native Code(기계어)의 집합
Binary를 만들어 내기 위해선 원료가 필요한데, 그 원료는 바로 .c나 .h, .s 등의 파일.
컴파일은 Source file들을 C complier를 이용하여 Assembly로 만들고, 이를 Assembler를 이용하여 실행 가능하고, Symbol 정보를 가진 특정한 type으로 만든 후, 그 안에 있는 Native Code(기계어)인 1010으로 이루어진 binary를 뽑는다.
'Embedded System Study > EMBEDDED RECIPES 정리' 카테고리의 다른 글
| 메모리와 CPU 동작 (1) | 2026.01.11 |
|---|