2013-10-28 1 views
1

특정 .c 파일의 변수를 특정 RAM 위치에 저장해야하는 이유는 무엇입니까? ARM 용 IAR IDE를 사용하고 있습니다.ARM Cortex M4 및 C, 특정 c 파일의 RAM 섹션을 지정하는 방법

내가 그렇게하고 싶은 이유는 컴파일러가 ARM 코어의 비트 - 밴드 SRAM 영역에 변수를 저장할 때 올바르게 읽을 수없는 경우입니다. 코드의 일부 섹션에 주석을 달면 컴파일러가 비트가 아닌 SRAM 영역에 저장 한 다음 정확한 결과가 관찰된다.

답변

2

EWARM을 사용하면 몇 가지 방법으로 변수를 배치 할 수 있습니다. @을 사용하여 특정 주소에 배치 할 수 있습니다. IAR's support site에서 : 또는

const char RELEASEDATE[16] @ 0x0000FF10 = __DATE__ ; 
const char RELEASETIME[16] @ 0x0000FF20 = __TIME__ ; 

, 당신은 위치 프라그를 사용하여 섹션의 변수를 (당신이 원하는 것처럼 들린다) 찾을 수 있습니다. 같은 소스에서 :

#pragma location = "ConstSection1" 
__root const char RELEASEDATE[16] = __DATE__ ; 
#pragma location = "ConstSection2" 
__root const char RELEASETIME[16] = __TIME__ ; 

그리고 당신의 링커 파일 (.icf)에서

당신은 할 것이다 :
place at address mem: 0x0000FF10 { readonly section ConstSection1 }; 
place at address mem: 0x0000FF20 { readonly section ConstSection2 }; 

은 내가 @ 운영자가 장소에서 보이는 #pragma으로 선호합니다. 또한 코드를 읽는 사람은 #pragma이 특정 컴파일러 특정이 될 것으로 예상하지만 @은 코드에 숨기고 눈에 띄지 않습니다.

관련 문제