背景:
以前调试仿真,总是搭配上位机其他串口助手软件才能监控变量变化趋势,但其实keil早在2018年以前已经开放远程调试接口,并提供远程仿真demo—— UVSC_Tester (文末提供源码项目链接)。

只需要在keil中打开Edit->Configuration菜单下,使能UVSOCK功能,便可远程控制仿真。

不过Demo只是提供最基础的用法展示,没有变量波形图示波器功能。刚好我对着有需求就给他开发一下下。另外官网项目的文档说明不太友好(估计是这原因导致一直没推开),我还是通过其他开源项目(python版本的)才好理解它基于sock通信的协议。
总之基于keil-uvsc项目,创建keil-uvsc-fix版本,增加了变量波形示波器功能,基于c++原生控件,x64x86均可使用。
使用方式:
本项目在performance选项卡里的单变量获取demo中,增加定时获取按钮,按指定频率间隔查询获取变量最新状态,并根据缓存大小,动态实时显示变量波形。

通信协议的解析:
为方便你再开发,这里再提供一下与keil socket通信协议的解析。
通信步骤:
1、发送要获取的变量名称,以获取变量当前内存位置。
2、解析回传变量位置。
3、发送要查询的变量位置
4、解析回传的变量值
5、重复3~4
具体报文例子:
1:发送:查询变量名指令
0000 3e 00 00 00 0a 20 00 00 1e 00 00 00 00 00 00 00 >.... ..........
0010 00 00 00 00 00 00 00 00 00 00 00 00 23 00 7b 00 ............#.{.
0020 00 00 00 00 00 00 00 00 00 00 00 00 0d 00 00 00 ................
0030 20 73 5f 75 38 43 6e 74 46 6f 72 31 73 00 s_u8CntFor1s.
内容解析:
m_nTotalLen(本帧总长度) 4字节, m_eCmd(指令类型) 4字节, m_nBufLen(内容长度) 4字节,
m_cycles(可为0) 4+4字节, m_tStamp(可为0) 4+4字节,
m_Id(可为0,回传值跟随该ID) 4字节, r_cmd(应答的指令类型) 4字节, r_status(0为正常) 4字节,
m_data :(val_type + val_size + length +val)
val_type(变量类型) 4字节
val(回传位置值) 4+4字节
length(变量长度) 4字节
sstr(查询的变量名) 第16字节以后
2:回传:变量内存位置
0000 46 00 00 00 00 30 00 00 26 00 00 00 00 00 00 00 F....0..&.......
0010 00 00 00 00 00 00 00 00 00 00 00 00 23 00 7b 00 ............#.{.
0020 0a 20 00 00 00 00 00 00 03 00 00 00 17 00 00 00 . ..............
0030 00 00 00 00 0e 00 00 00 20 73 5f 75 38 43 6e 74 ........ s_u8Cnt
0040 46 6f 72 31 73 00 For1s.
内容解析:
m_nTotalLen 4字节, m_eCmd 4字节, m_nBufLen 4字节,
m_cycles 4+4字节, m_tStamp 4+4字节,
m_Id 4字节, r_cmd 4字节, r_status 4字节,
m_data :(val_type + val_size + length +val)
val_type 4字节
val 4+4字节
length 4字节
sstr 第16字节以后
3:查询内存位置值
0000 3a 00 00 00 0b 20 00 00 1a 00 00 00 00 00 00 00 :.... ..........
0010 00 00 00 00 00 00 00 00 00 00 00 00 23 00 7b 00 ............#.{.
0020 17 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 ................
0030 00 00 00 00 00 00 00 00 00 00 ..........
内容解析:
m_nTotalLen 4字节, m_eCmd 4字节, m_nBufLen 4字节,
m_cycles 4+4字节,
m_tStamp 4+4字节,
m_Id 4字节,
data :(nAddr 4+4字节, nBytes 4字节)
4:解析回传位置值
0000 41 00 00 00 00 30 00 00 21 00 00 00 00 00 00 00 A....0..!.......
0010 00 00 00 00 00 00 00 00 00 00 00 00 23 00 7b 00 ............#.{.
0020 0b 20 00 00 00 00 00 00 17 00 00 00 00 00 00 00 . ..............
0030 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0040 00
内容解析: .
m_nTotalLen 4字节, m_eCmd 4字节, m_nBufLen 4字节,
m_cycles 4+4字节, m_tStamp 4+4字节,
m_Id 4字节, r_cmd 4字节, r_status 4字节,
m_data :(nAddr 4+4字节, nBytes 4字节, ErrAddr 4+4字节, nErr 4字节,val 第24字节以后)
项目地址:
基于Keil UVSC项目的变量波形项目keil uvsc fix 开源地址:
可执行文件下载:
提供x64、x86版本下载:
keil-uvsc-fix · newideas07/keil-uvsc-fix - Gitee.com
参考资料:
Arm Keil UVSC官方版本链接(下载实测项目缺个头文件,但有html文档):
https://developer.arm.com/documentation/kan198/latest/
非官方但却完整的项目:
https://gitee.com/LeeDvan/keil-uvsc
python版本的KeilAssistant:
KeilAssistant - 示波器_keil uvsock-优快云博客
8718

被折叠的 条评论
为什么被折叠?



