
Hex 파일 = CPU가 이해할 수 있는 기계어 코드 + 주소 정보
컴파일러가 주소 할당
빌드 과정인 Compile, Assemble, Link 중 Link 단계에서 주소 할당
-> 링커스크립트 파일 참조하여 주소 할당
링커스크립트 파일에서는 타겟 MCU 메모리 주소 정보 및 추가적인 세팅 되어있음
IDE에서 새로 프로젝트를 만들 때 타켓 MCU를 선택하도록 되어있음
-> 선택된 MCU를 바탕으로 링커스크립트 세팅을 자동으로 IDE에서 해놓은 것
어셈블리어와 마찬가지로 MCU SW 최적화가 필요한 경우, 링커스크립트를 개발자가 적절하게 수정해서 사용해야 할 수 있음
ELF 파일 = Hex 파일 + 디버깅을 위한 추가정보들 + 그외 정보들
디버거의 추가적인 기능 (멈춰있는 코드 위치 정보, break point, 현재 변수값 확인) 위해서는 ELF 파일 사용필요
디버깅을 위한 추가정보는 디버거에만 전달 (Flash에는 다운 x)
어셈블리어, 기계어
CPU가 실제로 이해하고 실행 가능한 명령어를 의미
C코드를 컴파일러로 빌드해서 만들어짐
실제 Flash에 쓰여지고, CPU가 읽어가는 값은 숫자값 형태
기계어: 숫자값 형태 그대로를 의미
어셈블리어: 숫자값을 인간이 보기좋은 문장 형태로 적절히 바꿔놓은 것
Hex 파일, ELF 파일
C코드를 빌드해서 만들어지는 결과물
기계어 코드가 담겨있으며, 기계어가 쓰여질 메모리 주소정보도 갖고 있음
ELF 파일은 위 정보에다 디버깅을 위한 추가 정보까지 담고 있음
ELF 파일의 추가 정보는 MCU Flash로 옮겨지는 게 아니라 디버거로 옮겨져서 디버깅 기능에 활용함
Quiz 1. 어셈블리어란?
A. 사람이 읽기 쉽게 표현한 CPU 명령어
어셈블리어는 CPU 명령어를 사람이 이해하기 쉬운 문자 형태로 표현한 언어이며, CPU가 실행하는 것은 기계어임
Quiz 2. CPU 레지스터의 주된 역할은?
A. CPU 내부에서 가장 빠르게 데이터를 처리하는 임시 저장 공간
CPU 레지스토는 CPU 안에 있는 가장 빠른 임시 저장 공간으로, 데이터를 잠시 보관하거나 연산에 바로 사용하기 위해 존재함
Quiz 3. MCU 플래시 메모리에 저장되어 CPU가 실행하는 형태는?
A. 기계어
CPU는 사람이 작성한 C 코드나 어셈블리어가 아닌, 숫자로 이루어진 기계어(Machine code)를 직접 읽고 실행함
Quiz 4. Hex 파일에 기계어 외에 포함되는 핵심 정보는?
A. 메모리 주소 정보
Hex 파일은 기계어 코드 자체와 더불어, 해당 코드가 MCU 메모리의 어느 주소에 저장되어야 하는지에 대한 정보도 담고 있음
Quiz 5. 소프트웨어 디버깅 시 ELF 파일이 Hex 파일보다 유용한 이유는?
A. ELF 파일에 C코드와 기계어를 연결하는 정보가 있기 때문
ELF 파일은 기계어와 주소 정보 외에 디버깅 정보를 포함해서, 디버거가 실행 중인 기계어와 원래 C코드 라인을 연결하여 보여줄 수 있게 함