Возникла проблема при переходе сборки с Keil на Cmake на STM32F103. Самописный бутлоадер принимает прошивку по xmodem и сохраняет ее по адресу 0x08040000, затем по команде update копирует данные в 0x08020000, ищет в прошивке строку вида "ver:x.y.z", выводит версию, настраивает msp, vtor и прыгает на reset_handler приложения по команде gop.
Если использовать бинарник, собранный в Keil, все работает супер - версия определяется корректно и приложение запускается. На Cmake (используется arm-none-eabi) elf и bin собираются без ошибок, таблица векторов действительно лежит по адресу 0x08020000, строка "ver:1.0.0" присутствует в бинарнике, но после загрузки через xmodem, выполнения update и gop бутлоадер выводит версию 0.0.0, а запуск приложения приводит к зависанию.
Я просмотрел реальное содержимое флеша по адресу 0x08020000. Первые слова не совпадают с теми, которые должны быть в elf. Например, адрес reset_handler в памяти получается 0x08020fd1, хотя в elf секция .text начинается с 0x080201e8. Похоже, что во флеш записываются не те данные, но сама передача xmodem проходит нормально.
Какие причины могут приводить к тому, что во флеш записывается другой набор данных, включая неправильный адрес reset_handler, несмотря на то, что elf/bin выглядят корректно?
Код бутлоадера:
https://github.com/johanngorban/bootloader