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


# Проверяем, что сборка идет в контексте Zephyr
if(TARGET zephyr_property_target)
    # Величина сдвига LMA (3758096384 = 0xE0000000)
    set(LMA_OFFSET "3758096384")

    # Список секций кода и данных для переноса во FLASH
    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()

    # 1. Создаем собственную цель, которая будет форсированно вызываться при сборке
    add_custom_target(adjust_lma_images ALL
        COMMENT "Формирование образов HEX и BIN со сдвигом LMA для RAMLOADER..."
    )

    # 2. Указываем CMake, что наш шаг должен выполняться строго ПОСЛЕ полной линковки zephyr.elf
    add_dependencies(adjust_lma_images zephyr_final)

    # 3. Сама команда генерации файлов, которая берет готовый zephyr.elf
    add_custom_command(
        TARGET adjust_lma_images
        POST_BUILD
        # Генерация правильного HEX напрямую из исходного ELF
        COMMAND ${CMAKE_OBJCOPY} ${OBJCOPY_ARGS} --output-target=ihex --remove-section=.comment --remove-section=COMMON ${CMAKE_BINARY_DIR}/zephyr/zephyr.elf ${CMAKE_BINARY_DIR}/zephyr/zephyr.hex
        # Генерация правильного BIN напрямую из исходного ELF
        COMMAND ${CMAKE_OBJCOPY} ${OBJCOPY_ARGS} --gap-fill 0xFF --output-target=binary --remove-section=.comment --remove-section=COMMON ${CMAKE_BINARY_DIR}/zephyr/zephyr.elf ${CMAKE_BINARY_DIR}/zephyr/zephyr.bin
    )
endif()