суть этой песни
1. у LONGAN NANO есть косяг (вообще то не у платы а у желания ее юзать как rvlink) - в кЕтайской траскрипции (код rvlink для longan nano)почему то usart0 и SRST попадают на одну ногу - pa9. в результат никакого системного ресета у житага нет и поэтому я имел ситуацию 'мы пахали - я и трактор', все после прошивки микросхемы работает без отладчика, с отладчиком улет в трап. причина проста - при перезагрузке питанием - системный ресет сбрасывает микросхему и все чикпок, если это под отладчиком - ресета нет и и все глобальные конструкторы падают еще в crt коде - что логично.
2. сам код по идеологии содран с blackmagic debug probe но с кЕайским видением локальной вселенной. для сборки требуется наличие компилятора для проца gd32fv103, и наличие libc - тут они берут функции работы со строками и строковый ввод-вывод. это нужно чтобы с gdb обмениватся по протоколу MI. в этом месте мне это категорически не нравится, поэтому я забил в код свою версию функций строк и printf - оно побыстрее и без говна (в моей версии нету гуляния по стеку). тесть код эмулятора не имеет внешних зависимостей и его можно собрать в любых условиях - был бы компиллер и ничего более.
в итоге имеем рабочий ресет на pa9, и рабочий vcom для вывода отладочной информации с отлаживаемой платки на pb6 pb7.
пока возюкался с этим вопросом сделал легковесный аналог iostream
osstream_t<usart_init, usart_deinit, usart_write, usart_write_buff > log ;
log.clear();
log.color_green();
log << "cpu clock "<< rcu.ck_sys_freq() << "\n" ;
log << "ahb clock "<< rcu.ahb_clock_freq() << "\n" ;
log << "apb1 clock "<< rcu.apb1_clock_freq() << "\n" ;
log << "apb2 clock "<< rcu.apb2_clock_freq() << "\n" ;
log << "usart boud "<< usart0.boud() << "\n\n" ;
удобненько. сделал поддержку некоторых команд VT100 и поэтому можно будет делать "консольные графические" интерфейсы ;) пожже выложу со всем барахлом.
longan-nano_gd32vf103.binсобсно прошивочка
кому интересно вот диф от оригинала на сегодняшнюю дату
по умолчанию vcom отключен - нужно ему сказать в сеансе GDB
mon rvl vcom on
он запомнит это соcтояние и будет запускать vcom