2017-02-07 5 views
0

나는 르네사스 Syenrgy (ARM 피질 M4) 7.40.5.9722IAR 컴파일러의 특정 위치에 변수 또는 함수를 배치하는 방법은 무엇입니까?

코드 플래시 크기 IAR 임베디드 워크 벤치를 사용하고 있습니다 : 나는에이 기능을 넣을

void function (void) 
{ 
    unsigned char a; 
    a = a+1; 
} 

: 1메가바이트

다음 예제를 고려 플래시의 특정 위치. 이 코드에 대한 사용자 정의 섹션을 정의하는 방법은 무엇입니까?

define symbol region_VECT_start = 0x00000000; 
define symbol region_VECT_end  = 0x000003FF; 
define symbol region_ROMREG_start = 0x00000400; 
define symbol region_ROMREG_end = 0x000004FF; 
define symbol region_FLASH_start = 0x00000500; 
define symbol region_FLASH_end  = 0x000BFFFF; // Fklsh end address is modified from 0x000FFFFF to 0x000BFFFF 
define symbol region_MY_FUNC_start = 0x000C0000; // This statement is added 
define symbol region_MY_FUNC_end = 0x000FFFFF; // This statement is added 
define symbol region_RAM_start  = 0x20000000; 
define symbol region_RAM_end  = 0x2002FFFF; 
define symbol region_DF_start  = 0x40100000; 
define symbol region_DF_end  = 0x40103FFF; 
define symbol region_QSPI_start = 0x60000000; 
define symbol region_QSPI_end  = 0x63FFFFFF; 

/* Stack and heap sizes are defined in bsp_cfg.h */ 

define memory mem with size  = 4G; 
define region VECT_region  = mem:[from region_VECT_start to region_VECT_end]; 
define region ROMREG_region  = mem:[from region_ROMREG_start to region_ROMREG_end]; 
define region FLASH_region  = mem:[from region_FLASH_start to region_FLASH_end]; 
define region RAM_region  = mem:[from region_RAM_start to region_RAM_end]; 
define region DF_region   = mem:[from region_DF_start  to region_DF_end]; 
define region QSPI_region  = mem:[from region_QSPI_start to region_QSPI_end]; 
define region MY_FUNC   = mem:[from region_MY_FUNC_start to region_MY_FUNC_end]; // New section is added 

함께 :

내가 IAR 컴파일러 사용 설명서를 통과하고 아래로 한 방법을 구현 한 다음과 같이

#pragma default_function_attribute = @ "MY_FUNC" 
void function (void) 
{ 
    unsigned char a; 
    a = a + 1; 
} 
#pragma default_function_attribute = 

그리고 .icf 파일을 나는 부분을 추가 한 이러한 변경 사항은 코드가 올바르게 컴파일됩니다. 그러나 "기능"이 필요한 위치에 있지 않습니다. 0x000C0000

왜 그렇습니까?

+0

생각 당신은 여전히'의 #pragma 위치를 사용할 수 있습니다 = 코드의'#pragma default_function_attribute' 블록 안에있는 함수 위에있는 라인에 '0x000C0000'을 추가하십시오. – ecle

답변

0

_Pragma("location=\"__your_section__\"")을 기능 앞에 놓을 수 있습니다.

define block __your_section_block__ size = 0x100 { section __your_section__ }; 

그리고 당신은 링커에 줄을 추가해야합니다 :

그리고 (예를 들어) 링커 파일에

place in MY_FUNC { block __your_section_block__ };