Перейти к содержанию
    

Опять про бутлоадер. Как в Keil одновременно заливать в МК и бутлоадер и основную программу ?

Друзья,

сделал простенький бутлоадер, заливаю его в STM32 по адресу 0x08000000. Потом заливаю основную программу по адресу 0x0800D000.

Все работает, бутлоадер запускается, потом передает управление основной программе.

Не могу сообразить как сделать, чтобы при заливке основной программы в чистый МК, туда автоматом бы заливался и бутлоадер ?

(Пользуюсь Keil MDK ARM)

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Из двух бинарей делайте один единый.

Я это делаю собственной консольной утилитой, пишется за 10 минут на Си.

Из готовых, разве что, утилиту srec тут кто-то пользовал, вроде. Но надо смотреть, умеет она клеить или нет.

А в Keil-е нужно будет для удобства настроить запуск этого скрипта после сборки проекта - там в опциях есть все для этого.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Делаете две конфигурации. Одна с бутом, вторая с прошивкой.

Добавляете load бут... в Debug init script для прошивки.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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 ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

18 minutes ago, TOG said:

Не пойму как эти конфигурации делать и где этот Debug init script ?

Как делать расписано на сайте Keil ну и конечно в google.com

image.png.b36a5fef011b4fdeee7f9a6f56d50b91.png

image.png.4ce6bb8c315a96b964014f84f38e75eb.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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 и основной проект. Красота ! 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, TOG said:

Гениально, x893 !

Я тут не при чём. Это им говорите - Günter и Reinhard Keil

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

5 часов назад, Arlleex сказал:

Я это делаю собственной консольной утилитой, пишется за 10 минут на Си.

А я это делаю батником. Пишется за 10 секунд и содержит всего одну строчку:

copy /b boot.hex + work.hex complex.hex

:wink:

Полученный complex.hex грузится в jflash.exe (из состава Segger-овских утилит) и шьётся. Jflash даже на наличие лишней строчки ":00000001FF" в конце boot.hex не ругается, проглатывает нормально.

3 часа назад, TOG сказал:

Теперь при нажатии F8(download) автоматом прошивается bootloader.hex и основной проект. Красота ! 

Не очень понятен смысл всех этих телодвижений... Зачем например при отладке основной программы всё время перешивать бутлоадер??? :wacko2: Или при отладке бутлоадера всё время перешивать основную программу? Возможно, что реально флешь и не будет шиться (если Кейл делает перед прошивкой сравнение содержимого флешь с файлом), но лишнее время тратиться всё равно будет.

 

PS: Попробовал сейчас загрузить complex.hex в "STM32 ST-LINK Utility.exe" - загрузилось без проблем. Причём выглядит даже красивее, чем в Jflash. Т.е. с ST-Link вроде тоже нормально работает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 9/19/2022 at 3:55 PM, jcxz said:

Не очень понятен смысл всех этих телодвижений... Зачем например при отладке основной программы всё время перешивать бутлоадер???

Это чтобы через полгода, когда понадобится запустить этот проект я не вспоминал нужен ли приложению бутлоадер и где его искать, а просто нажал F8 и все заработало :sun_bespectacled:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Делаете из скомпиленного бутлоадера сишный массив и подключаете его к проекту:

const unsigned char Bootloader[0xD000] __attribute__((at(0x08000000))) =
  {
  ...
  };

Все. Ваша прошивка содержит в себе бутлоадер.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 9/19/2022 at 6:57 PM, Intel4004 said:

Делаете из скомпиленного бутлоадера сишный массив и подключаете его к проекту

Тоже отличный вариант, Intel4004 !

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Разве получится дебажить из кейла основную программу если туда перескакиваем из бута?

Если да расскажите как я не умею, если нет то неужели вы массово шьете девайсы из кейла?

Я сейчас в кейл делаю два таргета с разными адресами старта.

С 0x08000000 для отладки и с адресом после бута для релиза.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 9/21/2022 at 9:38 AM, uriy said:

Разве получится дебажить из кейла основную программу если туда перескакиваем из бута?

Да, отладка работает. Загрузчик отработал и передал управление основной программе и отладчик остановился на main.  

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, uriy сказал:

Разве получится дебажить из кейла основную программу если туда перескакиваем из бута?

А чем перескакивание из бута отличается от перескакивания из Reset_Handler() без бута? Можно, конечно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

8 часов назад, uriy сказал:

Разве получится дебажить из кейла основную программу если туда перескакиваем из бута?

А в чём проблема? Отладчик, после загрузки образа, сам передаёт управление на его стартовый адрес. Без бута. По-крайней мере в IAR под отладчиком можно запускать программу расположенную с произвольного адреса (в пределах разумного) даже вообще без бутлоадера. И если потом просто включить питание такого МК без отладчика, то программа конечно не запустится.

 

Я так иногда делаю: чтобы не затирать текущую программу в начале флеши, переношу исполняемый регион в конец флеши (запас по размеру флеши есть большой). И прошиваю и отлаживаю IAR-ом программу в старших адресах флеши, не стирая программу в начале.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...