본문 바로가기
링커 스크립트 (Linker Script)

Linker Script (3 - MEMORY)

by rlawnsghtest 2024. 2. 17.

MEMORY 지시어는 링커 스크립트에서 사용되며, 마이크로컨트롤러나 다른 타겟 시스템의 메모리 구성을 정의하는 데 사용됩니다. 이 지시어는 각 메모리 영역의 이름, 속성, 시작 주소, 그리고 크기를 설정하며, 이 정보를 기반으로 링커는 각 섹션(코드, 데이터 등)을 적절한 메모리 영역에 배치합니다.

 

MEMORY 지시어의 기본 구조는 다음과 같습니다:

MEMORY
{
  이름 (속성) : ORIGIN = 시작주소, LENGTH = 크기
}

 

  • 이름: 메모리 영역의 식별자입니다. 일반적으로 FLASH, RAM과 같이 의미 있는 이름을 사용합니다.
  • 속성: 메모리 영역의 속성을 나타냅니다. 주로 사용되는 속성은 r (읽기 가능), w (쓰기 가능), x (실행 가능) 입니다. 속성은 메모리 영역의 용도를 링커에게 알려주며, 예를 들어 코드 섹션은 실행 가능해야 하므로 x 속성이 필요합니다.
  • ORIGIN: 메모리 영역의 시작 주소입니다.
  • LENGTH: 메모리 영역의 크기입니다.

MEMORY 지시어의 사용 예시는 다음과 같습니다.

MEMORY
{
  FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 64K
  RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 20K
}

 

이 예시에서는 두 개의 메모리 영역을 정의하고 있습니다:

  • FLASH: 시작 주소가 0x08000000이고 크기가 64KB인 플래시 메모리 영역입니다. 속성은 읽기(r)와 실행(x)이 가능하다는 것을 나타냅니다. 주로 프로그램 코드와 상수 데이터를 저장하는 데 사용됩니다.
  • RAM: 시작 주소가 0x20000000이고 크기가 20KB인 RAM 메모리 영역입니다. 속성은 실행(x), 읽기(r), 쓰기(w)가 가능하다는 것을 나타냅니다. 주로 변수, 스택, 힙을 저장하는 데 사용됩니다.