реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> BLX бывает без регистра?, IAR6.50 Cortex-M3
jcxz
сообщение Jan 28 2014, 08:10
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Только что наступил на странный баг(?) IAR.
IAR начал генерить код, в котором стали встречаться инструкции типа: BLX <метка>, где метка - собсно метка (адрес), НЕ РЕГИСТР!!!
Справился с системой команд на ядро Cortex-M3 - там инструкция BLX упоминается только в формате с регистром, никаких других вариантов нет.
Да и вообще - причём тут косвенная адресация??? Вызов функции идёт из cpp-файла обычным образом (не косвенно, никаких указателей или виртуальных член-функций).
Позже обнаружил причину - эта функция определена в asm-файле и стоит после директивы DATA с данными и LTORG, а перед ней забыл указать THUMB.
Причём IAR нормально это съел, даже варнинга не выдал и сгенерил полную чушь.
Конечно при выполнеии этого BLX управление улетает в тартарары.
IAR6.50
Go to the top of the page
 
+Quote Post
KRS
сообщение Jan 29 2014, 05:58
Сообщение #2


Профессионал
*****

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



Цитата(jcxz @ Jan 28 2014, 12:10) *
BLX <метка>, где метка - собсно метка (адрес), НЕ РЕГИСТР!!!

такая инструкция есть начиная с ARMv5 (т.е. в ARM7TDMI ее нет).
Но и ARMv6m и ARMv7m ее нет! А обычная инструкция BLX приводит к exception!
И это не косвенная адресация, а переход с возможной сменой режима ARM<->THUMB.
У вас где то в опциях ассемблера или компилятора не то ядро стоит!

В асм надо ставить THUMB обязательно! Причем именно THUMB, CODE16 не позволит все инструкции использовать!
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jan 29 2014, 16:49
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(KRS @ Jan 29 2014, 11:58) *
У вас где то в опциях ассемблера или компилятора не то ядро стоит!

Ядро стоит правильное (Cortex-M3), я это первым делом проверил.

Цитата(KRS @ Jan 29 2014, 11:58) *
В асм надо ставить THUMB обязательно! Причем именно THUMB, CODE16 не позволит все инструкции использовать!

Я это знаю. THUMB было пропущено по недогляду при редактировании. Но весь вопрос в том - почему IAR это съел без всяких
претензий и накомпилил чушь???
Причём в lst-файле на этом месте указано: BL <метка> smile3046.gif
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 17:22
Рейтинг@Mail.ru


Страница сгенерированна за 0.01295 секунд с 7
ELECTRONIX ©2004-2016