Загрузка данных


if(TARGET zephyr_final)
    # Определяем величину сдвига LMA (3758096384 = 0xE0000000)
    set(LMA_OFFSET "3758096384")

    # Перечисляем только те секции, которые должны лежать во FLASH, но выполняться из RAM
    set(SECTIONS_TO_ADJUST
        rom_start text .ARM.exidx initlevel device_area sw_isr_table 
        _static_thread_area dma_driver_area entropy_driver_area flash_driver_area 
        gpio_driver_area i2c_driver_area i2s_driver_area clock_control_driver_area 
        mdio_driver_area uart_driver_area ethphy_driver_area net_l3_regions 
        net_socket_register_area log_const_area log_backend_area input_callback_area 
        shell_area shell_root_cmds_sections shell_subcmds_sections shell_dynamic_subcmds_sections 
        tdata rodata nocache .ramfunc datas device_states log_mpsc_pbuf_area 
        log_msg_ptr_area log_dynamic_area k_mem_slab_area k_heap_area k_mutex_area 
        k_msgq_area k_sem_area net_buf_pool_area net_if_area net_if_dev_area 
        net_l2_area usbd_context_area usbd_class_fs_area usbd_class_hs_area usbd_msc_lun_area
    )

    # Формируем аргументы для objcopy
    set(OBJCOPY_ARGS "")
    foreach(section ${SECTIONS_TO_ADJUST})
        list(APPEND OBJCOPY_ARGS --change-section-lma ${section}+${LMA_OFFSET})
    endforeach()

    # Добавляем кастомную сборку правильного HEX и BIN напрямую из оригинального ELF
    add_custom_command(
        TARGET zephyr_final
        POST_BUILD
        # Генерация HEX
        COMMAND ${CMAKE_OBJCOPY} ${OBJCOPY_ARGS} --output-target=ihex --remove-section=.comment --remove-section=COMMON $<TARGET_FILE:zephyr_final> ${CMAKE_BINARY_DIR}/zephyr.hex
        # Генерация BIN
        COMMAND ${CMAKE_OBJCOPY} ${OBJCOPY_ARGS} --gap-fill 0xFF --output-target=binary --remove-section=.comment --remove-section=COMMON $<TARGET_FILE:zephyr_final> ${CMAKE_BINARY_DIR}/zephyr.bin
        COMMENT "Формирование образов HEX и BIN со сдвигом LMA для RAMLOADER (Debug сохранен в ELF)..."
    )
endif()