2008-09-26 2 views
1

임베디드 시스템의 경우 고정 된 주소에 몇 가지 데이터 구조를 배치해야하므로 별도의 제어 CPU가 알려진 위치에서 해당 데이터에 액세스 할 수 있습니다. 임베디드 타겟을위한 링커 스크립트를 사용하여이 작업을 수행하고 컨트롤 CPU에 대해 동일한 주소를 정의합니다.# 링커 스크립트에 정의 #

따라서 이러한 주소 상수는 링커 스크립트와 헤더 파일의 두 위치에서 정의됩니다. 나는 단지 하나만 갖고 싶다. 필자가 지금까지 생각해 낸 최선의 해결책은 Makefile에서 링커 스크립트에 cpp를 실행시켜 # 동일한 헤더를 포함 할 수 있도록하는 것입니다.

더 좋은 방법이 있나요? 거의 알려지지 않은 ld 옵션이나 cpp를 통해 자동으로 실행되는 링커 스크립트의 명명 규칙이 있습니까?

+0

비표준 동작 – Benoit

+0

gcc 3.x (x86 Linux에서 실행 중이지만 MIPS 용으로 빌드하도록 교차 컴파일 됨)로 사용중인 툴체인을 알면 도움이됩니다. – DGentry

답변

3

이것은 당신이 찾고있는 해결책은 아니지만 한 가지 옵션은 빌드 시스템을 사용하여이 값을 구성하는 것입니다. 템플릿으로 작동하는 config.h.in과 target.ld.in 파일을 생성하고 빌드 시스템이 정확한 정의가있는 config.h와 빌드중인 타겟의 올바른 주소가있는 target.ld 파일을 생성하게하십시오.

우리는 우리의 임베디드 시스템에 CMake를 사용하고 있으며 이런 종류의 것을 지원합니다. GNU autoconf도 그렇지만 저는 개인적으로 그것을 결코 좋아하지 않았습니다.

+2

이것이 결국 내가 한 일입니다. 필자는 입력 스크립트에서 "cpp -P"를 실행하여 최종 링커 스크립트를 생성합니다. – DGentry

0

emdedded-C 특정 구성 @을 사용하여 주소 공간의 어느 위치 에나 개체를 배치 할 수 있습니다.

static struct SOMESTRUCT somestruct @ 0x40000000; 
extern int someextint @ 0x3ffffffc; 
char somebuffer[77] @ 0x80000000; 

32 비트 MCU로 가정합니다.