function(FUNC_CREATE_MEMORY_MAP filename flash_size boot_size eeprom_size) #memory map for linker SET(MEM_MAP_FILE "${filename}" ) set(FLASH_SIZE ${flash_size}*1024) MATH(EXPR FLASH_SIZE "${FLASH_SIZE}") MATH(EXPR FLASH_BOOT_SIZE "${boot_size}*1024" OUTPUT_FORMAT HEXADECIMAL) MATH(EXPR FLASH_EEPROM_EMU_SIZE "${eeprom_size}*1024" OUTPUT_FORMAT HEXADECIMAL) MATH(EXPR FLASH_MAIN_PROG_SIZE "${FLASH_SIZE} - ${FLASH_BOOT_SIZE} - ${FLASH_EEPROM_EMU_SIZE} " OUTPUT_FORMAT HEXADECIMAL) MATH(EXPR FLASH_SIZE_CALC "${FLASH_BOOT_SIZE} + ${FLASH_MAIN_PROG_SIZE} + ${FLASH_SUPPORTING_AREA_SIZE} + ${FLASH_EEPROM_EMU_SIZE}") if (${FLASH_SIZE_CALC} GREATER ${FLASH_SIZE} ) message(FATAL_ERROR "FLASH_SIZE in MCU - ${FLASH_SIZE} bytes less than CALCULATED_SIZE ${FLASH_SIZE_CALC} bytes") elseif(${FLASH_SIZE_CALC} LESS ${FLASH_SIZE}) message(NOTICE "FLASH_SIZE in MCU - ${FLASH_SIZE} greater than CALCULATED_SIZE ${FLASH_SIZE_CALC} , some memory areas can be increase") endif() MATH(EXPR FLASH_START_ADDRESS "0x08000000" OUTPUT_FORMAT HEXADECIMAL) MATH(EXPR FLASH_BOOT_START_ADDRESS "${FLASH_START_ADDRESS}" OUTPUT_FORMAT HEXADECIMAL) MATH(EXPR FLASH_MAIN_PROG_START_ADDRESS "${FLASH_START_ADDRESS} + ${FLASH_BOOT_SIZE}" OUTPUT_FORMAT HEXADECIMAL) MATH(EXPR FLASH_MAIN_PROG_END_ADDRESS "${FLASH_MAIN_PROG_START_ADDRESS} + ${FLASH_MAIN_PROG_SIZE} " OUTPUT_FORMAT HEXADECIMAL) MATH(EXPR FLASH_EEPROM_EMU_START_ADDRESS "${FLASH_START_ADDRESS} + ${FLASH_SIZE} - ${FLASH_EEPROM_EMU_SIZE}" OUTPUT_FORMAT HEXADECIMAL) MATH(EXPR EEPROM_EMU_START_ADDRESS "${FLASH_EEPROM_EMU_START_ADDRESS}" OUTPUT_FORMAT HEXADECIMAL) file(WRITE "${MEM_MAP_FILE}" " _flash_eeprom_emu_size = ${FLASH_EEPROM_EMU_SIZE}; _flash_eeprom_emu_address = ${FLASH_EEPROM_EMU_START_ADDRESS}; _flash_main_prog_size = ${FLASH_MAIN_PROG_SIZE}; _flash_main_prog_address = ${FLASH_MAIN_PROG_START_ADDRESS}; _flash_boot_size = ${FLASH_BOOT_SIZE}; _flash_boot_address = ${FLASH_BOOT_START_ADDRESS}; ") MATH(EXPR CRC32_USER_AREA_ADDRESS "${FLASH_MAIN_PROG_END_ADDRESS}" OUTPUT_FORMAT HEXADECIMAL) message(${CRC32_USER_AREA_ADDRESS}) add_compile_definitions("EEPROM_START_ADDRESS=${FLASH_EEPROM_EMU_START_ADDRESS}" "FLASH_USER_PROG_ADDRESS=${FLASH_MAIN_PROG_START_ADDRESS}") set(FLASH_MAIN_ADDRESS ${FLASH_MAIN_PROG_START_ADDRESS} PARENT_SCOPE) endfunction()