2017-10-23 3 views
0

STM32 MCU 용 ARM 컴파일러 + 링커를 사용하고 있습니다.ARM 분산 파일 - 실행 영역 내에 Flash 데이터를 보존하는 방법

HEX가 생성되면 도구 srec_cat을 사용하여 CRC를 계산하여 16 진수 내부의 특정 주소에 씁니다. 이런 일이 생기면이 HEX에서이 CRC를 올바르게 볼 수 있습니다.

내가 srec_cat 도구로 후 처리에 무엇을
LR_IROM1 0x08000000 0x000FE00 { ; load region size_region 
ER_IROM1 0x08000000 0x00FE00 { ; load address = execution address ; 64kB - 12kB = 53248 B (ILR Output -O0 = 52496 B) ; For PTB MUST use optimization -O1 or stronger! 
startup_stm32l100xba.o (RESET, +First) 
vectortable.o (VECTORS) 
* (+RO) 
} 
RW_IRAM1 0x20000000 0x00002000 { ; RW data 
.ANY (+RW +ZI) 
} 
} 

LR_IROM3 0x0800FE00 0x0000200 { ; // 512B for Production Constants 
ER_CONST_ROM3 0x0800FE00 FIXED 0x0000200 { ; // 512B for Production Constants 
    ;params.o (PARAM, +First) 
} 
} 

내가 즉 :

문제는이 값이 사라지고 여기

0 내 분산 파일입니다 값으로 다시 작성, 실행 시간에 주소 0x0800FE08에 CRC를 씁니다. STM32 Link 유틸리티로 HEX 파일을 읽을 때이 값을 올바르게 볼 수 있습니다. 하지만 0x0800FE08 주소의 코드를 디버그 할 때 값은 0입니다. UNINIT 매개 변수를 사용해 보았지만 작동하지 않습니다.

나에게 맞는 것은 어셈블리 파일의 특수 영역에서 srec_cat 도구로 재 작성된 더미 DWORD를 넣은 다음 실행 시간에 CRC 값을 올바르게 읽을 수 있다는 것입니다. 다음은 코드입니다 :

 AREA PARAM, DATA, READWRITE 
      EXPORT APP_CRC 
      EXPORT WEL_CRC 

__PARAM 
APP_CRC   DCD  0xAAAABBBB      
WEL_CRC   DCD  0xCCCCDDDD     

      ALIGN 

      AREA |.text|, CODE, READONLY 
END 

그러나 HEX 파일의 데이터를 보존하고 동일한 실행 영역 내에서 동시에 at_address 지침에서 사용하는 방법 다른 방법이 있어야합니다. 는 I에 의해 어드레스 0x0800FE00으로 고정 된 값을 넣을 :

CONST U32의 U32_Product_SN 속성 (0x0800FE00 (AT())) = 1;

그리고 주소 0x0800FE08에서 후 처리 작업에 의해 추가 된 16 진수 파일을 이미 보존하고 싶습니다. 그리고 어셈블리 파일과 AREA 지시어로 그 트릭을 사용하고 싶지 않습니다.

실행 시간, 실행 시간에도 srec_cat 도구로 생성 된 CRC 값을 보존하기 위해해야 ​​할 일을 알고 있습니까?

답변

0

확인 문제를 발견했습니다.

간단합니다. HEX 파일을 탐색 할 때 CRC가있는 모든 항목이 정상 이었지만 디버그 모드에서는 내 POST 프로세스 수정에만 속하는 16 진수 대신 AXF (ELF 파일)가 사용되었습니다.

따라서 디버그 모드에서 올바르게 CRC를 보려면 AXF도 수정해야합니다.

관련 문제