MCU에 소스파일을 write하는 과정은 일반적으로 아래와 같다.
소스파일(.c) -> 빌드(컴파일) -> .hex or .elf 파일 생성 -> ㅡ MCU 또는 flash memory 다운로드
1. 실제로 명령어를 수행하는 장치는 CPU(Center Processing Unit)
2. CPU가 이해할 수 있는 명령어 -> 기계어
3. 빌드 : 소스코드를 CPU가 이해 할 수 있는 기계어로 변경하는 과정
HEX 파일
c언어로 이루어진 소스 파일을 빌드하면 HEX파일이 생성
HEX 파일은 CPU가 실행하는 기계어 코드와 어셈블리어 주소정보가 "16진수"로 표현되어 있다.
예시 he data length field, it represents the number of data bytes (dd) in the record.
//헥사 파일 포맷
:llaaaatt[dd…]cc
//예시
:10246200464C5549442050524F46494C4500464C33
1. “:” : HEX 파일 시작
2. 헥사 파일 포맷 : “ll” / 예시 : “10” - 데이터 바이트 수
3. 헥사 파일 포맷 : “aaaa” / 예시 : “2462” : 헥사 데이터가 위치하 주소 정보
4. 헥사 파일 포맷 : “tt” / 예시 : “00” : 헥사 타입
5. 헥사 파일 포맷 : “dd...” / 예시 : “464C5549442050524F46494C4500464C” : 데이터 필드
6. 헥사 파일 포맷 : “cc" / 예시 : “33” : 헥사 데이터 체크섬 값
ELF 파일(Executable and Linkable Format)
Hex 파일 + 디버깅용 추가 정보 + 기타 정보들가 포함된 실행 파일
HEX파일만 가지고 디버깅할 수 없지만, ELF파일 내부에는 디버깅용 추가 정보들 포함
MCU Flash Memory가 아닌
디버거에게 전송되어 C 소스코드와 기계어 코드와 관계 정보를 통해 디버깅 기능에 활용된다.
각 ELF 파일은 하나의 ELF 헤더와 파일 데이터로 이루어진다. 파일 데이터는 다음을 포함
- 0개 또는 그 이상의 세그멘트들을 정의하는 프로그램 헤더 테이블
- 0개 또는 그 이상의 섹션들을 정의하는 섹션 헤더 테이블
- 프로그램 헤더 테이블 또는 섹션 헤더 테이블의 엔트리들에 의해 참조되는 데이터
'프로그래밍 언어 > c(임베디드)' 카테고리의 다른 글
system() / sync() (0) | 2024.11.13 |
---|---|
Wiegand 통신 (0) | 2024.09.08 |
가변인자 함수 + 디버깅 매크로 (0) | 2024.08.16 |
구조체 & 공용체 [1] (0) | 2024.07.18 |
LSM/MSB , 리틀 엔디안 / 빅 엔디안 (0) | 2024.07.16 |