그라운드 임베디드 EN 유튜브 구독

노트 / 기계어와 어셈블리

링커 스크립트와 섹션

.text, .rodata, .data, .bss가 Flash와 RAM의 어디에 놓이는지 정하는 파일. 맵 파일과 함께 읽는 법.

GROUND EMBEDDED · 정리 노트기계어 06링커 스크립트와 섹션 1MEMORY { 2 FLASH (rx) : ORIGIN = 0x08000000, LE… 3 RAM (rwx) : ORIGIN = 0x20000000, LE… 4}

섹션

.text코드 · Flash.rodata상수 · Flash.data초깃값 있는 변수 · RAM.bss0으로 시작하는 변수 · RAM
프로그램 조각이 놓이는 곳. .data의 초깃값은 Flash에 있다가 시작할 때 RAM으로 복사됩니다.
섹션 내용 위치
.isr_vector 벡터 테이블 Flash 맨 앞
.text 코드 Flash
.rodata const 데이터, 문자열 Flash
.data 초기값 있는 전역 변수 RAM (초기값은 Flash)
.bss 초기값 없는 전역 변수 RAM
스택, 힙 RAM

링커 스크립트 (.ld)

MEMORY {
  FLASH (rx)  : ORIGIN = 0x08000000, LENGTH = 512K
  RAM   (rwx) : ORIGIN = 0x20000000, LENGTH = 128K
}
SECTIONS {
  .text : { *(.isr_vector) *(.text*) *(.rodata*) } > FLASH
  .data : { *(.data*) } > RAM AT > FLASH
  .bss  : { *(.bss*) } > RAM
}

> RAM AT > FLASH가 ".data는 RAM에서 실행되지만 초기값은 Flash에 저장"이라는 뜻입니다.

무료 전자책이 주제를 한 권으로 이어 읽기 (PDF 3권)→

쓰는 경우

  • 부트로더와 앱을 나눌 때 앱의 FLASH ORIGIN을 옮김
  • 빠른 함수를 RAM이나 CCM에 배치: __attribute__((section(".ramfunc")))
  • 설정값 저장용 Flash 섹터를 코드 영역에서 빼 둠

맵 파일

빌드 결과의 .map 파일에서 각 함수와 변수의 주소와 크기를 볼 수 있습니다. Flash가 부족하면 맵 파일에서 큰 것부터 찾습니다. printf의 부동소수점 지원이 수십 KB를 차지하는 경우가 흔합니다.

영상으로 이어 보기공부법과 진로 시리즈 15편2025 임베디드 프로그래밍 공부 순서 | 공부 방법 | 로드맵PROJECT COURSE레지스터 설정을 실제 보드에서 해 보고 싶다면밸런싱 로봇 하나를 요구사항, 회로와 PCB, 펌웨어, 앱까지 실무 순서대로 만드는 강의입니다. 10파트 165강.강의 살펴보기 →FREE PDF무료 전자책 3권 받기이 주제를 한 권으로 이어서 읽고 싶다면. BLDC 모터 제어, 직렬통신, 센서를 책 분량으로 묶었습니다. 이메일만 남기면 바로 받습니다.무료로 받기 →