can中断里打断点异常

can中断里打断点异常,第1张

在Python编程语言中,以下是能够引起"can中断里打断点异常"这一问题的一些原因和可能的解决方法:

原因:

1.代码中存在语法错误或逻辑错误。

2.代码中某些部分运行速度过慢或者出现死循环,导致内存占用过大,从而导致程序崩溃。

3.代码出现溢出或栈溢出等异常。

解决方法:

1.首先需要检查代码中是否存在语法或逻辑错误,应该逐条排查代码并进行调试和测试。同时,我们可以使用Python的调试工具,例如pdb或ipdb,在打断点的时候会详细展示异常信息,帮助我们更加准确定位问题。

2.检查代码运行的速度和内存占用情况,特别是在对大数据集进行处理,或大规模循环嵌套和占用大量内存的情况下,应该注重运用优化和算法优化来减轻程序的资源占用,尽量避免程序崩溃。

3.当程序发生溢出或栈溢出等异常时,应该检查代码中的类型和函数使用方式是否正确,并提高代码健壮性,避免这种异常的发生。比如可以使用try-except语句来捕获异常,避免程序直接崩溃。

前文已经描述STM32CubeIDE的一些基本 *** 作,基于前两篇文章,已经可以完成配置工程然后编译下载的目的,但是STM32开发,最重要的是实时调试,这一章描述STM32CubeIDE通过ST-Link调试,并对照Keil进行对比。

在Keil中,如果想调试,只需要将调试器和MCU连接好后,按下Keil中的这个按钮即可,随后程序会自动暂停到main函数第一行。

Keil中进入调试按钮

在STM32CubeIDE中,选中工程的情况下,也可以在工程上右键点击如图红框所示选项或者菜单栏上的按钮进入调试状态。

STM32CubeIDE进入调试

如果该工程是第一次进入调试状态,则会d出下图所示配置窗口。

调试配置窗口

在Keil中也有类似的配置,我们对比进行说明,下图左图就是STM32CubeIDE的调试器配置栏,右图是Keil的调试配置栏目。

下列所有图片中,左图是STM32CubeIDE的页面截图,右图是Keil中对应页面截图,下文不在说明。

调试器配置栏

Keil中支持很多的调试器,每种调试器都有自己不同的协议和优缺点。STM32CubeIDE目前只支持三种调试器,可通过该选项配置,其中ST-Link、J-Link,对于搞单片机的人来说再熟悉不过了,OpenOCD是一个开源的功能强大的调试器,如果要使用别的调试器,例如CMSIS-DAP等,可以通过ST-Link(OpenOCD)来实现。

选择调试器

接口和频率选择,现在搞STM32一般都使用三线的SWD,特别是ST-Link OB,JLink OB出现后,方便、小巧,板子上也只需要留出SWDIO、SWCLK和GND三根线就行,很难看见JTAG口了。如果板子调试线过长或者干扰太大,可以尝试降低频率提高通信成功率。

接口和频率配置

复位选项,这里介绍下STM32CubeIDE中的各个选项含义,Keil中的选项可自行参考:https://www.keil.com/support/man/docs/ulink2/ulink2_ctx_debug.htm#!#%2Fconnect

复位选项

要想了解这些选项,必须先了解NRST异步复位引脚,STM32处理器对外都包含了一个NRST引脚,只要拉低这个引脚,MCU就会处于复位状态,复位外设和内核。而在ST-Link调试器中,对外就包含了一根NRST线,用于连接到目标硬件的NRST *** 作目标处理器复位。

NRST引脚

Connect under reset:先拉低NRST线复位MCU,然后连接MCU,然后拉高NRST线MCU退出复位状态。

Software system reset:先连接到MCU,然后向MCU寄存器写命令来复位MCU,复位内核和外围设备。

Hardware reset:先拉低NRST线复位MCU,然后拉高NRST线退出复位状态,接着连接MCU。

Core reset:向MCU寄存器写命令来复位MCU,只复位内核,不复位外围设备。

None:程序已经下载运行的情况下,不复位,直接连接MCU。

可以根据实际情况选择,如果有NRST线,当然是选择Connect under reset比较好,例如当没有配置处理的Debug口或者Debug口被占用的时候,这时候普通的方式已经无法连接到处理器,就可以使用这种方式烧录入新的程序释放Debug口。如果没有NRST,那就选择Software system reset。不过只要SWDIO、SWCLK、GND线连接和功能正常,不管选那种方式,总能进入调试模式。

配置相关的文件存放在.launch文件中,如果没有这个文件,进入调试时就会d出配置窗口。

launch文件

点击Debug按钮进入调试,此时如果连接正确的情况下控制台会d出若干信息,接着将程序停到main函数第一行。

进入调试

通过左上角的这些按钮,就可以达到如同Keil的单步跳过、单步进入、暂停、运行等 *** 作。这里有一个小bug,一定要等停到main函数第一行时才可以 *** 作调试命令,如果 *** 之过急,在还没停到第一行就开始就进行 *** 作,此时调试会异常退出。

点击如图所示的Resume,快捷键F8,程序开始运行。

常用调试命令

打断点和Keil一样,在程序左侧双击,程序就会运行到断点处停止。

打断点

将鼠标移动到断点上方,接着就会d出一个小框,点击小框右侧如下图所示的图标,就可以删除这个断点。

删除断点

如果有很多个断点需要删除,就可以通过调试界面右侧进行全部删除。

删除所有断点

如果找不到上图这个视图界面,可以通过如下图所示的菜单栏打开。

打开各种视图

同Keil一样,断点的数量有上限,太多的断点将会报错。

在程序中定义了三个变量,分别为全局变量、静态变量和局部变量。并在主函数中让其自增,用来说明STM32CubeIDE中的查看变量功能。

增加三个变量

在Expressions、现场表达式这两个试图中,都将三个变量添加进去,可以看到,在程序不暂停的情况下,现场表达式可以实时查看全局变量的变化情况,局部变量和静态变量则无法查看,而Expressions则无法实时查看任何变量。

现场表达式视图

Expressions视图

当程序暂停的时候,将鼠标移动到变量名称上就会自动d出当前变量的值。

查看变量

此时在右侧Expressions试图也可以看到添加进去的变量。

Expressions试图

此外,还可以通过SFRs查看处理器各个外设寄存器的值。

SFRs视图

也可以通过Registers查看内核各个寄存器的值。

Registers视图

另外Keil中可以配置下载程序时是否擦除所有Flash、不拆除、部分扇区,这在STM32CubeIDE中是没有的(也有可能是我没找到),需要搭配STM32CubeProg实现。

从调试体验这一块来说,还是Keil体验上来的比较好,各个功能也比较人性化,STM32CubeIDE的调试各种 *** 作接口还有可优化的空间,但目前也能满足需求,最重要的还是免费。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12192389.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存