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 값을 보존하기 위해해야 할 일을 알고 있습니까?