VladislavS 20 December 22, 2022 Posted December 22, 2022 · Report post Коллеги, не дайте умом тронуться, одолел меня RISC-V. Контроллер CH32V307. Ядро QingKeV4 c расширениями rv32imafc и abi = ilp32f судя по мануал. Команда непосредственной загрузки константы в регистр lui a5, 0x40011 кроме загрузки a5 портит ещё и а0. Вот под отладкой стою на команде. Теперь делаю один шаг. а5 загружен, а0 сломан. Команда закодирована правильно согласно талмудам. Подскажите, что происходит? Куда копать? PS: есть и другие команды, которые так себя ведут... Quote Share this post Link to post Share on other sites More sharing options...
yes 4 December 22, 2022 Posted December 22, 2022 · Report post прерывания отключены? если нет, то код прерываний точно а0 не портит? в стандартном RISCV дебугере есть возможность запрета прерываний в single step - как сделано у китайцев - хз. ------------------- сохраните а0 в два регистра до и после lui, ну и брек после - сравните эти регистры - точно ли портится от lui (то есть проходите этот код не в single step) ------------------- выровняйте эту комманду на 32 (то есть чтоб адрес был 0х438) - nop например перед ней это не ответ, а что можно попробовать. может там какое-то исключение происходит между шагами дебагера, а код в нем кривой... Quote Share this post Link to post Share on other sites More sharing options...
VladislavS 20 December 22, 2022 Posted December 22, 2022 · Report post 19 минут назад, yes сказал: прерывания отключены? Код уже в прерывании. Вроде других прерываний не должно поверх быть. Сейчас попробую запретить вообще перед этим местом. 19 минут назад, yes сказал: сохраните а0 в два регистра до и после lui, ну и брек после Я на С/С++ пишу. Если только ассемблерными вставками грязной лапой залезть... 19 минут назад, yes сказал: выровняйте эту комманду на 32 Выравнивание ничего не дало. --------------------------------------------------------------------- Докладываю. Похоже, отладчик гадит. Запрет прерываний немного раньше по коду ничего не меняет. А вот если точку останова поставить чуть позже этой команды, то регистр оказывается не испорчен. Quote Share this post Link to post Share on other sites More sharing options...
one_eight_seven 0 December 22, 2022 Posted December 22, 2022 (edited) · Report post Software breakpoint или работа через program buffer? Edited December 22, 2022 by one_eight_seven Quote Share this post Link to post Share on other sites More sharing options...
VladislavS 20 December 22, 2022 Posted December 22, 2022 · Report post Если честно, я ХЗ как оно там внутри работает. Связка CH32V307(SWD) <-> WCH-Link <-> OpenOCD-WCH <-> riscv-none-elf-gdb <-> VisualGDB в Visual Studio. Quote Share this post Link to post Share on other sites More sharing options...
Lagman 0 December 22, 2022 Posted December 22, 2022 · Report post Это не ответ на вопрос, а просто поправка опечатки, на последней картинке ошибка, правильно будет опкод = 0x37 Программа без rtos? Quote Share this post Link to post Share on other sites More sharing options...
VladislavS 20 December 22, 2022 Posted December 22, 2022 · Report post Не, без rtos. Пока просто щупаю. Тут ещё на каждом уровне пилить, пилить и пилить. Quote Share this post Link to post Share on other sites More sharing options...
Immortal_Buka 0 December 23, 2022 Posted December 23, 2022 · Report post для risc-v есть симулятор неплохой, https://github.com/riscv-software-src/riscv-isa-sim можно использовать как reference Quote Share this post Link to post Share on other sites More sharing options...
xvr 11 December 26, 2022 Posted December 26, 2022 · Report post 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 Quote Share this post Link to post Share on other sites More sharing options...