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

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

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

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

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

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值