2017-05-16 6 views
0

답변을 찾을 수없는 문제가 발견되었습니다. 내 프로그램이 자리하고있는 곳 나는 섹션 후 3 바이트의 테이블을 배치했습니다 : End of hex file after data added at arbitrary address : 나는 카일에 의해 생성 진수 얻을 테이블 플러스 추가 데이터이었다 한 무엇Keil에서 생성 된 16 진수 파일의 끝에 배치되는 내용

const uint8 AppVersion[] __attribute__((at(0x08006E00))) = {1,1,3); 

.

위의 표를 사용하지 않는 동안 16 진수 끝에 동일한 "추가"데이터 (364 바이트)를 얻었습니다 : End of hex file normally.

응용 프로그램 끝 부분에 무엇이 배치되어 있는지 말해 줄 수 있습니까? .map 파일에 단서를 찾지 못했습니다.

감사합니다. Paweł

+0

Drogi Kolego Pawle - dlaczego 님과 niepokoi님께. (나는 Pawel에게 그가 무엇에 대해 걱정하는지 물었다.) 16 진수 파일에 어떤 차이가 있습니까? 실제로 콘텐츠를로드하는 것이 중요하다고 생각합니다. –

+0

@PeterJ, 저는 단지 궁금합니다. 나는 왜 무언가가 일어나는 지 알고 싶다. 문제는 여기서 걱정하지 않는다. –

+0

이미 .map 파일을 보았습니까? – Jeroen3

답변

0

.map 파일을 보면 무엇이 들어 있는지 확인할 수 있습니다. 그러나 그것은 귀하의 코드 또는 도서관 일 수 있습니다. "이미지 끝"에 대한 상대 참조가 아닌 절대 주소를 사용하고 있습니다.

대신 사용자 지정 linker file ~ 을 사용하여 명시 적으로 해당 테이블을 이미지 끝에 연결하십시오.

LR_IROM1 0x08000000 0x0007000 { 
    ; Program ROM Area 
    ER_IROM1 0x08000000 (0x0007000-3) { 
     *.o (RESET, +First) 
     *(InRoot$$Sections) 
     .ANY (+RO) 
    } 

    ; Program SRAM Area 
    RW_IRAM1 0x20000000 0x00001000 { 
     .ANY (+RW +ZI) 
    } 

    ; Version area 
    VERSION (0x08000000 + (0x0007000-3)) 0x3 { 
     version.o 
    } 
} 

나는 숫자를 직접 조정 대상 레이아웃에 대한 아무 생각이 없습니다.
화창한 날에 나는 little tool으로지도 파일을 읽었습니다. 아마 Keil 버전에서 작동할까요?

업데이트 :
당신은 .sct 파일 (링커 파일) 공유했습니다.

LR_IROM1 0x08000000 0x00008000 { 
    ER_IROM1 0x08000000 0x00008000 { 
     *.o (RESET, +First) *(InRoot$$Sections) 
     .ANY (+RO) 
    } 
    RW_IRAM1 0x20000000 0x00001000 
    { 
     .ANY (+RW +ZI) 
    } 
} 

귀하의 ROM 영역 LR_IROM1는 0x08000000에서 0x08007FFF에 걸쳐있다.
따라서 0x08006E00은 이미지의 끝이 아니며 링커는 정적으로 연결된 개체 AppVersion 뒤에 아무 것도 넣지 않아도됩니다 (.ANY).

원하지 않는 경우 위의 예와 같이 version 개체에 대해서만 영역을 만들도록 링커에게 명시 적으로 알리십시오.

+0

늦게 답장을 드려 죄송합니다. 필자는 MapViewer를 사용해 보았지만, .map 파일을 읽는 것과 같은 인상을줍니다. 메모리 끝에있는 3 바이트 (섹션 인 크기 3의 .ARM .__ AT_0x08006E00 및 동일한 주소의 동일한 크기 및 데이터 인 AppVersionE)를 제외한 모든 것에 대한 정보는 없습니다. –

+0

@ PawełJ .sct 파일을 공유 할 수 있습니까? – Jeroen3

+0

여기 있습니다 : LR_IROM1 0x08000000 0x00008000 {; 로드 영역 size_region ER_IROM1 0x08000000 0x00008000 {; 로드 주소 = 실행 주소 * .o (재설정, + 우선) * (InRoot $$ 섹션) .ANY (+ RO) } RW_IRAM1 0x20000000 0x00001000 {; RW 데이터 .ANY (+ RW + ZI) } } –