/* ====================================================================
* 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>