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


/* ====================================================================
 * CUSTOM ARCHITECTURAL LINKER WRAPPER FOR MONOLITHIC SDRAM EXECUTION
 * ====================================================================
 * Авторы концепции: NXP RAMLOADER Policy & Zephyr OS Core Architecture.
 * 
 * Мы не трогаем макросы GROUP_LINK_IN, чтобы избежать синтаксических ошибок.
 * Вместо этого мы объявляем регион PHYS_FLASH и принудительно связываем
 * системное имя памяти "FLASH" с адресом 0x60000000 через алиас линкера.
 */

/* 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. Объявляем физическую память Flash для хранения прошивки (LMA) */
MEMORY
{
    PHYS_FLASH (rx) : ORIGIN = 0x60000000, LENGTH = 0x400000 /* 4MB встроенной Flash RT1024 */
}

/* 3. Переопределяем базовые регионы для макросов Zephyr до подключения мастера.
      Заставляем систему считать, что ROMABLE (LMA) — это PHYS_FLASH, 
      а RAMABLE (VMA выполнения) — это наш регион RAM (внешняя SDRAM). */
#undef ROMABLE_REGION
#define ROMABLE_REGION PHYS_FLASH

#undef RAMABLE_REGION
#define RAMABLE_REGION RAM

/* 4. ГЛАВНЫЙ АРХИТЕКТУРНЫЙ ПЕРЕХВАТ ДЛЯ КОРРЕКТНОЙ СБОРКИ PJSIP:
      Оригинальный скрипт Zephyr внутри себя принудительно сделает переопределение:
      "#define ROMABLE_REGION FLASH". 
      Поэтому мы даем команду самому GNU Линкеру: если секция будет отправлена 
      в регион памяти с именем "FLASH", перенаправь этот физический LMA-поток 
      в наш регион PHYS_FLASH (на адрес 0x60000000). */
REGION_ALIAS("FLASH", PHYS_FLASH);

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

/* Финальная страховка: сбрасываем макрос обратно в PHYS_FLASH, если оригинальный 
   скрипт переопределил текстовый дефайн в середине или конце файла. */
#undef ROMABLE_REGION
#define ROMABLE_REGION PHYS_FLASH