inventor 0 20 сентября, 2017 Опубликовано 20 сентября, 2017 · Жалоба Кстати, вот вам ход конём: Сделать загрузчик и основную программу (2 раздельных проекта). Загрузчик, ясное дело, загружает, а потом передаёт управление основной программе. Там этих заморочек с настройками в разы меньше. это я уже делал и на блекфине и на stm32 теперь нечто подобное нужно сделать на миландре Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scifi 1 20 сентября, 2017 Опубликовано 20 сентября, 2017 · Жалоба это я уже делал и на блекфине и на stm32 теперь нечто подобное нужно сделать на миландре И за чем же дело стало? :laughing: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 20 сентября, 2017 Опубликовано 20 сентября, 2017 · Жалоба И за чем же дело стало? :laughing: Автор видимо хотел сказать, что для тех МК он находил готовые решения, а тут - не может найти. Если бы сам делал, то даже вопроса бы такого не возникло "как". :laughing: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
inventor 0 20 сентября, 2017 Опубликовано 20 сентября, 2017 · Жалоба Автор видимо хотел сказать, что для тех МК он находил готовые решения, а тут - не может найти. Если бы сам делал, то даже вопроса бы такого не возникло "как". :laughing: ну типа того :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 17 20 сентября, 2017 Опубликовано 20 сентября, 2017 · Жалоба ну типа того :) Значит, пришло время для самостоятельной работы ;) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladislavS 29 20 сентября, 2017 Опубликовано 20 сентября, 2017 · Жалоба Значит так. Процессор ваш имеет 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 кБ для стека это дофига вообще. Да и быстрее эта память обычно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 17 20 сентября, 2017 Опубликовано 20 сентября, 2017 · Жалоба В нём инициализируете внешнюю память и копируете в неё из какой-то внешней флэшки основной код полностью. Добавлю свои пять копеек: код должен быть зашифрован, если изделие коммерческое. А оно коммерческое по-любому, т. к. прозвучало ключевое слово - "миландр" :) Открытые исходники различных шифровальщиков не проблема. 48 кБ для стека это дофига вообще.Дофига - мягко сказано! Видать, очень толстый проект, коли 48кБ ОЗУ не хватает ;) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 20 сентября, 2017 Опубликовано 20 сентября, 2017 · Жалоба Значит так. Процессор ваш имеет 128 Кбайт Flash и 48 Кбайт RAM на ядре Cortex-M. ... Ну вот.... У человека был шанс чему-то разобраться, научиться, может даже стать наконец-то настоящим программистом... и опять ему помешали..... :crying: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladislavS 29 20 сентября, 2017 Опубликовано 20 сентября, 2017 · Жалоба Добавлю свои пять копеек: код должен быть зашифрован, если изделие коммерческое. А оно коммерческое по-любому, т. к. прозвучало ключевое слово - "миландр" :) Открытые исходники различных шифровальщиков не проблема. С таким ключевым словом обычно чтобы поиметь доступ к процессору надо в открытый космос выходить :) Ну вот.... У человека был шанс чему-то разобраться, научиться, может даже стать наконец-то настоящим программистом... и опять ему помешали..... :crying: А зачем вам конкуренты? :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 17 20 сентября, 2017 Опубликовано 20 сентября, 2017 · Жалоба С таким ключевым словом обычно чтобы поиметь доступ к процессору надо в открытый космос выходить :) Миландр подразумевает любой гос. заказ: летный, наземный, подземный, т.е. всякий, где фигурируют деньги гос-ва. А в обычной частной коммерции поставят что нибудь более подходящее :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 20 сентября, 2017 Опубликовано 20 сентября, 2017 · Жалоба А зачем вам конкуренты? :) Да не конкуренты. Хотя-бы сотрудники. А то уже на работу брать некого... :( Недавно убила фраза друга (далёкого от программирования): "Ну ты же знаешь - самые сильные программисты в Индии, все самые сложные заказы отправляются туда."... И сказано это было в полной уверенности, как само собой разумеющееся. Вот до чего мы докатились уже... :( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
inventor 0 20 сентября, 2017 Опубликовано 20 сентября, 2017 · Жалоба Значит так. Процессор ваш имеет 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 }; и все мои переменные оказались во внешней памяти программа работает щас попытаюсь функции туда же запихнуть Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladislavS 29 20 сентября, 2017 Опубликовано 20 сентября, 2017 · Жалоба щас попытаюсь функции туда же запихнуть Где у вас прошивка изначально то размещается? тут вот в чем дело - мне хотелось бы чтобы и стек и куча А потом вертолёты сами по целям лупят... :( Делать надо как надо, а как не надо делать не надо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
inventor 0 20 сентября, 2017 Опубликовано 20 сентября, 2017 · Жалоба Недавно убила фраза друга (далёкого от программирования): "Ну ты же знаешь - самые сильные программисты в Индии, все самые сложные заказы отправляются туда."... вполне возможно так и есть у индийцев перед китайцами, русскими, французами и прочими зулусами есть одно преимущество - они англоязычные то есть они литературу просто читают а не читают и в голове переводят на свой язык. Где у вас прошивка изначально то размещается? во внутренней flash А потом вертолёты сами по целям лупят... :( Делать надо как надо, а как не надо делать не надо. это с запасом, так как сам проект имеет большие объемы данных с которыми надо работать, а в 48 кБайтах они по любому не поместятся Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 17 20 сентября, 2017 Опубликовано 20 сентября, 2017 · Жалоба в 48 кБайтах они по любому не поместятся Чудовищные глобальные или статически массивы - во внешней ОЗУ, это понятно. Еще понимаю разместить во внешней ОЗУ кучу (heap). Но что за проект такой, где прям нужен такой чумовой стек > 48кБ да еще и в относительно медленной памяти?! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться