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


/* ====================================================================
 * CUSTOM ARCHITECTURAL LINKER WRAPPER FOR MONOLITHIC SDRAM EXECUTION
 * ====================================================================
 * Скрипт полностью повторяет идеологию NXP: код и данные работают 
 * в раздельных регионах SDRAM (0x80... и 0x8040...), но их LMA
 * принудительно подменяется в непрерывный Flash-образ.
 *
 * Мы НЕ трогаем макросы GROUP_LINK_IN, что гарантирует сборку БЕЗ syntax error.
 */

/* 1. Подключаем базовые заголовочные макросы архитектуры Zephyr */
#include <zephyr/linker/sections.h>
#include <zephyr/devicetree.h>
#include <zephyr/linker/devicetree_regions.h>
#include <zephyr/linker/linker-defs.h>
#include <zephyr/linker/linker-tool.h>

/* 2. ПЕРЕОПРЕДЕЛЯЕМ ФИЗИЧЕСКУЮ ТАБЛИЦУ ПАМЯТИ ПО ЛОГИКЕ NXP
      Мы используем документированный синтаксис GNU LD для разделения VMA/LMA регионов.
      Синтаксис: ИМЯ : ORIGIN = VMA_ADDR, LENGTH = SIZE > LMA_REGION
      Это заставляет ЛИНКЕР (а не препроцессор) автоматически перенаправлять 
      адреса загрузки (LMA) в PHYS_FLASH, сохраняя VMA в SDRAM. */
MEMORY
{
    /* Реальная Flash-память чипа, куда программатор запишет бинарник (LMA) */
    PHYS_FLASH (rx) : ORIGIN = 0x60000000, LENGTH = 0x400000 /* 4MB */

    /* Переопределяем регион FLASH (который Zephyr создал для sdram_code).
       Его VMA равен 0x80000000, но его LMA принудительно транслируется в PHYS_FLASH! */
    FLASH (rx) : ORIGIN = 0x80000000, LENGTH = 0x400000 > PHYS_FLASH

    /* Переопределяем регион RAM (который Zephyr создал для sdram_data).
       Его VMA равен 0x80400000, но его LMA также транслируется в PHYS_FLASH! */
    RAM   (wx) : ORIGIN = 0x80400000, LENGTH = 0x1C00000 > PHYS_FLASH
}

/* 3. НАСТРОЙКА СИСТЕМНЫХ МАКРОСОВ 
      Возвращаем макросы регионов в их заводское для Zephyr состояние, 
      чтобы внутренние скрипты kobject и драйверов не выдавали ошибки. */
#undef ROMABLE_REGION
#define ROMABLE_REGION FLASH

#undef RAMABLE_REGION
#define RAMABLE_REGION RAM

/* 4. Включаем оригинальный мастер-скрипт Zephyr для архитектуры ARM Cortex-M.
      Синтаксис строк 155 и 391 останется заводским. Сборка пройдет успешно. */
#include <zephyr/arch/arm/cortex_m/scripts/linker.ld>

/* Финальная страховка */
#undef ROMABLE_REGION
#define ROMABLE_REGION FLASH