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


/* ====================================================================
 * CUSTOM ARCHITECTURAL LINKER WRAPPER FOR MONOLITHIC SDRAM EXECUTION
 * ====================================================================
 * Этот скрипт принудительно заставляет линкер назначать VMA в SDRAM (0x80000000),
 * а LMA - во Flash (0x60000000), сохраняя идеальную сегментацию ELF для GDB.
 */

/* 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_REGION (регион хранения прошивки) на нашу Flash. */
#undef ROMABLE_REGION
#define ROMABLE_REGION PHYS_FLASH

#undef RAMABLE_REGION
#define RAMABLE_REGION RAM

/* 4. Переопределяем макросы привязки секций из вашего фрагмента.
      Заставляем линкер жестко дописывать "AT> PHYS_FLASH" для каждой секции, 
      чтобы утилита objcopy больше не ломала private headers из-за TLS/Exceptions. */
#undef GROUP_LINK_IN
#define GROUP_LINK_IN(vma) > vma AT> PHYS_FLASH

#undef GROUP_DATA_LINK_IN
#define GROUP_DATA_LINK_IN(vma, lma) > vma AT> PHYS_FLASH

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