【雕爷学编程】MicroPython手册之 pyboard 特定端口库 pyb.fault_debug(value)

在这里插入图片描述

MicroPython是为了在嵌入式系统中运行Python 3编程语言而设计的轻量级版本解释器。与常规Python相比,MicroPython解释器体积小(仅100KB左右),通过编译成二进制Executable文件运行,执行效率较高。它使用了轻量级的垃圾回收机制并移除了大部分Python标准库,以适应资源限制的微控制器。

MicroPython主要特点包括:
1、语法和功能与标准Python兼容,易学易用。支持Python大多数核心语法。
2、对硬件直接访问和控制,像Arduino一样控制GPIO、I2C、SPI等。
3、强大的模块系统,提供文件系统、网络、图形界面等功能。
4、支持交叉编译生成高效的原生代码,速度比解释器快10-100倍。
5、代码量少,内存占用小,适合运行在MCU和内存小的开发板上。
6、开源许可,免费使用。Shell交互环境为开发测试提供便利。
7、内置I/O驱动支持大量微控制器平台,如ESP8266、ESP32、STM32、micro:bit、掌控板和PyBoard等。有活跃的社区。

MicroPython的应用场景包括:
1、为嵌入式产品快速构建原型和用户交互。
2、制作一些小型的可 programmable 硬件项目。
3、作为教育工具,帮助初学者学习Python和物联网编程。
4、构建智能设备固件,实现高级控制和云连接。
5、各种微控制器应用如物联网、嵌入式智能、机器人等。

使用MicroPython需要注意:
1、内存和Flash空间有限。
2、解释执行效率不如C语言。
3、部分库函数与标准版有差异。
4、针对平台优化语法,订正与标准Python的差异。
5、合理使用内存资源,避免频繁分配大内存块。
6、利用原生代码提升速度关键部位的性能。
7、适当使用抽象来封装底层硬件操作。

总体来说,MicroPython让Python进入了微控制器领域,是一项重要的创新,既降低了编程门槛,又提供了良好的硬件控制能力。非常适合各类物联网和智能硬件的开发。

在这里插入图片描述

pyboard是一个紧凑而强大的电子开发板,运行MicroPython。它通过USB连接到您的PC,为您提供一个USB闪存驱动器来保存Python脚本,以及用于即时编程的串行Python提示符(REPL)。需要微型 USB 电缆。适用于 Windows、Mac 和 Linux。

MicroPython是对Python(版本3.4)编程语言的完全重写,因此它适合并在微控制器上运行。它包括许多优化,因此它可以高效运行并使用很少的 RAM。

MicroPython在pyboard上运行裸机,本质上是一个Python操作系统。内置 pyb 模块包含用于控制板上可用外设的函数和类,例如 UART、I2C、SPI、ADC 和 DAC。观看此视频,了解 pyboard 的概述。

在这里插入图片描述
MicroPython的pyb.fault_debug(value)是一个用来启用或禁用硬故障调试的函数。它的主要特点、应用场景和需注意事项如下:

主要特点:pyb.fault_debug(value)函数可以控制当电路板出现硬故障时的行为。硬故障是指底层系统中存在致命错误,例如无效的内存访问。如果value参数是False,则电路板将在出现硬故障时自动重置。如果value是True,则当电路板出现硬故障时,它将打印寄存器和堆栈跟踪,并且无限期地循环LED。默认值是禁用的,即自动重置。

应用场景:pyb.fault_debug(value)函数可以用来在开发或调试时检查程序中是否有潜在的错误或异常。例如,可以使用pyb.fault_debug(value)函数来开启硬故障调试,然后尝试执行一些可能出错的操作,观察电路板的反应和输出。

需注意事项:pyb.fault_debug(value)函数只能在启动时调用一次,之后不能更改。另外,pyb.fault_debug(value)函数可能会影响某些外设的工作,例如SD卡或LCD屏幕,因此在使用之前应该确保外设处于安全的状态。

下面给出三个使用pyb.fault_debug(value)函数的实际运用程序案例:

案例一:使用pyb.fault_debug(value)函数开启硬故障调试,并尝试执行除以零的操作

# 导入所需模块
import pyb

# 开启硬故障调试
pyb.fault_debug(True)

# 尝试执行除以零的操作
result = 1 / 0
print(result)

案例二:使用pyb.fault_debug(value)函数关闭硬故障调试,并尝试执行无效的内存访问

# 导入所需模块
import pyb

# 关闭硬故障调试
pyb.fault_debug(False)

# 尝试执行无效的内存访问
ptr = 0x12345678 # 一个无效的地址
result = ptr[0] # 读取该地址的内容
print(result)

案例三:使用pyb.fault_debug(value)函数开启硬故障调试,并尝试执行一个死循环

# 导入所需模块
import pyb

# 开启硬故障调试
pyb.fault_debug(True)

# 尝试执行一个死循环
while True:
    pass # 不做任何事情

这个程序的目的是演示当电路板出现硬故障时的行为。硬故障是指底层系统中存在致命错误,例如无效的内存访问。如果开启了硬故障调试,当电路板出现硬故障时,它将打印寄存器和堆栈跟踪,并且无限期地循环LED。这可以帮助开发者或调试者找出错误的原因和位置。

在这个程序中,由于执行了一个死循环,电路板将无法正常运行,导致硬故障。因此,电路板将显示如下的输出,并且LED将不断闪烁:

HardFault
r0 : 00000000 r1 : 00000000 r2 : 00000000 r3 : 00000000
r12: 00000000 lr : 0800a9c9 pc : 0800a9ca psr: 61000000
bfar: e000ed38 cfsr: 00008200 hfsr: 40000000 dfsr: 0000000a
afsr: 00000000
Stack:
2001ff90: 0800a9c9 0800a9c9 fffffffd fffffffd fffffffd fffffffd fffffffd fffffffd
2001ffb0: fffffffd fffffffd fffffffd fffffffd fffffffd fffffffd fffffffd fffffffd
2001ffd0: fffffffd fffffffd fffffffd fffffffd fffffffd fffffffd fffffffd fffffffd
2001fff0: fffffffd fffffffd fffffffd ffffffff

案例四:设置故障监测点:

import pyb

pyb.fault_debug(1)

#在这里设置监测点

if something_wrong:
pyb.hard_reset()

案例五:调试脚本过程:

import pyb

pyb.fault_debug(1)

for i in range(10):
print(i)
if i == 5:
pyb.hard_reset()

案例六:监测软件故障:

import pyb

pyb.fault_debug(1)

try:
do_something_risky()
except Exception as e:
print("Error:", e)
pyb.hard_reset()

通过设置监测点并触发硬复位,可以debug程序和检查错误点。这些例子演示了它在调试和错误监测上的用法。

案例七:故障调试日志记录:

import pyb

# 设置故障调试模式为1,启用日志记录
pyb.fault_debug(1)

# 执行一些可能引发故障的代码
# 例如,访问不存在的变量或模块

# 查看故障调试日志
print(pyb.fault_debug_info())

在这个例子中,我们使用pyb.fault_debug()函数将故障调试模式设置为1,启用日志记录。然后,我们执行一些可能引发故障的代码,例如访问不存在的变量或模块。最后,我们使用pyb.fault_debug_info()函数查看故障调试日志,以了解故障的详细信息。

案例八:远程故障调试:

import pyb
import urequests

# 检查远程调试命令
response = urequests.get("http://example.com/debug")
if response.status_code == 200 and response.text == "enable":
    pyb.fault_debug(1)
else:
    pyb.fault_debug(0)

# 执行一些代码

# 查看故障调试日志
print(pyb.fault_debug_info())

在这个例子中,我们使用urequests模块来发送HTTP请求并获取远程调试命令。我们通过检查远程服务器上的命令来决定是否启用故障调试模式。如果收到有效的“enable”命令,我们使用pyb.fault_debug()函数将故障调试模式设置为1,启用日志记录。否则,我们将故障调试模式设置为0,禁用日志记录。然后,我们执行一些代码并使用pyb.fault_debug_info()函数查看故障调试日志。

案例九:条件性故障调试:

import pyb

# 执行一些代码

# 检查是否需要进行故障调试
if some_condition:
    pyb.fault_debug(1)

# 执行更多代码

# 查看故障调试日志
print(pyb.fault_debug_info())

在这个例子中,我们在执行一些代码后检查是否需要进行故障调试。如果某个条件满足,我们使用pyb.fault_debug()函数将故障调试模式设置为1,启用日志记录。然后,我们执行更多的代码并使用pyb.fault_debug_info()函数查看故障调试日志。

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

驴友花雕

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值