首页 > 其他分享 >《DNK210使用指南 -CanMV版 V1.0》第十七章 machine.WDT类实验

《DNK210使用指南 -CanMV版 V1.0》第十七章 machine.WDT类实验

时间:2024-08-05 15:16:29浏览次数:13  
标签:看门狗 machine V1.0 喂狗 WDT context 超时

第十七章 machine.WDT类实验

1)实验平台:正点原子DNK210开发板

2)章节摘自【正点原子】DNK210使用指南 - CanMV版 V1.0

3)购买链接:https://detail.tmall.com/item.htm?&id=782801398750

4)全套实验源码+手册+视频下载地址:http://www.openedv.com/docs/boards/k210/ATK-DNK210.html

5)正点原子官方B站:https://space.bilibili.com/394620890

6)正点原子K210技术交流企鹅群:605557868

在上一章实验中,简单介绍了machine模块以及machine模块中的部分函数,本章将介绍machine模块中的WDT类,即看门狗类。通过本章的学习,读者将学习到machine模块中WDT类的使用。
本章分为如下几个小节:
17.1 machine.WDT类介绍
17.2 硬件设计
17.3 程序设计
17.4 运行验证

17.1 machine.WDT类介绍
machine.WDT类是machine模块内提供的类,该类主要用于访问和控制Kendryte K210硬件上的看门狗,看门狗主要用于在应用程序崩溃且最终进入不可恢复的状态时重启系统,一旦看门狗被开启,应用程序就应当每间隔一段不超过设定的时间对看门狗进行喂狗操作,否则,看门狗产生一个看门狗超时中断,在看门狗超时中断回调函数中,应用程序还有一次喂狗的机会,若应用程序使用没有对看门狗进行喂狗操作,看门狗将在下一次超时时产生一次看门狗复位,使得系统重新启动。

machine.WDT类提供了WDT构造函数,用于创建一个WDT对象,WDT构造函数如下所示:

class WDT(id=0, timeout=5000, callback=None, context=None)

通过WDT构造函数可以通过指定参数创建并初始化一个WDT对象。

id指的是看门狗的编号,可以是WDT.WDT_DEVICE_0或WDT.WDT_DEVICE_1,它们分别对应了Kendryte K210硬件上的看门狗0和看门狗1。

timeout指的是看门狗的超时时间,即最长的不喂狗超时时间。

callback指的是在看门狗超时后执行的回调函数。

context指的是传递给回调函数的参数,可通过WDT.context()方法获取。WDT对象创建成功后,便开始计数。

需要注意的是,machine模块内的回调函数均在硬件中断的上下文中执行。

WDT构造函数的使用示例如下所示:

from machine import WDT

def wdt_timeout_cb(wdt):
    print("WDT timeout!")

wdt0 = WDT(id=WDT.WDT_DEVICE_0, timeout=2000, callback=wdt_timeout_cb, context={"id": WDT.WDT_DEVICE_0})

machine.WDT类为WDT对象提供了feed()方法,用于对WDT对象进行喂狗操作,feed()方法如下所示:

WDT.feed()

feed()方法用于对WDT对象进行喂狗操作,进行喂狗操作后,WDT对象的计数将重新开始。

feed()方法的使用示例如下所示:

from machine import WDT
from time

wdt0 = WDT(WDT.WDT_DEVICE_0, timeout=2000)
while True:
    wdt0.feed()
    time.sleep_ms(1000)

machine.WDT类为WDT对象提供了context()方法,用于获取WDT对象超时时传递给WDT对象超时回调函数的参数,context()方法如下所示:

WDT.context()

context()方法用于获取WDT对象超时时传递给WDT对象超时回调函数的参数,这么一来便可在WDT对象的超时回调函数中获取到WDT对象的指定参数。

context()方法的使用示例如下所示:

from machine import WDT

def wdt_timeout_cb(wdt):
    context = wdt.context()
    print("WDT%d timeout!" % (context["id"]))

wdt0 = WDT(WDT.WDT_DEVICE_0, 2000, wdt_timeout_cb, {"id": WDT.WDT_DEVICE_0})

while True:
    pass

machine.WDT类为WDT对象提供了stop()方法,用于停止WDT对象的计数,stop()方法如下所示:

WDT.stop()

stop()方法用于停止WDT对象的计数,停止后,WDT对象便不再计数,系统也不会因应用程序没有计数喂狗而重启。

stop()方法的使用示例如下所示:

from machine import WDT

wdt0 = WDT(WDT.WDT_DEVICE_0, 2000)
wdt0.stop()

while True:
    pass

17.2 硬件设计

17.2.1 例程功能

  1. 创建一个WDT对象,并配置其超时时间为2000毫秒
  2. 按下KEY0按键可对WDT对象进行喂狗操作
  3. 若喂狗次数达5次,则停止WDT对象并退出

17.2.2 硬件资源

  1. 独立按键
    KEY0按键 - IO18
  2. 看门狗0

17.2.3 原理图
本章实验内容,主要讲解machine.WDT类的使用,无需关注原理图。

17.3 程序设计

17.3.1 machine.WDT类
有关machine.WDT类的介绍,请见第17.1小节《machine.WDT类介绍》。

17.3.2 程序流程图

图17.3.2.1 machine.WDT类实验流程图

17.3.3 main.py代码

main.py中的脚本代码如下所示:

from board import board_info
from fpioa_manager import fm
from maix import GPIO
import time
from machine import WDT

fm.register(board_info.KEY0, fm.fpioa.GPIOHS0)
key0 = GPIO(GPIO.GPIOHS0, GPIO.IN, GPIO.PULL_UP)

# WDT超时回调函数
def wdt_timeout_cb(wdt):
    context = wdt.context()
    print("WDT%d timeout!" % (context["id"]))

# 构造WDT对象
wdt0 = WDT(id=WDT.WDT_DEVICE_0, timeout=2000, callback=wdt_timeout_cb, context={"id": WDT.WDT_DEVICE_0})

feed_times = 0
while feed_times < 5:
    if key0.value() == 0:
        time.sleep_ms(20)
        if key0.value() == 0:
            # 对WDT喂狗
            wdt0.feed()
            feed_times += 1
            print("Feed WDT0 %d times." % (feed_times))
            while key0.value() == 0:
                pass
    time.sleep_ms(10)

# 停止WDT
wdt0.stop()

可以看到,首先是初始化使用的独立按键IO,然后定义了一个函数作为WDT的超时回调函数,函数主要实现了打印输出超时的WDT编号。

接着是构造了WDT对象,WDT对象使用的是WDT0,且超时时间为2000毫秒,超时回调函数为上面定义的函数,传入的参数为包含了一个键为“id”值为WDT编号的字典。

再接着就是根据本实验需要实现的功能,以及程序流程图,读取按键状态,并在按键被按下时,对WDT对象进行喂狗操作,且在喂狗达到5次后,停止WDT并结束程序。

17.4 运行验证

将DNK210开发板连接CanMV IDE,并点击CanMV IDE上的“开始(运行脚本)”按钮后,此时,若连续在2000毫秒间隔内按下板载的KEY0按键进行喂狗操作,则能看到“串行终端”窗口打印输出WDT0被喂狗的次数提示,如下图所示:


图17.4.1 “串行终端”窗口打印输出喂狗次数提示

若喂狗次数达到5次,则脚本程序运行完毕。

但若没有在2000毫秒内按下板载的KEY0按键进行喂狗操作,则“串行终端”将打印输出WDT超时的提示,并且WDT将在下一次超时时对Kendryte K210进行复位,此时通过CanMV IDE软件能观察到,原本处于“已连接”状态的Kendryte K210设备变为了“未连接”状态,如下图所示:


图17.4.2 设备断开连接

标签:看门狗,machine,V1.0,喂狗,WDT,context,超时
From: https://www.cnblogs.com/zdyz/p/18343291

相关文章

  • Machine Learning Operations
    MachineLearningOperationshttps://ml-ops.org/WithMachineLearningModelOperationalizationManagement(MLOps),wewanttoprovideanend-to-endmachinelearningdevelopmentprocesstodesign,buildandmanagereproducible,testable,andevolvableML-......
  • 全面弄懂少儿编程与信息学奥赛-V1.0版
    全面弄懂少儿编程与信息学奥赛-V1.0版本次讲述话题都为作者自己学编程以及所在专业,行业,以及教学经验和实践来原创撰写,不保证100%正确,但是保证99%的相对正确,同样,我希望任何人去看待任何问题都理性思考,独立思考,自己去评判别人说的是否有道理,这个世界上任何事都没有绝对的对与错,但......
  • 【详细版】Spring Tips: Spring Statemachine
    SpringTips:SpringStatemachine大纲引言介绍SpringStateMachine及其重要性解释状态机的基本概念和用途SpringStateMachine概述状态机的定义和功能状态机的应用场景SpringStateMachine的DSL和特性创建和配置SpringStateMachine使用start.spring.io创建......
  • [ABC325D] Printing Machine
    这题主要是题面不知道为什么会有两个版本。//[x,y]某种颜色编号i只能放在一个区间内。。//且i之间不能冲突。。。贴份代码。。这题大部分都写的很乱。。我看题解。`include<bits/stdc++.h>usingnamespacestd;defineintlonglongdefinell__int128_tdefinear......
  • 《DNK210使用指南 -CanMV版 V1.0》第十六章 machine模块实验
    第十六章machine模块实验1)实验平台:正点原子DNK210开发板2)章节摘自【正点原子】DNK210使用指南-CanMV版V1.03)购买链接:https://detail.tmall.com/item.htm?&id=7828013987504)全套实验源码+手册+视频下载地址:http://www.openedv.com/docs/boards/k210/ATK-DNK210.html5)正点......
  • 《DNK210使用指南 -CanMV版 V1.0》第十五章 按键中断实验
    第十五章按键中断实验1)实验平台:正点原子DNK210开发板2)章节摘自【正点原子】DNK210使用指南-CanMV版V1.03)购买链接:https://detail.tmall.com/item.htm?&id=7828013987504)全套实验源码+手册+视频下载地址:http://www.openedv.com/docs/boards/k210/ATK-DNK210.html5)正点原......
  • CNC turning and milling machine that can be used as a lathe and a milling machin
    ThecurrentCNCturningandmillingmachinetoolsaremainlymanifestedin2differenttypes,oneisbasedontheenergyormovementofthedifferentprocessingmethodsofthecomposite;KairnleyTheotherisbasedontheprincipleofprocessconcentratio......
  • FP-growth算法药品货位优化系统操作手册V1.0
    未经授权严禁商用,科研合作请联系作者。Email:[email protected]作者:辛昊,青岛大学附属青岛市第三人民医院药学部指导老师:曹建华,青岛大学附属青岛市第三人民医院药学部李春凯,青岛大学附属青岛市第三人民医院药学部思路及创意来源:王丰,西安交通大学医学院第一附属医院药学部......
  • 《DNK210使用指南 -CanMV版 V1.0》第十四章 按键输入实验
    第十四章按键输入实验1)实验平台:正点原子DNK210开发板2)章节摘自【正点原子】DNK210使用指南-CanMV版V1.03)购买链接:https://detail.tmall.com/item.htm?&id=7828013987504)全套实验源码+手册+视频下载地址:http://www.openedv.com/docs/boards/k210/ATK-DNK210.html5)正点原......
  • Linux安全启动及Machine Owner Key(UEFI BIOS MBR GPT GRUB)
    PS:要转载请注明出处,本人版权所有。PS:这个只是基于《我自己》的理解,如果和你的原则及想法相冲突,请谅解,勿喷。环境说明  无前言  只要装过各种系统的人都或多或少会接触到UEFI或者BIOS这样的概念。本文也不会对这些概念进行详解,本文主要把这些概念串起来,并引入MOK(Mach......