ST/개발 환경 및 구조

Linker Script(1) - Segment

engineer4ever 2025. 3. 17. 00:14

 

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 세그먼트는 상위 영역부터 할당(다른 세그먼트는 하위부터 할당)