Keil에서 Build
axf / bin(optional) / hex(optional)
axf: windows에서의 exe와 같은 실행 파일(elf = Executable and Linkable Format 의 변형)
- Code & Data (bin의 내용): .text(Code) / .ro / .rw
- Debug 정보: 소스 코드와 기계어 코드 간의 매핑을 위한 라인 번호, 함수 이름, 변수 이름 등의 정보
- Symbol Table: 프로그램 내의 함수와 변수의 이름 및 주소 정보를 포함
- Section Header & MetaData: 각 섹션의 시작 주소, 크기, 속성 등 상세 정보를 제공
- Relocation 정보(optional): 실행 시 주소 조정을 위해 필요한 경우, 코드와 데이터 위치를 재배치할 수 있는 정보
bin(optional): ROM에 기록될 데이터가 그대로 기록 되어있음, 헤더나 메타데이터 포함 X
- Code(.text): 프로그램의 실제 명령어가 저장, 플래시 메모리(ROM)에 기록되어 직접 실행
- RO(Read Only): 상수(Const), 문자열 리터럴, 변경 불가능한 데이터
- RW(Read Write): 초기화된 전역 변수(.data), 초기화되지 않은 전역 변수(.bss) 포함
- 이 변수들은 프로그램 실행 중 값이 변경될 수 있음
- 시작시에 ROM에서 RAM으로 복사
hex(optional) : bin파일에서 시작 주소(적재 주소)및 체크섬 등이 추가된 파일
Map 파일에서 확인 가능한 정보
Total RO Size (Code + RO Data) 2648 ( 2.59kB)
Total RW Size (RW Data + ZI Data) 1040 ( 1.02kB)
Total ROM Size (Code + RO Data + RW Data) 2660 ( 2.60kB)
Example
- Linker Option "--no_remove"를 추가해야 사용 안하는 변수를 삭제안함
#include <stdio.h>
#include "ARMCM3.h"
#include "core_cm3.h"
const int cVar = 0x12345678;
int iVar = 0x55AA55AA;
int uVar;
int fputc(int c, FILE * fp){
ITM_SendChar(c);
return c;
}
int main(){
printf("hello World! \r\n");
return 0;
}