Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Прошивки более 2Мб (для STM32)
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
dimone
Хотел задать вопрос.
Если случится так, что программа усложнится настолько, что вынуждена будет превысить максмальное доступное кол-во внутренней флеш-памяти для семейства STM32 (насколько знаю и LPC) в два мегабайта, насколько рациональным будет использование внешней sdram для хранения исполняемого кода программы и данных?
Если да, то какое усложнение это за собой влечет (шаманство с линкером, загрузчики, data\nor spi мс памяти и тд..)?
Например реализация программы с вкомилированными растровыми фонтами всех видов и размеров для 429 или 769 дискавери..
Понимаю, что альтернатива , это какой-нибудь Аllwinner-овский soc и Линукс+Qt, но всё-же?.
jcxz
Цитата(dimone @ Jul 4 2018, 11:26) *
Понимаю, что альтернатива , это какой-нибудь Аlwinner-овский soc и Линукс иQt, но всё-же?

Нет, альтернатива - это подключить упомянутый Вами же LPC (хотя как видно Вы не очень их знаете) имеющий интерфейс SPIFI. SPIFI даст расширение FLASH программ МК на объём внешнего чипа SPI-FLASH.
А SDRAM тут вообще никаким боком, ведь Вам надо расширить non-volatile memory.
На других МК (не имеющих аналога SPIFI) смотреть/читать надо в сторону оверлеев (программисты старой закалки должны это знать со времён 640К на ПК и подкачки с диска). Или (в каких-то простых случаях нехватки места для const данных) - вручную делать подкачку с non-volatile носителя в общую область ОЗУ. Тут для красивости можно использовать MMU (если есть) или просто MPU.
dimone
Почему non-volatile? Если линкеру указать адресное пространство внешнеи SDRAM и загрузить в оную при старте ОДИН , (как это делается в ПЛИС ),как вы сказали оверлей, то разве не будет работоспособным такое решение?..
п.с. с LPC действительно давно не работал, но насчет указаной фичи таки вспомнил, ее часто в холварах называют
scifi
Цитата(dimone @ Jul 4 2018, 11:26) *
Например реализация программы с вкомилированными растровыми фонтами всех видов и размеров для 429 или 769 дискавери..

Очевидное решение - SPI флеш для хранения шрифтов и т.п., как уже отметил выше коллега. Эта штука работает достаточно быстро, чтобы можно было доставать оттуда шрифты на лету.
dimone
Цитата(scifi @ Jul 4 2018, 11:41) *
Очевидное решение - SPI флеш для хранения шрифтов

Извиняюсь, что привел пример программы со шрифтами в основе, оно направляет мышление в другое русло, -подкачки, фс, ttf..
Пусть будет сферическая программа в вакууме, но с покером и ..... , т.е. значительного размера (превышающего 2 Мб для stm))
монопрогрмма , с сегментированнием, без и использования MМU и оверлеев.
scifi
Цитата(dimone @ Jul 4 2018, 11:49) *
Пусть будет сферическая программа в вакууме, но с покером и ..... , т.е. значительного размера (превышающего 2 Мб для stm))

Ещё Билл Гейтс пророчески заявлял: "640K ought to be enough for anyone". Вот даже не знаю, что это должна быть за программа, чтобы там было 2 мегабайта кода. Вы столько за всю жизнь не напрограммируете. В общем, я бы не парился.
jcxz
Цитата(dimone @ Jul 4 2018, 11:39) *
Почему non-volatile? Если линкеру указать адресное пространство внешнеи SDRAM и загрузить в оную при старте ОДИН , (как это делается в ПЛИС ),как вы сказали оверлей, то разве не будет работоспособным такое решение?..

Будет. Только: а) это уже не оверлей (прочитайте что это такое); б) тогда говорить надо не о SDRAM, а о связке SDRAM+внешняя_FLASH.

Цитата(dimone @ Jul 4 2018, 11:49) *
Пусть будет сферическая программа в вакууме, но с покером и ..... , т.е. значительного размера (превышающего 2 Мб для stm))
монопрогрмма , с сегментированнием, без и использования MМU и оверлеев.

В смысле - в 2MB не лезет код??? А Вы реально можете написать такую программу? И написать до того, как появятся МК с бОльшим объёмом flash? biggrin.gif
Нет, я конечно встречал такие шедевры "программирования", где кажется, что автор не знает что такое циклы и лепит код копипастом. Который, к тому же, настолько кривой, что не работает с включённой оптимизацией в компиляторе выше чем уровень 0. Так пожалуй можно написать и на 2МБ. Но это - скорее клиника.

PS: Вопрос, имхо, о сферическом коне в вакууме....
dimone
Цитата(jcxz @ Jul 4 2018, 12:06) *
Будет. Только: а) это уже не оверлей (прочитайте что это такое); б) тогда говорить надо не о SDRAM, а о связке SDRAM+внешняя_FLASH.

-чисто технически, по отношению к МК со встроенной флеш-пямятью, программа превышает допустимый ее размер, и требует загрузки, что несомненно.)
Внешняя FLASH как вариант, что позволит не заморачиваться с загрузчиками, но уже имея установленную внешнюю SDRAM и внешнюю SPI non-volatilе память,
хотелось попробовать с имеющимися средствами запустить хотя-б "хелло ворлд" из внешей памяти..
Осозню, что это костыли, тем более ST за 10 лет так и не удосужились сделать как Атмел САМБу, что-б можно было лить во внешний чип, но
AVR
Присоединяюсь к скепсису коллег: какой процент занимает непосредственно код, а что данные (шрифты, тексты меню и тому подобное)? Не верю в код для stm32 более мегабайта. Можете намекнуть? Всё что больше мегабайта, это скорее тянет на проект для ОС Linux, а не stm32 - там понятно, много библиотек, много функционала.
jcxz
Цитата(dimone @ Jul 4 2018, 12:24) *
хотелось попробовать с имеющимися средствами запустить хотя-б "хелло ворлд" из внешей памяти..

"Просто запустить" - ничего сложного. Вопрос тут - зачем? Для штатной работы устройства это малополезно (как написали выше), но может быть полезно для отладки. Я сам часто использую отладку кода в SDRAM (там где SDRAM есть). Это существенно ускоряет процесс отладки. Грузит код в SDRAM при этом отладчик.
А оверлеи могут быть полезны на системах с разными типами памяти программ (разноскоростными).
serglg
Думаю,что как и 20 лет назад в 8-битниках основной объем всех программ - тексты, таблицы и проч.
А сейчас - заготовки графики, анимаций и проч.
И всё это прекрасно хранится в spi flash. :-)
dimone
..ну, к примеру ,раз про шрифты зашло, -движок распаковки ttf, кодеки, микропитон, ТСР\ІР все протоколы..
scifi
Цитата(dimone @ Jul 4 2018, 14:43) *
..ну, к примеру ,раз про шрифты зашло, -движок распаковки ttf, кодеки, микропитон, ТСР\ІР все протоколы..

Это что за устройство такое, стесняюсь спросить? Смартфон что ли?
dimone
В существующем дивайсе, на растеризованыйи Arial шести минимально необходимых размеров, где лишь кириллица и цифры, причем большие размры лишь цифры,
для оледа 256х 64 , уже тянет на 1Mб.. для LCD этого явно не хватит..
аналог
https://www.systecnet.com/en/products/IT3.html
jcxz
Цитата(dimone @ Jul 4 2018, 14:59) *
В существующем дивайсе, на растеризованыйи Arial шести минимально необходимых размеров, где лишь кириллица и цифры, причем большие размры лишь цифры,
для оледа 256х 64 , уже тянет на 1Mб.. для LCD этого явно не хватит..

256x64 - это размер LCD или размер одного символа?
Если первое, то у меня есть проект с LCD 320x240 с 10-ю растеризованными TTF (латинница, кириллица, и весь диапазон ASCII 0x20...0x3F) и двумя кодеками. Так вот: секция со шрифтами весит ~40кБ, весь скомпилённый проект во флешь ~221кБ. Как бы всего-то ~10% от 2МБ. И там ещё куча всего кроме вышеозвученного. laughing.gif
А если 2-е, то как тут уже писали: шрифты нетрудно хранить во внешней FLASH, последовательной или параллельной.

А "TCP/IP все протоколы" - неужто так и все из в мире придуманных используются? cool.gif
А если только самые распространённые, то думаю в худшем случае уложатся килобайт в 60.
dimone
Цитата(jcxz @ Jul 4 2018, 15:28) *
256x64 - это размер LCD или размер одного символа?

-это разрешение ОЛЕД индикатора.

Попробуйте растеризовать кириллицу+латинницу и указаный вами диапазон для одного лишь нежирного Аrial 48
для LCD естесственно понадобятся значительно большие, если на пол-высоты крана цифири, а хотя бы на треть сообщния..

Естесственно соглашусь , что технически это всё тем или иным способом решается, просто было интересно, как можно обоити ограничения
scifi
Цитата(dimone @ Jul 5 2018, 08:45) *
Попробуйте растеризовать кириллицу+латинницу и указаный вами диапазон для одного лишь нежирного Аrial 48
для LCD естесственно понадобятся значительно большие, если на пол-высоты крана цифири, а хотя бы на треть сообщния..

У себя с самого начала сделал нехитрый RLE. Для крупных шрифтов ужмётся в разы.
dimone
Цитата(scifi @ Jul 5 2018, 08:50) *
У себя с самого начала сделал нехитрый RLE..

в EmWin-е вроде свои RLE есть, крупных шрфтов избыточность очевидна,
со шрифтами то я управлюсь , мне было интересно решение вопроса мегапрошивки в принципе.
esaulenka
Проблема "мегапрошивки в принципе" не решается.
Потому что для её решения нужно, как минимум, уметь читать.

В этой теме уже упоминалось, что некоторые LPC и STM умеют исполнять код из внешних SDRAM и QSPI флешек.
Также об этом написано в соответствующей документации.
ViKo
А что всё SDRAM да SDRAM? Параллельная флэш-память подключается к шине. И размер программы ограничен только диапазоном адресного пространства, выделенного для такой памяти.
esaulenka
Цитата(ViKo @ Jul 5 2018, 10:12) *
Параллельная флэш-память подключается к шине.


NOR. Маленькая, ооочень многоногая и довольно дорогая.
Потому что с NAND по-человечески (с отображением в адресное пространство контроллера) не умеют работать ни STM32, ни LPC43...
ViKo
Цитата(esaulenka @ Jul 5 2018, 12:21) *
NOR. Маленькая, ооочень многоногая и довольно дорогая.
Потому что с NAND по-человечески (с отображением в адресное пространство контроллера) не умеют работать ни STM32, ни LPC43...

Так вопрос, скорее, теоретический.
Вот от Микрона документ, там можно поcмотреть.
https://www.micron.com/resource-details/b54...43-caf3e0a240e5
Осталась MT28EW серия, M29W уже не в моде.
jcxz
Цитата(dimone @ Jul 5 2018, 08:45) *
-это разрешение ОЛЕД индикатора.
Попробуйте растеризовать кириллицу+латинницу и указаный вами диапазон для одного лишь нежирного Аrial 48

А зачем? У меня максимальные используемые шрифты: "Verdana 14pt", "Verdana 20pt", "Georgia 20pt" - так даже на моём 320x240 буквы уже кажутся очень большими (используются только для крупных надписей). А "Аrial 48" да на 256x64 ?... там хоть один символ то влезает в этот LCD? Или нужно скроллить? biggrin.gif
И нафига такой изврат нужен (на практике)?

Цитата(dimone @ Jul 5 2018, 08:45) *
для LCD естесственно понадобятся значительно большие, если на пол-высоты крана цифири, а хотя бы на треть сообщния..

Ну ладно - пускай там Вы может выводите бегущую строку по паре символов на экран (читаемость такой строки будет сомнительна), но зачем её выводить ещё и десятком разных шрифтов (все большие)??? wacko.gif
А уж 1-2 шрифта даже такого размера вполне займут несколько десятков кБ. А это во много раз меньше 2MB.

PS: Описание задачи очень сильно смахивает на сферического коня... laughing.gif
x893
Наберите в гугле
linker overlay
прочитайте внимательно и используйте.
Как то люди используют с 1980-годов и не парятся
AVR
Цитата(x893 @ Jul 5 2018, 15:53) *
Наберите в гугле
linker overlay
прочитайте внимательно и используйте.
Как то люди используют с 1980-годов и не парятся

В DOS-е такое было, на паскале пробовал. Вы утверждаете, что это сработает с stm32? Это интересно.

Цитата(jcxz @ Jul 5 2018, 14:29) *
PS: Описание задачи очень сильно смахивает на сферического коня... laughing.gif

Подозреваю, автор темы изучает гипотетическую возможность такового. Ничего предосудительного sm.gif
jcxz
Цитата(AVR @ Jul 5 2018, 16:40) *
В DOS-е такое было, на паскале пробовал. Вы утверждаете, что это сработает с stm32? Это интересно.

У меня такое было на LPC4370. А в чём проблема? Почему может "не сработать"?
Тут разговор о другом: на МК с 2МБ флеша это вряд-ли будет нужно на практике.
mantech
Цитата(ViKo @ Jul 5 2018, 10:12) *
А что всё SDRAM да SDRAM? Параллельная флэш-память подключается к шине. И размер программы ограничен только диапазоном адресного пространства, выделенного для такой памяти.

Да подключить можно что угодно, но не будет ускорения, как во внутренней флеш, а это на порядок падение в скорости, если уж в устройстве используется графика, так наверняка есть СД-карта, грузите свою мегапрограмму в ОЗУ с карты и будет вам счастье biggrin.gif
ЗЫ. А так конечно странно, что можно уложить в 2 мега, делал свою "мини ОС" на "тяжелом" камне аля "аллвиннеровские SOC", с поддержкой очень многочего, включая графику, сетевой стек, виртуальную машину, протоколы обмена и растеризованный шрифт по умолчанию... Потянуло меньше, чем 600кБайт, с оптимизацией, конечно.
Arlleex
Ну, 2МБайт Flash можно использовать по-разному, смотря что за приложение. Скажу за себя.
Делали одно устройство технологическое, объект находится за тысячу километров от рабочего стола. Больше отладиться, собственно, не на чем. Поэтому компилировал некоторые версии прошивок (с вариативным набором функций и алгоритмов работы особо интересных мест) и забивал ими Flash. При включении техник выбирал кнопочками на дисплее каждую подготовленную версию и она загружалась как текущая рабочая. По ней оглашались результаты и принималось дальнейшее решение, что и как писать в следующих ревизиях. В итоге, правда, оказалось, что отладили все достаточно быстро и пришлось убрать загрузчик с возможностью выбора боевой прошивки. Это был своего рода механизм быстрого отката назад при тестировании нового ПО, ведь основную работу устройство должно сделать так или иначе, а вот потестить его с новой версией ПО это как бы факультативное задание было rolleyes.gif
mantech
Цитата(Arlleex @ Jul 13 2018, 21:42) *
Ну, 2МБайт Flash можно использовать по-разному, смотря что за приложение. Скажу за себя.
Делали одно устройство технологическое, объект находится за тысячу километров от рабочего стола. Больше отладиться, собственно, не на чем. Поэтому компилировал некоторые версии прошивок (с вариативным набором функций и алгоритмов работы особо интересных мест) и забивал ими Flash. При включении техник выбирал кнопочками на дисплее каждую подготовленную версию и она загружалась как текущая рабочая. По ней оглашались результаты и принималось дальнейшее решение, что и как писать в следующих ревизиях. В итоге, правда, оказалось, что отладили все достаточно быстро и пришлось убрать загрузчик с возможностью выбора боевой прошивки. Это был своего рода механизм быстрого отката назад при тестировании нового ПО, ведь основную работу устройство должно сделать так или иначе, а вот потестить его с новой версией ПО это как бы факультативное задание было rolleyes.gif


В принципе, их можно было б их хранить на карточке памяти, флешке (сейчас почти у каждого путного мк есть усб хост) да во внешней спи-флешке даже, а бутлоадер прошьет во флеш мк ту, которую выберет техник...
jcxz
Цитата(mantech @ Jul 13 2018, 20:05) *
Да подключить можно что угодно, но не будет ускорения, как во внутренней флеш, а это на порядок падение в скорости

Вы лучше как нибудь попробуйте прежде чем вещать.
Постоянно отлаживаю код в SDRAM в тех устройствах где оно есть. И на STM32F429 в том числе. Разница в загрузке процессора при работе из флешь и SDRAM незначительная. Так как есть такая вещь как кеш.
mantech
Цитата(jcxz @ Jul 14 2018, 21:28) *
Вы лучше как нибудь попробуйте прежде чем вещать.
Постоянно отлаживаю код в SDRAM в тех устройствах где оно есть. И на STM32F429 в том числе. Разница в загрузке процессора при работе из флешь и SDRAM незначительная. Так как есть такая вещь как кеш.


Вы лучше почитайте внимательно, что я написал, напомню, предложили использовать параллельную флешку, с которой исполнять программу, причем тут сдрам?? Или у вас при исполнении кода из параллельной флешки тоже кэш работает?? Не путайте с возможностью кеширования региона в SPI флеше.
dimka76
Цитата(dimone @ Jul 4 2018, 11:26) *
Хотел задать вопрос.
Если случится так, что программа усложнится настолько, что вынуждена будет превысить максмальное доступное кол-во внутренней флеш-памяти для семейства STM32 (насколько знаю и LPC) в два мегабайта, насколько рациональным будет использование внешней sdram для хранения исполняемого кода программы и данных?


Тогда придется переходить на 32-bit TriCore™ Microcontroller от Infineon.
https://www.infineon.com/cms/en/product/mic...y-tc297ta-adas/

Up to 8MB Flash !!!
mantech
Цитата(dimka76 @ Jul 16 2018, 00:22) *
Тогда придется переходить на 32-bit TriCore™ Microcontroller от Infineon.
https://www.infineon.com/cms/en/product/mic...y-tc297ta-adas/

Up to 8MB Flash !!!


Думаю, что все-таки лучше потратить немного времени на оптимизацию программы или устройства хранения информации...
AVR
Цитата(dimka76 @ Jul 16 2018, 00:22) *
Тогда придется переходить на 32-bit TriCore™ Microcontroller от Infineon.
https://www.infineon.com/cms/en/product/mic...y-tc297ta-adas/
Up to 8MB Flash !!!

Так почему-бы сразу не перейти на балалайку с Линуксом? К чему такие страдания? Ну не лезет у ТС во флэш.

Тем более:
Цитата(dimone @ Jul 4 2018, 11:26) *
Понимаю, что альтернатива , это какой-нибудь Аllwinner-овский soc и Линукс+Qt, но всё-же?.
jcxz
Цитата(AVR @ Jul 16 2018, 12:06) *
Ну не лезет у ТС во флэш.

Он даже ещё ничего не пытался начать писать, чтобы "не лезло". Да и судя по вопросу - не писал никогда ничего. Почитайте исходный пост.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.