Цитата(VladislavS @ Sep 20 2017, 12:12)

Значит так. Процессор ваш имеет 128 Кбайт Flash и 48 Кбайт RAM на ядре Cortex-M.
1. Пишете загрузчик, который выполняется из внутренней Flash при старте. В нём инициализируете внешнюю память и копируете в неё из какой-то внешней флэшки основной код полностью.
Затем передаёте управление основной программе
Код
#define APPLICATION_ADDRESS 0xXXXXXXXX
typedef void(*pFunction)(void);
uint32_t app_jump_address = *( uint32_t*) (APPLICATION_ADDRESS + 4); //извлекаем адрес перехода из вектора Reset
pFunction Jump_To_Application = (pFunction)app_jump_address;
__set_MSP(*(__IO uint32_t*) APPLICATION_ADDRESS); //устанавливаем стек приложения
Jump_To_Application();
2. Основная программа ничего не знает о том что её откуда-то скопировали. Её задача только перенаправить на себя таблицу векторов прерываний.
Код
#pragma section = ".intvec"
SCB->VTOR = (uint32_t) __section_begin(".intvec");
А стек я бы расположил всё же во внутренней RAM процессора. 48 кБ для стека это дофига вообще. Да и быстрее эта память обычно.
спасиб, но так я уже делал на STM
тут вот в чем дело - мне хотелось бы чтобы и стек и куча
и все функции изначально поместились бы во внешней RAM
я вот что подумал - в принципе все армы они похожы
и какой нибудь ARM7 не имеет на борту SRAM
но как то может работать сразу из внешней памяти
я вот и подумал что мой простенький контроллер так же сможет
разобрался
в System init написал инициализацию внешней шины
или внешних шин..
далее в скрипте для линкера изменил:
CODE
place in ROM_region { readonly };
place in SRAM_region { block CSTACK };
place in XRAM_region { readwrite, block HEAP };
и все мои переменные оказались во внешней памяти
программа работает
щас попытаюсь функции туда же запихнуть