123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 |
- @echo off
- ECHO Computing CRC
- ECHO -------------------------------------
- REM Batch script for generating CRC in KEIL project
- REM Must be placed at MDK-ARM folder (project folder)
- REM Path configuration
- SET APP_ADDRESS=0x08003000
- SET SREC_PATH=SREC
- SET TARGET_NAME=ZB002B20190410
- SET TARGET_PATH=ZB002B20190410
- SET BIN_PATH=bin
- SET BYTE_SWAP=0
- SET COMPARE_HEX=1
- SET CRC_ADDR_FROM_MAP=1
- REM Not used when CRC_ADDR_FROM_MAP=1
- SET CRC_ADDR=0x08007ce0
- REM Derived configuration
- SET MAP_FILE=%TARGET_PATH%\%TARGET_NAME%.map
- SET INPUT_HEX=%TARGET_PATH%\%TARGET_NAME%.hex
- SET OUTPUT_HEX=%TARGET_PATH%\%TARGET_NAME%_CRC.hex
- SET OUTPUT_BIN=%BIN_PATH%\%TARGET_NAME%_CRC.bin
- SET TMP_FILE=crc_tmp_file.txt
- SET OUTPUT_BIN_NO_CRC=%BIN_PATH%\%TARGET_NAME%.bin
- IF NOT "%CRC_ADDR_FROM_MAP%"=="1" goto:end_of_map_extraction
- REM Extract CRC address from MAP file
- REM -----------------------------------------------------------
- REM Load line with checksum location to crc_search variable
- ECHO Extracting CRC address from MAP file
- FINDSTR /R /C:"^ *CHECKSUM" %MAP_FILE%>%TMP_FILE%
- SET /p crc_search=<%TMP_FILE%
- DEL %TMP_FILE%
- REM remove '(' character and string after, which causes errors
- for /f "tokens=1 delims=(" %%a in ("%crc_search%") do set crc_search=%%a
- REM remove CHECKSUM string from variable
- SET crc_search=%crc_search:CHECKSUM=%
- REM get first word at line, which should be CRC address in HEX format
- for /f "tokens=1 delims= " %%a in ("%crc_search%") do set CRC_ADDR=%%a
- REM -----------------------------------------------------------
- REM End of CRC address extraction
- :end_of_map_extraction
- REM Compute CRC and store it to new HEX file
- ECHO CRC address: %CRC_ADDR%
- if "%BYTE_SWAP%"=="1" (
- REM ECHO to see what is going on
- ECHO %SREC_PATH%\srec_cat.exe ^
- %INPUT_HEX% -intel ^
- -crop %APP_ADDRESS% %CRC_ADDR% ^
- -byte_swap 4 ^
- -stm32-b-e %CRC_ADDR% ^
- -byte_swap 4 ^
- -o %TMP_FILE% -intel
- %SREC_PATH%\srec_cat.exe ^
- %INPUT_HEX% -intel ^
- -crop %APP_ADDRESS% %CRC_ADDR% ^
- -byte_swap 4 ^
- -stm32-b-e %CRC_ADDR% ^
- -byte_swap 4 ^
- -o %TMP_FILE% -intel
- ) else (
- REM ECHO to see what is going on
- ECHO %SREC_PATH%\srec_cat.exe ^
- %INPUT_HEX% -intel ^
- -fill 0xff -over %INPUT_HEX% -intel -o no_hole.txt -intel
- %SREC_PATH%\srec_cat.exe ^
- %INPUT_HEX% -intel ^
- -fill 0xff -over %INPUT_HEX% -intel -o no_hole.txt -intel
- ECHO %SREC_PATH%\srec_cat.exe ^
- no_hole.txt-intel ^
- -crop %APP_ADDRESS% %CRC_ADDR% ^
- -stm32-l-e %CRC_ADDR% ^
- -o %TMP_FILE% -intel
-
- %SREC_PATH%\srec_cat.exe ^
- no_hole.txt -intel ^
- -crop %APP_ADDRESS% %CRC_ADDR% ^
- -stm32-l-e %CRC_ADDR% ^
- -o %TMP_FILE% -intel
- )
- ECHO %SREC_PATH%\srec_cat.exe ^
- %INPUT_HEX% -intel -exclude -within %TMP_FILE% -intel ^
- %TMP_FILE% -intel ^
- -o %OUTPUT_HEX% -intel
- %SREC_PATH%\srec_cat.exe ^
- %INPUT_HEX% -intel -exclude -within %TMP_FILE% -intel ^
- %TMP_FILE% -intel ^
- -o %OUTPUT_HEX% -intel
- REM Delete temporary file
- DEL %TMP_FILE%
- DEL no_hole.txt
- ECHO Modified HEX file with CRC stored at %OUTPUT_HEX%
- REM Compare input HEX file with output HEX file
- if "%COMPARE_HEX%"=="1" (
- ECHO Comparing %INPUT_HEX% with %OUTPUT_HEX%
- %SREC_PATH%\srec_cmp.exe ^
- %INPUT_HEX% -intel %OUTPUT_HEX% -intel -v
- )
- ECHO %SREC_PATH%\srec_cat.exe ^
- %OUTPUT_HEX% -intel -offset - -minimum-addr %OUTPUT_HEX% -intel -o %OUTPUT_BIN% -binary
- %SREC_PATH%\srec_cat.exe ^
- %OUTPUT_HEX% -intel -offset - -minimum-addr %OUTPUT_HEX% -intel -o %OUTPUT_BIN% -binary
- ECHO Modified BIN file with CRC stored at %OUTPUT_BIN%
- ECHO Comparing %OUTPUT_BIN_NO_CRC% with %OUTPUT_BIN%
- %SREC_PATH%\srec_cmp.exe ^
- %OUTPUT_BIN_NO_CRC% -binary %OUTPUT_BIN% -binary -v
- ECHO -------------------------------------
|