MCU
|
STM32F103VCT(ST)
|
IDE
|
Atollic(TrueSTUDIO), STM32CubeMX
|
목표
|
Linker Script 구조 분석
|
- Compile
C 코드를 기계어로 만드는 작업을 Compile이라고 하고, 이 작업에 Compiler라는 프로그램이 필요
- Linker
main.c와 control.c 소스를 컴파일을 하면 오브젝트 파일이 생성되고, 이 오브젝트 파일을 하나의 바이너리로 만듦
아래는 Compile 과정을 그림으로 그려 보았다.
source code
|
main.c
|
control.c
|
compiling
|
↓
|
↓
|
object code
|
main.o
|
control.o
|
Linking
|
↓
|
↓
|
excutable
|
*.hex(*.bin)
|
- 그러면 이걸 꼭 알아야 하나?
MCU에 RAM을 추가로 붙이려면?
제조사 제공 Bootloader를 사용하지 않고 내가 작성하려면?
Linker Script를 건드려야 한다.
여기서는 Segment를 먼저 설명하고 Linker Script에 대해서 설명 하도록 하겠다.
- 세그먼트
메모리 관리 방식의 하나로, 프로그램이나 데이터를 세그멘트 또는 섹션이라는 가변 크기로 관리하는 방법
data segment
|
stack ↓
|
동적 세그먼트
|
high address
|
...
|
|
||
heap ↑
|
|
||
bss
|
정적 세그먼트
|
|
|
data
|
|
||
code segment
|
text
|
low address
|
1. text
- 작성한 코드가 들어감
- Read Only
2. data
- 초기화 된 데이터(런타임 전에 초기화)
- 전역변수(global), 정적변수(static), 배열(array), 구조체(structure) 등이 저장
- Read Write
3. bss(Block Stated Symbol)
- 초기화 되지 않은 데이터(런타임 이후 초기화)
4. heap
- 프로그래머가 동적으로 사용하는 영역
- malloc, free 또는 new, delete 에 의하여 할당, 또는 반환되는 영역
5. stack
- 지역변수, 매개변수, 복귀 번지 등이 저장되어 있는 프로그램이 자동으로 사용하는 임시 메모리
- 함수 호출 시 생성되고, 함수 종료시 반환
- Last In First Out
- Stack 세그먼트는 상위 영역부터 할당(다른 세그먼트는 하위부터 할당)
'ST > 개발 환경 및 구조' 카테고리의 다른 글
STM32 Driver(Library) (0) | 2025.03.18 |
---|---|
Linker Script(2) - 구조 및 설명 (0) | 2025.03.17 |
ST 개발 보드 소개(2) - 32F746GDISCOVERY (0) | 2025.03.17 |
ST 개발 보드 소개(1) - STM32duino(Blue Pill) (0) | 2025.03.17 |
STM32 개발 환경 구축(6) - Firmware 다운로드 방법 (0) | 2025.03.17 |