|
Самозагрузчик |
|
|
|
 |
Ответов
|
Apr 7 2016, 13:54
|
Знающий
   
Группа: Участник
Сообщений: 643
Регистрация: 29-05-09
Из: Германия
Пользователь №: 49 725

|
Цитата(inventor @ Apr 7 2016, 07:34)  имеется какой то прибор с SD картой на проце STM32 я хочу сделать для пользователя возможность самому менять прошивку. У меня есть такой загрузчик. Ему требуется примерно 12K флэша. Я зарезервировал 16К, то есть, приложение компилируется так, чтобы начинаться с 16К. Файловая система на FatFS, с которой выброшено все, кроме чтения (файл прошивки я не удаляю). Есть варианты для SPI и SDIO доступа к карте. Если при старте карта и файл с определенным именем на ней обнаружены, загрузчик считывает версию образа и сравнивает с текущей версией прошивки. Прошивка для этого содержит соответствующие поля, которые как данные расположены непосредственно за таблицей векторов. Загрузчик, конечно, знает, что и как искать. Если на карте новая версия, производится запись образа во флэш и его запуск. Во всех остальных случаях загрузчик запускает имеющуюся прошивку сразу.
|
|
|
|
|
Apr 7 2016, 21:06
|
практикующий тех. волшебник
    
Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417

|
Цитата(KnightIgor @ Apr 7 2016, 16:54)  У меня есть такой загрузчик... в своё время сделал немного по другому. прошивка сама себя меняет. есть понятие версия фулл, инкрементальная, модуля. каждый модуль может существовать во флэше несколько экземпляров. загрузчик подымает последнюю устойчивую версию и все модули которые в него входят. собирает статистику, и содержит маленький проверенный код записи во флэш. каналы апдэйтов - куча = микроСД, изернет, модбас, вайфай. благо флэша - как у дурака махорки  как то так (круглый)
Сообщение отредактировал kolobok0 - Apr 7 2016, 21:07
|
|
|
|
|
Apr 8 2016, 05:37
|
Знающий
   
Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153

|
Цитата(kolobok0 @ Apr 8 2016, 00:06)  в своё время сделал немного по другому. прошивка сама себя меняет. есть понятие версия фулл, инкрементальная, модуля. каждый модуль может существовать во флэше несколько экземпляров. загрузчик подымает последнюю устойчивую версию и все модули которые в него входят. собирает статистику, и содержит маленький проверенный код записи во флэш. каналы апдэйтов - куча = микроСД, изернет, модбас, вайфай. благо флэша - как у дурака махорки  Гм, т.е. вы сделали dll на МК. Главный вопрос - зачем  ? И еще кучка вопросов по реализации, интересно  * как тестировали? По идее надо проверять каждую версию с каждым набором версий других модулей * как линковали? Каждый модуль - как отдельный проект? * у вас код запускался из flash? Тогда как разруливались несколько экземпляров модулей (адреса же фиксированные на этапе линковки)? Или вы копировали в ОЗУ? Или не применяли команды, которые работают с фиксированными адресами, только по смещению? * где жила системная библиотека (общая для всех модулей)? * что происходит с глобальными и статическими переменными? У каждого модуля фиксированный регион RAM? Или все хранится в куче? * межмодульное взаимодействие как было организовано? Т.е. как позвать функцию из другого модуля?
|
|
|
|
|
Apr 8 2016, 14:07
|
практикующий тех. волшебник
    
Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417

|
Цитата(Непомнящий Евгений @ Apr 8 2016, 08:37)  ...* как тестировали? ..Каждый модуль - как отдельный проект?...у вас код запускался из flash? ...Или не применяли команды, которые работают с фиксированными адресами, только по смещению? * где жила системная библиотека (общая для всех модулей)? ...Или все хранится в куче? ... как позвать функцию из другого модуля? - стандартный отладчик только на уровне азма конечно же, кроме загрузчика. юзается в основном дебажный вывод и мощная система логгирования при фатальных ошибках. - каждый модуль отдельный проект, работает из флэша. - вся адресация относительная. - все библиотеки = модули(фрииртос, фаты, стандартная либа, менеджэр памяти - их вообщето два, но для модулей - так-же в модуле отдельном) - куча используется - загрузчик делает позднее связывание модулей. т.е. есть понятия импортируемых и экспортируемых функций, необходимых аппаратных прерываний, версии модуля и запрос версии. - функции зовутся как обычно (в тексте это имеет маленький префикс - вот и всё отличие) зачем = повышенная отказоустойчивость. и минимум требований к фазе дистанционной апгрэйта кода. (круглый)
|
|
|
|
Сообщений в этой теме
inventor Самозагрузчик Apr 7 2016, 06:34 KRS Цитата(inventor @ Apr 7 2016, 09:34) посл... Apr 7 2016, 06:51 inventor Цитата(KRS @ Apr 7 2016, 10:51) Самый луч... Apr 7 2016, 07:05  Непомнящий Евгений Цитата(inventor @ Apr 7 2016, 10:05) у ме... Apr 7 2016, 07:11   inventor то есть я делаю в файле линкера для прошивки испра... Apr 7 2016, 07:46    KRS Цитата(inventor @ Apr 7 2016, 10:46) верн... Apr 7 2016, 08:09 jcxz Цитата(inventor @ Apr 7 2016, 12:34) саму... Apr 7 2016, 08:07 inventor Цитата(jcxz @ Apr 7 2016, 11:07) В 0x1000... Apr 7 2016, 10:13 x893 Цитата(KnightIgor @ Apr 7 2016, 16:54) У ... Apr 7 2016, 20:01  KnightIgor Цитата(x893 @ Apr 7 2016, 21:01) Вот бы е... Apr 8 2016, 09:26     kolobok0 Цитата(Kabdim @ Apr 12 2016, 16:11) А вот... Apr 12 2016, 14:26 romas2010 Цитата(inventor @ Apr 7 2016, 09:34) Подс... Apr 7 2016, 15:07 bugdesigner Вот мой скелет бутлоадераю Выделено под него 16К ф... Apr 8 2016, 09:55 inventor Сделал, но чего то не получается запустить основну... Apr 12 2016, 12:44 scifi Цитата(inventor @ Apr 12 2016, 15:44) Я в... Apr 12 2016, 12:52  inventor Цитата(scifi @ Apr 12 2016, 15:52) А попо... Apr 12 2016, 13:12   scifi Цитата(inventor @ Apr 12 2016, 16:12) ток... Apr 12 2016, 13:37 KRS Цитата(inventor @ Apr 12 2016, 15:44) Код... Apr 12 2016, 14:26  aaarrr Цитата(KRS @ Apr 12 2016, 17:26) Во первы... Apr 12 2016, 14:49   scifi Цитата(aaarrr @ Apr 12 2016, 17:49) Где?
... Apr 12 2016, 15:03    zltigo QUOTE (scifi @ Apr 12 2016, 18:03) Ассемб... Apr 13 2016, 08:03     scifi Цитата(zltigo @ Apr 13 2016, 11:03) Ассем... Apr 13 2016, 08:10      KnightIgor Цитата(scifi @ Apr 13 2016, 09:10) Я ж не... Apr 13 2016, 09:00       scifi Цитата(KnightIgor @ Apr 13 2016, 12:00) О... Apr 13 2016, 09:41        zltigo QUOTE (scifi @ Apr 13 2016, 12:41) А, ну ... Apr 13 2016, 09:47         scifi Цитата(zltigo @ Apr 13 2016, 12:47) В дан... Apr 13 2016, 09:50          zltigo QUOTE (scifi @ Apr 13 2016, 12:50) Вы сво... Apr 13 2016, 10:03           scifi Цитата(zltigo @ Apr 13 2016, 13:03) Абсол... Apr 13 2016, 10:14          Сергей Борщ QUOTE (scifi @ Apr 13 2016, 11:50) Все уж... Apr 13 2016, 11:14   KRS Цитата(aaarrr @ Apr 12 2016, 17:49) По-мо... Apr 12 2016, 15:41    aaarrr Цитата(KRS @ Apr 12 2016, 18:41) Нет - за... Apr 12 2016, 16:49     scifi Цитата(aaarrr @ Apr 12 2016, 19:49) А я -... Apr 13 2016, 06:59 inventor Сделал самозагрузчик,
забыл вызвать функцию NVIC_... Apr 13 2016, 06:49 KnightIgor Цитата(inventor @ Apr 13 2016, 07:49) вот... Apr 13 2016, 07:54 ViKo Коль все предъявили, тогда и я...:
Код/* Адрес ... Apr 13 2016, 10:21 scifi Цитата(ViKo @ Apr 13 2016, 13:21) Коль вс... Apr 13 2016, 10:35  ViKo Цитата(scifi @ Apr 13 2016, 13:35) Выше б... Apr 13 2016, 10:43  aaarrr Цитата(scifi @ Apr 13 2016, 13:35) Выше б... Apr 13 2016, 16:28 inventor В догонку.
все работает, загрузчик загружает, с од... Apr 22 2016, 18:59 scifi Цитата(inventor @ Apr 22 2016, 21:59) есл... Apr 22 2016, 19:13
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|