Перейти к содержанию
    

Запуск кода из внешней памяти в 1986ВЕ3

Кстати, вот вам ход конём:

Сделать загрузчик и основную программу (2 раздельных проекта). Загрузчик, ясное дело, загружает, а потом передаёт управление основной программе. Там этих заморочек с настройками в разы меньше.

это я уже делал и на блекфине и на stm32

теперь нечто подобное нужно сделать на миландре

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

это я уже делал и на блекфине и на stm32

теперь нечто подобное нужно сделать на миландре

И за чем же дело стало? :laughing:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

И за чем же дело стало? :laughing:

Автор видимо хотел сказать, что для тех МК он находил готовые решения, а тут - не может найти.

Если бы сам делал, то даже вопроса бы такого не возникло "как". :laughing:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Автор видимо хотел сказать, что для тех МК он находил готовые решения, а тут - не может найти.

Если бы сам делал, то даже вопроса бы такого не возникло "как". :laughing:

ну типа того :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Значит так. Процессор ваш имеет 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 кБ для стека это дофига вообще. Да и быстрее эта память обычно.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В нём инициализируете внешнюю память и копируете в неё из какой-то внешней флэшки основной код полностью.

Добавлю свои пять копеек: код должен быть зашифрован, если изделие коммерческое.

А оно коммерческое по-любому, т. к. прозвучало ключевое слово - "миландр" :)

Открытые исходники различных шифровальщиков не проблема.

 

48 кБ для стека это дофига вообще.
Дофига - мягко сказано!

Видать, очень толстый проект, коли 48кБ ОЗУ не хватает ;)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Значит так. Процессор ваш имеет 128 Кбайт Flash и 48 Кбайт RAM на ядре Cortex-M.

...

Ну вот.... У человека был шанс чему-то разобраться, научиться, может даже стать наконец-то настоящим программистом... и опять ему помешали..... :crying:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Добавлю свои пять копеек: код должен быть зашифрован, если изделие коммерческое.

А оно коммерческое по-любому, т. к. прозвучало ключевое слово - "миландр" :)

Открытые исходники различных шифровальщиков не проблема.

С таким ключевым словом обычно чтобы поиметь доступ к процессору надо в открытый космос выходить :)

 

Ну вот.... У человека был шанс чему-то разобраться, научиться, может даже стать наконец-то настоящим программистом... и опять ему помешали..... :crying:

А зачем вам конкуренты? :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

С таким ключевым словом обычно чтобы поиметь доступ к процессору надо в открытый космос выходить :)

Миландр подразумевает любой гос. заказ: летный, наземный, подземный, т.е. всякий, где фигурируют деньги гос-ва.

А в обычной частной коммерции поставят что нибудь более подходящее :)

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А зачем вам конкуренты? :)

Да не конкуренты. Хотя-бы сотрудники. А то уже на работу брать некого... :(

Недавно убила фраза друга (далёкого от программирования): "Ну ты же знаешь - самые сильные программисты в Индии, все самые сложные заказы отправляются туда."... И сказано это было в полной уверенности, как само собой разумеющееся. Вот до чего мы докатились уже... :(

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Значит так. Процессор ваш имеет 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 написал инициализацию внешней шины

или внешних шин..

далее в скрипте для линкера изменил:

 

place in ROM_region   { readonly };
place in SRAM_region   { block CSTACK };
place in XRAM_region { readwrite, block HEAP };

 

и все мои переменные оказались во внешней памяти

программа работает

щас попытаюсь функции туда же запихнуть

 

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

щас попытаюсь функции туда же запихнуть

Где у вас прошивка изначально то размещается?

 

тут вот в чем дело - мне хотелось бы чтобы и стек и куча

А потом вертолёты сами по целям лупят... :( Делать надо как надо, а как не надо делать не надо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Недавно убила фраза друга (далёкого от программирования): "Ну ты же знаешь - самые сильные программисты в Индии, все самые сложные заказы отправляются туда."...

 

вполне возможно так и есть

у индийцев перед китайцами, русскими, французами и прочими зулусами

есть одно преимущество - они англоязычные

то есть они литературу просто читают

а не читают и в голове переводят на свой язык.

 

 

 

Где у вас прошивка изначально то размещается?

во внутренней flash

 

А потом вертолёты сами по целям лупят... :( Делать надо как надо, а как не надо делать не надо.

это с запасом, так как сам проект имеет большие объемы данных

с которыми надо работать, а в 48 кБайтах они по любому не поместятся

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

в 48 кБайтах они по любому не поместятся

Чудовищные глобальные или статически массивы - во внешней ОЗУ, это понятно.

Еще понимаю разместить во внешней ОЗУ кучу (heap).

Но что за проект такой, где прям нужен такой чумовой стек > 48кБ да еще и в относительно медленной памяти?!

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...