배우고픈 공돌이

STM32 MCU, 특정 메모리에 함수,데이터 위치하기. 본문

카테고리 없음

STM32 MCU, 특정 메모리에 함수,데이터 위치하기.

내 마음 아홉수 2020. 7. 16. 14:20

IAR 의 경우,

#pragma location = address 
__root const unsigned char Char_Data[8000] = { 0x00, };

 

위의 #pragma를 통해 특정 메모리 주소에 데이터 배열, 함수 위치.

__root에서 주소로부터 Char_Data를 적재.

 

gnu_gcc의 경우,

const unsigned char Char_Data[8000] __attribute__((at(address))) = { 0x00, };

 

*gcc 컴파일러 버전에 따라 at(address) 지원이 불가할 때, section(".MY_Section")으로 수정하는 방법이 존재.

 

1. 링크 스크립트에서 section 생성

MEMORY
{
  RAM    (xrw)    : ORIGIN = 0x20000000,   LENGTH = 304K
  FLASH    (rx)    : ORIGIN = 0x8000000,   LENGTH = 1024K
}

/* Sections */
SECTIONS
{
  (..중략..)
  
  .MY_BLOCK 0x080ED000 :
  {
   KEEP (*(.MY_Section));
  } >FLASH
}

2. 해당 변수, 함수에 메모리 위치

const unsigned char Char_Data[8000] __attribute__((section(".MY_Section"))) = { 0x00, };

 

*변수가 배열이나 함수가 아닐 때, int *var = (int*)address; 로 사용.

 

참조 : 

https://stackoverflow.com/questions/4067811/how-to-place-a-variable-at-a-given-absolute-address-in-memory-with-gcc

 

How to place a variable at a given absolute address in memory (with GCC)

The RealView ARM C Compiler supports placing a variable at a given memory address using the variable attribute at(address): int var __attribute__((at(0x40001000))); var = 4; // changes the memory

stackoverflow.com

https://mcuoneclipse.com/2012/11/01/defining-variables-at-absolute-addresses-with-gcc/

 

Defining Variables at Absolute Addresses with gcc

Many compilers offer a way to allocate a variable at an absolute address. For example for the Freescale S08 compiler, I can place my variable at a given address: This is very useful (and needed) e.…

mcuoneclipse.com

 

Comments