문제

임베디드 시스템의 경우 몇 가지 데이터 구조를 고정 된 주소에 배치해야 별도의 제어 CPU가 알려진 위치에 액세스 할 수 있도록해야합니다. 임베디드 대상에 링커 스크립트를 사용하여이를 달성하고 제어 CPU에 대한 동일한 주소의 #defines를 사용하고 있습니다.

따라서 이러한 주소 상수는 링커 스크립트와 헤더 파일의 두 위치에 정의되어 있음을 귀찮게합니다. 나는 단 하나를 갖고 싶다. 지금까지 내가 생각해 낸 가장 좋은 솔루션은 링커 스크립트에서 MakeFile 실행 CPP를 사용하여 동일한 헤더를 #Include 할 수 있도록하는 것입니다.

이것을 달성하는 더 좋은 방법이 있습니까? CPP를 통해 자동으로 실행될 링커 스크립트에 대한 LD 또는 명명 규칙에 대한 알려진 옵션이 거의 없습니까?

도움이 되었습니까?

해결책

이것은 당신이 찾고있는 솔루션이 아니지만 하나의 옵션은 빌드 시스템을 사용하여 이러한 값을 구성하는 것입니다. 템플릿 역할을하고 빌드 시스템에 올바른 정의가있는 config.h를 생성하고 빌드하는 대상에 대한 올바른 주소가있는 config.h를 생성하는 config.h.in 및 target.ld.in을 만듭니다.

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

다른 팁

emdedded-c 특정 구성 @를 사용하여 주소 공간의 어느 곳에도 객체를 배치 할 수 있습니다.

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

32 비트 MCU를 가정합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top