Недавно встретили баг, на новой версии компилятора. Прошивка просто висла при прыжке в функцию, логи нормально помочь не смогли, полезли программатором, оказалось что компилятор новой версии генерировал инструкцию LDRD, для того что бы вытащить uint64_t. Который у нас находился по невыравненному адресу. А ядрышко так не умеет :) STM32F437
Компилятор старой версии генерировал просто 2х LDR.
Специальный технологический центр - гибрид. 3/2
Жду продолжение статьи по всем 3 пунктам
Недавно встретили баг, на новой версии компилятора.
Прошивка просто висла при прыжке в функцию, логи нормально помочь не смогли, полезли программатором, оказалось что компилятор новой версии генерировал инструкцию LDRD, для того что бы вытащить uint64_t. Который у нас находился по невыравненному адресу. А ядрышко так не умеет :)
STM32F437
Компилятор старой версии генерировал просто 2х LDR.
На последнем скрине чистый псевдокод на C/C++, который получили после дизассемблирования