Только что наступил на странный баг(?) IAR. IAR начал генерить код, в котором стали встречаться инструкции типа: BLX <метка>, где метка - собсно метка (адрес), НЕ РЕГИСТР!!! Справился с системой команд на ядро Cortex-M3 - там инструкция BLX упоминается только в формате с регистром, никаких других вариантов нет. Да и вообще - причём тут косвенная адресация??? Вызов функции идёт из cpp-файла обычным образом (не косвенно, никаких указателей или виртуальных член-функций). Позже обнаружил причину - эта функция определена в asm-файле и стоит после директивы DATA с данными и LTORG, а перед ней забыл указать THUMB. Причём IAR нормально это съел, даже варнинга не выдал и сгенерил полную чушь. Конечно при выполнеии этого BLX управление улетает в тартарары. IAR6.50
|