TOG 0 September 19, 2022 Posted September 19, 2022 · Report post Друзья, сделал простенький бутлоадер, заливаю его в STM32 по адресу 0x08000000. Потом заливаю основную программу по адресу 0x0800D000. Все работает, бутлоадер запускается, потом передает управление основной программе. Не могу сообразить как сделать, чтобы при заливке основной программы в чистый МК, туда автоматом бы заливался и бутлоадер ? (Пользуюсь Keil MDK ARM) Quote Share this post Link to post Share on other sites More sharing options...
Arlleex 56 September 19, 2022 Posted September 19, 2022 · Report post Из двух бинарей делайте один единый. Я это делаю собственной консольной утилитой, пишется за 10 минут на Си. Из готовых, разве что, утилиту srec тут кто-то пользовал, вроде. Но надо смотреть, умеет она клеить или нет. А в Keil-е нужно будет для удобства настроить запуск этого скрипта после сборки проекта - там в опциях есть все для этого. Quote Share this post Link to post Share on other sites More sharing options...
x893 6 September 19, 2022 Posted September 19, 2022 · Report post Делаете две конфигурации. Одна с бутом, вторая с прошивкой. Добавляете load бут... в Debug init script для прошивки. Quote Share this post Link to post Share on other sites More sharing options...
TOG 0 September 19, 2022 Posted September 19, 2022 · Report post On 9/19/2022 at 10:28 AM, Arlleex said: Я это делаю собственной консольной утилитой, пишется за 10 минут на Си. Понял, Arlleex. Спасибо. On 9/19/2022 at 10:30 AM, x893 said: Делаете две конфигурации. Одна с бутом, вторая с прошивкой. Добавляете load бут... в Debug init script для прошивки. Поподробнее бы чуть-чуть. Не пойму как эти конфигурации делать и где этот Debug init script ? Quote Share this post Link to post Share on other sites More sharing options...
x893 6 September 19, 2022 Posted September 19, 2022 · Report post 18 minutes ago, TOG said: Не пойму как эти конфигурации делать и где этот Debug init script ? Как делать расписано на сайте Keil ну и конечно в google.com 1 Quote Share this post Link to post Share on other sites More sharing options...
TOG 0 September 19, 2022 Posted September 19, 2022 · Report post On 9/19/2022 at 11:23 AM, x893 said: Как делать расписано на сайте Keil ну и конечно в google.com Гениально, x893 ! Всего одна строчка. Создаем файл bootloader.ini с одной командой "LOAD Bootloader.hex" Потом в основном проекте идем в Options->Utilities->Init File и прицепляем там этот init файл. Теперь при нажатии F8(download) автоматом прошивается bootloader.hex и основной проект. Красота ! Quote Share this post Link to post Share on other sites More sharing options...
x893 6 September 19, 2022 Posted September 19, 2022 · Report post 1 hour ago, TOG said: Гениально, x893 ! Я тут не при чём. Это им говорите - Günter и Reinhard Keil Quote Share this post Link to post Share on other sites More sharing options...
jcxz 83 September 19, 2022 Posted September 19, 2022 · Report post 5 часов назад, Arlleex сказал: Я это делаю собственной консольной утилитой, пишется за 10 минут на Си. А я это делаю батником. Пишется за 10 секунд и содержит всего одну строчку: copy /b boot.hex + work.hex complex.hex Полученный complex.hex грузится в jflash.exe (из состава Segger-овских утилит) и шьётся. Jflash даже на наличие лишней строчки ":00000001FF" в конце boot.hex не ругается, проглатывает нормально. 3 часа назад, TOG сказал: Теперь при нажатии F8(download) автоматом прошивается bootloader.hex и основной проект. Красота ! Не очень понятен смысл всех этих телодвижений... Зачем например при отладке основной программы всё время перешивать бутлоадер??? Или при отладке бутлоадера всё время перешивать основную программу? Возможно, что реально флешь и не будет шиться (если Кейл делает перед прошивкой сравнение содержимого флешь с файлом), но лишнее время тратиться всё равно будет. PS: Попробовал сейчас загрузить complex.hex в "STM32 ST-LINK Utility.exe" - загрузилось без проблем. Причём выглядит даже красивее, чем в Jflash. Т.е. с ST-Link вроде тоже нормально работает. Quote Share this post Link to post Share on other sites More sharing options...
TOG 0 September 19, 2022 Posted September 19, 2022 · Report post On 9/19/2022 at 3:55 PM, jcxz said: Не очень понятен смысл всех этих телодвижений... Зачем например при отладке основной программы всё время перешивать бутлоадер??? Это чтобы через полгода, когда понадобится запустить этот проект я не вспоминал нужен ли приложению бутлоадер и где его искать, а просто нажал F8 и все заработало Quote Share this post Link to post Share on other sites More sharing options...
Intel4004 2 September 19, 2022 Posted September 19, 2022 · Report post Делаете из скомпиленного бутлоадера сишный массив и подключаете его к проекту: const unsigned char Bootloader[0xD000] __attribute__((at(0x08000000))) = { ... }; Все. Ваша прошивка содержит в себе бутлоадер. Quote Share this post Link to post Share on other sites More sharing options...
TOG 0 September 21, 2022 Posted September 21, 2022 · Report post On 9/19/2022 at 6:57 PM, Intel4004 said: Делаете из скомпиленного бутлоадера сишный массив и подключаете его к проекту Тоже отличный вариант, Intel4004 ! Quote Share this post Link to post Share on other sites More sharing options...
uriy 1 September 21, 2022 Posted September 21, 2022 · Report post Разве получится дебажить из кейла основную программу если туда перескакиваем из бута? Если да расскажите как я не умею, если нет то неужели вы массово шьете девайсы из кейла? Я сейчас в кейл делаю два таргета с разными адресами старта. С 0x08000000 для отладки и с адресом после бута для релиза. Quote Share this post Link to post Share on other sites More sharing options...
TOG 0 September 21, 2022 Posted September 21, 2022 · Report post On 9/21/2022 at 9:38 AM, uriy said: Разве получится дебажить из кейла основную программу если туда перескакиваем из бута? Да, отладка работает. Загрузчик отработал и передал управление основной программе и отладчик остановился на main. Quote Share this post Link to post Share on other sites More sharing options...
Arlleex 56 September 21, 2022 Posted September 21, 2022 · Report post 1 час назад, uriy сказал: Разве получится дебажить из кейла основную программу если туда перескакиваем из бута? А чем перескакивание из бута отличается от перескакивания из Reset_Handler() без бута? Можно, конечно. Quote Share this post Link to post Share on other sites More sharing options...
jcxz 83 September 21, 2022 Posted September 21, 2022 · Report post 8 часов назад, uriy сказал: Разве получится дебажить из кейла основную программу если туда перескакиваем из бута? А в чём проблема? Отладчик, после загрузки образа, сам передаёт управление на его стартовый адрес. Без бута. По-крайней мере в IAR под отладчиком можно запускать программу расположенную с произвольного адреса (в пределах разумного) даже вообще без бутлоадера. И если потом просто включить питание такого МК без отладчика, то программа конечно не запустится. Я так иногда делаю: чтобы не затирать текущую программу в начале флеши, переношу исполняемый регион в конец флеши (запас по размеру флеши есть большой). И прошиваю и отлаживаю IAR-ом программу в старших адресах флеши, не стирая программу в начале. Quote Share this post Link to post Share on other sites More sharing options...