2017-09-22 40 views
1

IAR 컴파일러가있는 STM8S 마이크로 컨트롤러에서 작업 중입니다.절대 메모리 위치에 변수 배치 (IAR C/C++)

어떻게 프라그마 또는 다른 방법을 사용하여 하나 이상의 변수를 시작 위치에서 수정할 수 있습니까?

오류 [Lp025] :

I 이러한 코드를 시도

는 컴파일러이 오류 메시지 제공 절대 부 .near.bss을 (main.o를 # 12) 은 ([0x000100-0x000100])을 겹쳐 절대 섹션 .near.bss (main.o를 # 8) ([0x000100-0x000100])

내가 IAR 기술 노트 검색 나는 "절대 변수 위치"하지만 할 수 없었다.

#pragma location = 0x100 /* Start address of absolute location */ 

extern uint8_t  R0, 
         R1, 
         R2, 
         R3, 
extern uint16_t  M1;   
extern uint8_t  M2,  
         M3;  
+0

[this] (http://www.keil.com/support/docs/2829.htm)가 도움이 될 수 있습니다. –

+0

@Michael Walz 당신이 보내는 링크에서 IAR에 대한 비슷한 지시 사항을 발견했습니다. 나는 계속 노력하고있다. – mryldz

답변

1

사용 #pragma location = "my_abs" 또는 _Pragma("location=\"my_abs\"")은 동일한 ELF 섹션에서 절대 지역에서 원하는 변수를 배치합니다. #pragma location은 다음 선언에만 적용되므로 절대 블록에서 변수를 선언 할 때 접두어로 사용할 수있는 정의를 만들 수 있습니다. 전 처리기 매크로에는 _Pragma("location=\"my_abs\"") 구문 만 사용할 수 있습니다.

#pragma section="my_abs" 
#define IN_ABS _Pragma("location=\"my_abs\"") 

IN_ABS char R0, R1, R2, R3; 
IN_ABS short M1;   
IN_ABS char M2, M3; 

int no_abs; 

그런 다음 링커 구성에이 섹션을 추가하여 지정된 주소에 배치하십시오.

place at address mem:0x100 { rw section my_abs };

참고 초기화와 같은 섹션에서 초기화되지 않은 변수 혼합 할 수 있습니다.