배우고픈 공돌이
STM32 MCU, 특정 메모리에 함수,데이터 위치하기. 본문
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://mcuoneclipse.com/2012/11/01/defining-variables-at-absolute-addresses-with-gcc/