Arlleex 129 20 марта, 2023 Опубликовано 20 марта, 2023 · Жалоба 49 минут назад, jcxz сказал: Чтобы его реализовать, его надо сперва написать. А в наших реалиях пишет его как правило тот же, кто и реализует потом. Надеюсь - Вы согласны? Это ко мне вопрос? Когда как. Вот сейчас прорабатываю разработку изделия по стороннему ТЗ)) В котором ворох требований к ПО и его обновлению. Разумеется, когда я сам пишу ТЗ, я упрощаю где можно упростить, усложняю там где нужно усложнить) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MKdemiurg 1 20 марта, 2023 Опубликовано 20 марта, 2023 · Жалоба 2 hours ago, Arlleex said: Я у себя в проектах загрузчиков, где RAM мало, чтобы туда всю программу не копировать, разделил исходники на "only-ROM execution" и "only-RAM execution" с соответственной линковкой по файлам. Соответственно, вся инициализация исполняется из ROM, остальное из RAM. вот тут у меня затык сейчас. на сколько я понимаю мне надо создать статические либы , а потом притянуть их в линкере. Только получается, что собирать статически надо весь SDK, а не отдельные файлы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 129 20 марта, 2023 Опубликовано 20 марта, 2023 · Жалоба Никаких статических библиотек. Каким они тут вообще боком. Просто пишете скрипт линкера с секциями размещения в ROM и RAM для нужных файлов. Компоновщик при линковке поместит функции из того или иного файла исходного кода куда надо - в ROM или RAM. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MKdemiurg 1 20 марта, 2023 Опубликовано 20 марта, 2023 · Жалоба 3 hours ago, Forger said: Тогда как ранее описал - специальная прошивка, которая внутри содержит новый бут и при заливке сама его обновляет. Сам бут не имеет права перешивать себя . вот это скорее самый лучший вариант. 4 minutes ago, Arlleex said: Никаких статических библиотек. Я не понимаю, каким они тут вообще боком. Просто пишете скрипт линкера с секциями размещения в ROM и RAM для нужных файлов. Компоновщик при линковке поместит функции из того или иного файла исходного кода куда надо - в ROM или RAM. можете скинуть пример? Я ещё не достиг этого уровня познания линкер-скриптов. Как мне в скрипте указать какой фаил куда пихать? Или это в мейкфайле надо делать? Я могу просто целую папку с CMSIS и SDK запихать по секциям? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 129 20 марта, 2023 Опубликовано 20 марта, 2023 · Жалоба Пример вне контекста проекта я придумать не могу, а проект скидывать я не могу. К тому же у Вас GCC, а у меня ARM CLang. А скрипт примерно такой LOADREG 0x08000000 8192 { ROOTREG 0x08000000 8192 { *(InRoot$$Sections) startup.o (RSTDATA, +First) startup.o (RSTCODE) stm32f0xx_*.o (+RO) hwrom.o (+RO) hwram.o (romfunc) } RAM1REG 0x20000000 180 { startup.o (VTBL, +First) } RAM2REG 0x200000B4 UNINIT 12 { hwrom.o (.bss.blinf) } RAM3REG 0x200000C0 8000 { hwrom.o (ramfunc) .ANY (+RO, +RW, +ZI) } } hwrom.c, hwram.c - это файлы с функциями, размещенными в ROM и RAM, соответственно. Однако есть исключения, поэтому отдельно помечены секции romfunc для hwram и наоборот. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 172 20 марта, 2023 Опубликовано 20 марта, 2023 · Жалоба 4 часа назад, Arlleex сказал: Я у себя в проектах загрузчиков, где RAM мало У ТС вроде как - GD32F303. В котором её не так уж и мало. Имхо - для бута вполне достаточно. Если кубизмом не страдать. Так что - лучше не усложнять без реальной необходимости и копировать всё целиком. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 17 20 марта, 2023 Опубликовано 20 марта, 2023 · Жалоба 4 minutes ago, jcxz said: Если кубизмом не страдать. оч точный термин для популярного нынче заболевания 🤣 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MKdemiurg 1 20 марта, 2023 Опубликовано 20 марта, 2023 · Жалоба 10 minutes ago, jcxz said: У ТС вроде как - GD32F303. В котором её не так уж и мало. Имхо - для бута вполне достаточно. Если кубизмом не страдать. Так что - лучше не усложнять без реальной необходимости и копировать всё целиком. Кубизмом не пострадаешь. Тут СДК от китайцев - ниже LL библиотек STM. Просто обёртки над регистрами. И то я в нём не уверен. Целиком копировать загрузчик в RAM? Этож мне его и собрать надо относительно адреса 0x2000000? Вот тут мне не особо понятно, когда говорят про "полностью в RAM" Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 17 20 марта, 2023 Опубликовано 20 марта, 2023 · Жалоба 1 minute ago, MKdemiurg said: Целиком копировать загрузчик в RAM? А почему его нельзя запускать из флэши? И что произойдет, если в процессе обновления пройдет какой-то сбой? 100% кирпич? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MKdemiurg 1 20 марта, 2023 Опубликовано 20 марта, 2023 · Жалоба 1 minute ago, Forger said: А почему его нельзя запускать из флэши? И что произойдет, если в процессе обновления пройдет какой-то сбой? 100% кирпич? да, я уже выбрал вариант как вы предложили. суббутлоадер, бутлоадер , область для копирования, область для приложения. Мне просто для себя понять - как я могу отправить приложение в RAM , если оно собрано по адресу 0x800000? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 17 20 марта, 2023 Опубликовано 20 марта, 2023 · Жалоба 14 minutes ago, MKdemiurg said: как я могу отправить приложение в RAM А зачем его отправлять в RAM? Не понимаю, чем FLASH не устраивает? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 172 20 марта, 2023 Опубликовано 20 марта, 2023 · Жалоба 51 минуту назад, MKdemiurg сказал: Этож мне его и собрать надо относительно адреса 0x2000000? Конечно. Укажите компоновщику регион ОЗУ как целевой для исполнения. 49 минут назад, Forger сказал: А почему его нельзя запускать из флэши? Если реализовывать безопасно обновляемый загрузчик, то компонуется он для исполнения из ОЗУ. А потом - просто 2 разные области хранения его во флешь. 49 минут назад, Forger сказал: И что произойдет, если в процессе обновления пройдет какой-то сбой? 100% кирпич? После перезапуска, простейший код (необновляемый; можно назвать его "суб-загрузчик") выберет нужную копию загрузчика в одном из регионов флешь, скопирует в ОЗУ и передаст ей управление. Обновление загрузчика всегда идёт в его неактивную копию. А компоновка для исполнения в ОЗУ позволяет не создавать два разных образа загрузчика для выполнения из 2-х разных регионов памяти. Вот почему "целиком в ОЗУ". Иначе придётся возиться с настройкой перемещаемого (relocatable) кода Выше Arlleex уже описывал этот процесс. И где-то ещё неск.лет назад я тоже описывал. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 17 20 марта, 2023 Опубликовано 20 марта, 2023 · Жалоба 7 minutes ago, jcxz said: Если реализовывать безопасно обновляемый загрузчик, то компонуется он для исполнения из ОЗУ. Как я понял, речь шла не о загрузчике: 45 minutes ago, MKdemiurg said: как я могу отправить приложение в RAM Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MKdemiurg 1 20 марта, 2023 Опубликовано 20 марта, 2023 · Жалоба 4 hours ago, jcxz said: Обновление загрузчика всегда идёт в его неактивную копию. А компоновка для исполнения в ОЗУ позволяет не создавать два разных образа загрузчика для выполнения из 2-х разных регионов памяти. Вот почему "целиком в ОЗУ". Иначе придётся возиться с настройкой перемещаемого (relocatable) кода Выше Arlleex уже описывал этот процесс. И где-то ещё неск.лет назад я тоже описывал. Я пока склоняюсь к промежуточной части. Есть субзагрузчик. Всё что он делает - это проверяет нет ли новой версии загрузчика во временном хранилище и если нет - валидирует загрузчик по фиксированному адресу и прыгает туда. Если есть, то копирует новую версию на место загрузчика А уже в основном загрузчике валидация приложения и прыжок в приложение. Хотя вариант с целым загрузчиком для ОЗУ - тоже мне нравится. А как лучше? Получается , всё зависит только от того сколько озу... ЗЫ А зачем тогда две копии? И что делать с копией прежней ревизии? Перетирать ? Мы же не можем откатится назад...Или отдать это решение на кастомную бизнес логику? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 172 20 марта, 2023 Опубликовано 20 марта, 2023 · Жалоба 30 минут назад, MKdemiurg сказал: валидирует загрузчик по фиксированному адресу и прыгает туда. Что такое "валидирует" и что такое "фиксированный адрес"? Где? В ОЗУ во флешь? 30 минут назад, MKdemiurg сказал: ЗЫ А зачем тогда две копии? Две копии - для безопасного обновления, естественно. PS: Сдаётся мне - Вы ничего не поняли в алгоритме безопасного обновления загрузчика..... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться