2014-10-30 2 views
0

베어 메탈 프로젝트에서 ROM 섹션의 시작 주소를 전용 주소에 써야합니다.ROM의 전용 위치에 섹션의 시작 주소를 쓰는 방법

MEMORY{ 
    ROM (rx) : ORIGIN = 0x00018000, LENGTH = 0x8000 
    UICR (r) : ORIGIN = 0x10001000, LENGTH = 0x400 
} 

SECTIONS { 
    .bootloader_addr 0x10001014 : 
    { 
     KEEP(*(.bootloader_addr)) 
    } > UICR 
} 

와 나는 C++ 파일에이 곳을 추가 할 수 0x10001014에 배치 될 값 정의 :

std::uint32_t uicr_bootloader_start_address 
    __attribute__((section(".bootloader_addr"),used)) = 
     0x18000; 
을 링커 스크립트에서이 정의 같은 일이 내가 지금까지 발견 한 것입니다

정수 정수를 선언하고 링커를 사용하여 코드 섹션의 시작 주소를 직접 작성하지 않아도되는 이유는 누구입니까? 0x10001014?

답변

1

본인은 직접 사용하지 않았지만 ld은 이진에 4 바이트 리터럴을 삽입해야하는 LONG(expr) command을 지원합니다.

+0

고마워요, 그것은 매력처럼 작동합니다. 아니요, ROM 메모리의 시작 주소를 평가하는 방법을 알아야하기 때문에 시작 주소를 복사 할 필요가 없습니다. –

+1

@TorstenRobitzki 나는'ROM_ region에 심벌'rom_start_address'를 놓은 다음'LONG (rom_start_address)'를 붙여서 할 수있을 것이라고 생각한다. – hcs

+0

나는 그것을 내일 시도하고 그것이 효과가 있었는지보고 할 것이다. –

관련 문제