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

Команда портит регистр

Коллеги, не дайте умом тронуться, одолел меня RISC-V.

Контроллер CH32V307. Ядро QingKeV4 c расширениями rv32imafc и abi = ilp32f судя по мануал. Команда непосредственной загрузки константы в регистр lui a5, 0x40011 кроме загрузки a5 портит ещё и а0.

Вот под отладкой стою на команде.

 01.thumb.png.11bcd0adf7798dcaff95941a7ccda082.png

Теперь делаю один шаг. а5 загружен, а0 сломан.

02.thumb.png.f4913ba0365cd840342e52ca6629b477.png

Команда закодирована правильно согласно талмудам.

03.thumb.png.b6f9ce90b0e3bba19c940bf9d7671c74.png

Подскажите, что происходит? Куда копать?

PS: есть и другие команды, которые так себя ведут...

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


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

прерывания отключены? если нет, то код прерываний точно а0 не портит? 

в стандартном RISCV дебугере есть возможность запрета прерываний в single step - как сделано у китайцев - хз.

-------------------

сохраните а0 в два регистра до и после lui, ну и брек после - сравните эти регистры - точно ли портится от lui (то есть проходите этот код не в single step)

------------------- 

выровняйте эту комманду на 32 (то есть чтоб адрес был 0х438) - nop например перед ней

это не ответ, а что можно попробовать. может там какое-то исключение происходит между шагами дебагера, а код в нем кривой...

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


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

 

19 минут назад, yes сказал:

прерывания отключены?

Код уже в прерывании. Вроде других прерываний не должно поверх быть. Сейчас попробую запретить вообще перед этим местом.

 

19 минут назад, yes сказал:

сохраните а0 в два регистра до и после lui, ну и брек после

Я на С/С++ пишу. Если только ассемблерными вставками грязной лапой залезть...

19 минут назад, yes сказал:

выровняйте эту комманду на 32

Выравнивание ничего не дало.

---------------------------------------------------------------------

Докладываю. Похоже, отладчик гадит. Запрет прерываний немного раньше по коду ничего не меняет. А вот если точку останова поставить чуть позже этой команды, то регистр оказывается не испорчен.

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


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

Software breakpoint или работа через program buffer?

Изменено пользователем one_eight_seven

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


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

Если честно, я ХЗ как оно там внутри работает. Связка CH32V307(SWD) <-> WCH-Link <-> OpenOCD-WCH <-> riscv-none-elf-gdb <-> VisualGDB в Visual Studio.

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


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

Это не ответ на вопрос, а просто поправка опечатки, на последней картинке ошибка, правильно будет опкод = 0x37

Программа без rtos?

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


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

Не, без rtos. Пока просто щупаю. Тут ещё на каждом уровне пилить, пилить и пилить.

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


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

для risc-v есть симулятор неплохой, https://github.com/riscv-software-src/riscv-isa-sim можно использовать как reference

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


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

On 12/23/2022 at 8:18 AM, Immortal_Buka said:

для risc-v есть симулятор неплохой, https://github.com/riscv-software-src/riscv-isa-sim можно использовать как reference

Это SPIKE - до недавнего времени использовался как golden симупятор. Недавно в этом качестве стал использоваться QEMU - https://www.qemu.org/docs/master/system/target-riscv.html

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


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

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

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

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

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

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

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

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

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

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