ISYSTEM调试实践5--基本仿真控制和高阶断点调试技巧

本文介绍了WinIDEA仿真器的基本操作和断点设置,包括执行断点、条件断点、数据访问断点、硬件断点和软件断点的使用。特别强调了条件断点的复杂逻辑设置和Python脚本在调试中的应用,允许用户自定义停止条件和自动化测试。此外,还讨论了硬件断点和软件断点的优缺点及其切换方法,以及数据访问断点对变量和内存监控的功能。
该文章已生成可运行项目,

在这里插入图片描述
本文介绍仿真的基本操作,和断点的设置。前面几篇比较简单,但凡有过其他仿真器调试经验,都应该比较熟悉。这篇后面会重点介绍几种复杂断点的使用方法,方便解决更复杂的调试问题。
我们先将例程下载到芯片内,这里可以直接Reset或者使用下载。

1 仿真操作

1.1下载

在这里插入图片描述

1.2启动

在这里插入图片描述

1.3单步控制

在这里插入图片描述1:单步进入函数
2:单步不进入函数
3:运行至停下,注意,和常见的编译器不同,这里停下是指到你的光标位置,不用打上断点,非常方便
4:Run Until Return 就是直接运行到函数末尾·
在这里插入图片描述

2 断点设置

2.1基本操作

和常用的调试器类似,我们可以在Editor窗口,Disassembly 窗口增加断点,并在Breakpoints 窗口管理我们的断点。
在这里插入图片描述

也可以通过设置添加、删除、使能、失能
在这里插入图片描述

2.1断点类型

到这里,其实ISYSTEM和之前用的编译器,如IAR,KEIL,S32Ds都差不多,但是作为一个专业的高端的牛逼的调试器,功能远远不限于此,下面介绍ISYSTEM提供给我们的复杂断点功能。
winIDEA提供了5种断点,分别是
Execution BPs :当代码到这一行,会停下来
Conditional BPs :代码满足执行条件会停下来
Data Access BPs :当这个数据被访问,会停下来
Hardware Breakpoints :硬件断点
Software Breakpoints :软件断点
打开 Debug menu /Breakpoints,断点的管理如下图

在这里插入图片描述最上面红框范围是Execution BPs 的信息,也就是我们最常用的断点类型,可以在这里统一管理。

2.2 Conditional BPs

条件断点可以设置这行代码运行几次,来决定是否停下来。
比如我们在main周期循环里设置两个断点,分别是第22行和25行,第一个断点是普通的执行断点,第二个是条件断点

-在第二个断点使能Condition选项,设置运行的次数,这时候启动,每次运行到22行程序都会停下来,但是当运行25行第5次的时候,程序才会停下,并由提示框提醒。

在这里插入图片描述
你甚至可以在Expression窗口添加逻辑判断,基于c语言语法
在这里插入图片描述比如我们直接使用iCounter变量,当它大于等于某一个值时,让它停下。利用这个方法,我们可以利用&& || ! ()设置复杂的逻辑条件。
甚至你可以在action添加python脚本,通过触发脚本来实现联调,这里有非常大的空间可以发挥,比如你外部连接一个数字IO,或者其他的调试设备,或者can卡,来实现对你的控制器测试。

2.3 脚本编写

这部分功能我觉原以为得是调试天花板级别了
它可以载入脚本,用户使用python 调用isystem提供的isystem.connect库使用接口。它真的带来了无限可能,有了python加成,开发人员可以利用python脚本后台调用更多的设备,比如CAN卡,示波器,数字IO等等设备,通过这些设备方便给被测板卡注入数据和故障,并收集板卡的输出状态。毕竟现在几乎所有的数字化仪器都可以用python来调用。
同时,针对多核调试,仅仅通过单步仿真也很难捕获故障点,所以也可以使用脚本控制器多核的运行,方便排查问题。

本人能力有限,仅作基本的介绍,更复杂的应用留给各位大佬。
进入watch窗口,右击变量名,创建初始化脚本。
软件会创建一个脚本模板。
在这里插入图片描述
在这里插入图片描述
脚本编写完成后,可以通过Tool工具栏下的选项执行操作脚本。或者将脚本添加到conditional breakpoints内

在这里插入图片描述
在这里插入图片描述如果你在脚本最后一行加上debug.run(),程序会继续往前执行,不停下来。
在这里插入图片描述

在脚本里,你可以实现WINIDE软件的几乎全部的操作,python的脚本库说明官网给出了,链接在下面。

https://www.isystem.com/downloads/winIDEA/SDK/iSYSTEM.Python.SDK/documentation/isystem-connect-api/index.html

2.4 Hardware Breakpoints和Software Breakpoints

winIDEA默认使用硬件中断,它的实现原理是利用比较CPU PC程序指针是否和断点的偏移量是否一致来判断是否运行到了断点。
在这里插入图片描述这种速度最快,但是受限于比较器的数量,所以硬件中断是有数量限制,大大影响了我们的调试。
例如,当你添加了足够多的断点以后,软件会报错提醒。
在这里插入图片描述

为了解决这个问题,ISYSTEM提出了Software Breakpoints的方法,当给某一行添加了软件断点后,这一行会被汇编调试命令替换掉,当运行到这一行代码,停下后,再把原来的代码替换回去,这样就断点就不受数量限制。
但是这种方法也有明显的缺点,就是会让程序运行变慢,而且会增加芯片的压力。所以最好的方法还是使用硬件中断,然后利用Condition结合逻辑判断来实现你想要的断点效果。

在这里插入图片描述在这里插入图片描述
使用方法是Hardware ->use Software Breakpoints,然后再新增断点就可以了,你会发现每次新增断点都非常卡,这是因为软件需要更改你的代码,替换成调试命令,相当于重新烧写芯片flash。

在这里插入图片描述
每次新增断点都对当前块进行重写。说实话,除非特别需要,不要使用软件中断
在这里插入图片描述

2.5 Data Access BPs

顾名思义,这种断点就是基于数据被访问,被写入或者读取,或均出现,都可以触发。对象可以是一个变量或者一段内存。
假如你想监控一个变量,在Watch窗口内,对变量右击,打开菜单,选择set write breakpoints
在这里插入图片描述然后我们启动运行,你会发现,每次当这个变量被写入的时候,程序会停下。
在这里插入图片描述
这是一个快捷操作,完整的设置在hardware breakpoints 菜单内设置。

在这里插入图片描述可以点击左下角wizard进入设置向导。
选择运行的程序
在这里插入图片描述进入
data access
在这里插入图片描述

点击…可以调出变量菜单,这里包含了程序所有的变量,甚至宏定义地址
在这里插入图片描述
设置触发断点的方式是读、写还是均触发。
甚至你还可以设置变量的MASK用来筛选该变量的值范围。

在这里插入图片描述
设置完成后如右图所示

在这里插入图片描述当然你也可以在该界面里直接修改。

启动运行后,程序会停在这里。和设置的初衷一致在这里插入图片描述

本文章已经生成可运行项目
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值