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


/* ====================================================================
 * 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. ПЕРЕОПРЕДЕЛЯЕМ ТАБЛИЦУ ФИЗИЧЕСКОЙ ПАМЯТИ ZEPHYR 
      Поскольку Zephyr из-за DTS создал регионы с именами FLASH и RAM,
      мы переписываем их параметры, используя нативную команду перенаправления LMA.
      
      Синтаксис GNU LD: ИМЯ (атрибуты) : ORIGIN = VMA_ADDR, LENGTH = SIZE
      Но если мы НЕ хотим переопределять макросы секций, мы можем переписать 
      базовые дефайны FLASH_ADDR и RAM_ADDR, чтобы обмануть логику Zephyr! */

#undef FLASH_ADDR
#define FLASH_ADDR 0x80000000

#undef RAM_ADDR
#define RAM_ADDR 0x80400000

/* Вручную переопределяем макросы смещения загрузки, которые использует 
   оригинальный linker.ld для формирования директив AT> */
#undef CONFIG_FLASH_BASE_ADDRESS
#define CONFIG_FLASH_BASE_ADDRESS 0x60000000

#undef CONFIG_FLASH_LOAD_OFFSET
#define CONFIG_FLASH_LOAD_OFFSET 0x00000000

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