keil早就能仿真看变量波形图啦

                背景:

        以前调试仿真,总是搭配上位机其他串口助手软件才能监控变量变化趋势,但其实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 开源地址:

keil-uvsc-fix: keil-uvsc-fix 基于官方版本,增加变量波形图显示,可用于实时查看变量变化趋势。 项目用vs2019编译,使用原生控件实现波形图表,可运行x64平台。 详细说明可参考 https://blog.youkuaiyun.com/newidea07/article/details/148569489

可执行文件下载:

提供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-优快云博客

 

 

正点原子的定时器中断实验通常是在嵌入式开发环境中进行,如Keil uVision 5(简称Keil5)。以下是一个简单的步骤指南: 1. **环境配置**: - 安装Keil MDK (uVision集成开发环境) 和对应的硬件支持包。 - 创建一个新的项目,并选择一个适合的板级支持包(BSP),比如STM32Cube。 2. **添加定时器组件**: - 打开`SystemClock_Config.c`或`main.c`文件,找到定时器初始化的部分。通常有TIM1、TIM2等定时器可以选择,根据实际项目需求设置定时器的预设值、分频系数等。 3. **启用中断**: - 在`timercallback`函数中处理定时器溢出中断(例如TIMx_IRQHandler()),并在适当的位置开启中断。 ```c NVIC_EnableIRQ(TIMx_IRQn); // TIMx为你所选定时器的ID ``` 4. **编写中断服务程序**: - 在`timercallback`函数中,可以操作数据寄存器来更新计数,然后根据需要执行相应的任务(例如LED闪烁、打印信息等)。 5. **设置断点和调试**: - 设置定时器中断触发的断点,进入中断服务程序查看内部变量是否按预期改变。 - 使用Keil5的断点和单步调试功能观察程序运行过程,检查定时器中断引发的波形。 6. **生成波形图**: - 如果想看到详细的波形,可能需要借助外接示波器或者通过软件工具(如STM32CubeMX的Real-Time Plotter功能,或者第三方插件如In-Circuit Debugger的Scope模块)。记录下中断发生的时间和CPU状态,然后在波形图编辑器中模拟。 7. **保存和测试**: - 测试代码是否稳定工作,验证定时器中断是否按照设定的频率触发,以及中断后的处理效果。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值