【GoRK3288】7.WatchDog操作方法

请先在https://github.com/tjCFeng/GoRK3288下载
GoRK3288 开源库。

WatchDog在做服务器程序时很有用处,服务器在运行过程中,一旦发生死机、程序异常等情况,造成系统运行紊乱,可以通过WatchDog来自动控制整个系统重新启动,可以最大限度地减少人员维护的工作量。

WatchDog也叫看门狗,它其实就是一个定时器,每隔一段时间检测一个标志位是否被程序赋值,即所谓的喂狗。 如果在某次检测中发现这个标志位没有被人为干预,那么意味着应用程序或系统不能正常运行了,那么它会强制系统重新启动。把应用程序制作成为自启或服务程序时,系统在重新启动后将自动运行这些程序,很大程度上可以恢复正常的工作。

经过前面几节的介绍,Go语言常用的语法已经都展示出来了,没有什么其他太多的花样了,所以这一节的内容将会更加简单。WatchDog的示例程序如下:

因为系统中只有一个WatchDog,所以照样是个单例。这段代码为了有别于上一节,特意加了一个判断是否调用成功的语句,一般使用中可以不需要判断,直接使用。

在调用了获得单例的函数后可以得到WatchDog的实例,首先需要先给它一个喂狗的间隔时间,通过FeedSecond来设置。默认的是3秒喂一次狗,当然这个时间可以改变,如示例中改为了10秒。不过这个时间间隔一定不要超过WatchDog的检测时间,否则直接重启了,起不到作用。

Start后WatchDog开始工作,Start同样是个协程,可以在工作后执行其他的代码而不阻塞在这里。示例中没有其他的代码,所以用了个Sleep等待一分钟,来演示效果。

这里需要注意一下的是Stop。这里有点奇怪,当我Start后,无论怎样的Stop,这个WatchDog始终不能停止工作,检查寄存器会发现控制启停的那一位不会变化,设置不成功。这个问题同样需要请教Firefly的高手,是不是我哪里操作有不对的地方。

好了,就是这些了,最后还是总结一下WDT类的方法:

IWDT:获得WatchDog的实例

FreeWDT:释放WatchDog

FeedSecond:设置喂狗的间隔时间(不设置的话默认是3秒)

Start:启动WatchDog

Stop:停止WatchDog(暂时不起作用)

GoRK3288库请在https://github.com/tjCFeng/GoRK3288下载。

时间: 2024-08-24 22:09:48

【GoRK3288】7.WatchDog操作方法的相关文章

【GoRK3288】5.PWM操作方法

请先在https://github.com/tjCFeng/GoRK3288下载 GoRK3288 开源库. 这一节来看看PWM的操作方法.前面说到了GPIO7_A1是个复用端口,包括GPIO和PWM,那么这次还是使用这个端口把它变成PWM输出. 还是来看这张图 可以发现PWM在前,GPIO在后,也就是说默认的功能为PWM.如果想使用PWM功能的话,上电后可以直接使用了.不过为了能更加清楚的说明它是个复用端口,可以在上一节作为GPIO使用后,不要断电或重启,可以重新配置为PWM功能再来使用,其他

【GoRK3288】6.TSADC操作方法

请先在https://github.com/tjCFeng/GoRK3288下载 GoRK3288 开源库. Rockchip RK3288中有好多ADC,HS-ADC(High Speed ADC).TS-ADC(Temperature Sensor ADC). 其中HS-ADC 主要用于传输数据,例如手册中说的GPS数据等:而TS-ADC顾名思义,就是采集各种温度传感器的数据了. 咱们先从简单的开始,所以想办法使用TS-ADC取得各种温度. 由于温度传感器是集成在CPU内部的,所以本次试验不

【GoRK3288】3.GPIO操作方法(1)

从这一节开始,正式讲述 GoRK3288 的使用方法.请先在https://github.com/tjCFeng/GoRK3288下载 GoRK3288 开源库 . 经过前两节的铺垫,大概了解了Go语言的结构,并且在开发板上每个功能都对应 GoRK3288 库中的一个文件,比如GPIO功能就是通过GPIO.go文件来实现的.而所有的示例代码都在上一层文件夹的Test.go中. 先来看Test.go中的第一段代码 func main() {} 函数前面的部分不用再重复叙述,从这个函数开始,是真正对

【GoRK3288】4.GPIO操作方法(2)

请先在https://github.com/tjCFeng/GoRK3288下载 GoRK3288 开源库. 上一节通过不靠谱的方法控制了WorkLED,那么对于一个具有功能复用的GPIO应该怎样操作呢?为了能够表达的更清楚一些,这次先不看代码,而是找一个具有代表性的端口来针对它说明. Firefly-RK3288有两排引出接口,从这里做文章吧 找来找去,发现GPIO7_A1这个口很好,是PWM和GPIO复用的端口,就对它下手. 由于它本身没有连接到任何地方,直接操作看不出效果,所以我翻箱倒柜找

详解kernel中watchdog 驱动程序

watchdog无论在小系统还是大的工程系统中都是必须存在的,在解决线程挂死.系统死循环等都用很重要的应用,算是系统出问题恢复初始状态的救命稻草. 在kernel中wdt的应用不是很常见,原因就是相比于裸系统来讲,它的线程会出现一些异步的情况,运行状态容易出现系统不可控的时刻. 对于kernel中应用wdt而言,一般采用了一种通用方法,就是用一个timer进行喂狗操作. 以下选取一个典型的代码进行说明,就用 Atmel AT32AP700X device,在kernel->drivers->w

具体解释kernel中watchdog 驱动程序

watchdog不管在小系统还是大的project系统中都是必须存在的.在解决线程挂死.系统死循环等都用非常重要的应用,算是系统出问题恢复初始状态的救命稻草. 在kernel中wdt的应用不是非经常见,原因就是相比于裸系统来讲.它的线程会出现一些异步的情况,执行状态easy出现系统不可控的时刻. 对于kernel中应用wdt而言,一般採用了一种通用方法.就是用一个timer进行喂狗操作. 下面选取一个典型的代码进行说明,就用 Atmel AT32AP700X device,在kernel->dr

基础入门_Python-模块和包.运维开发中watchdog事件监视的最佳实践?

简单介绍: 说明:  此模块是一个跨平台的PY库和SHELL工具,可以监视文件系统事件(增加/删除/修改) 快速安装: pip install --upgrade watchdog 日志记录: event_handler = LoggingEventHandler() -> event_handler 说明: 创建一个日志处理句柄,其实LoggingEventHandler是继承自FileSystemEventHandler类,只是重写了增删查改的回调函数,直接调用logging模块写到对应lo

Python文件和目录操作方法大全(含实例)

一.python中对文件.文件夹操作时经常用到的os模块和shutil模块常用方法.1.得到当前工作目录,即当前Python脚本工作的目录路径: os.getcwd()2.返回指定目录下的所有文件和目录名:os.listdir()               例: print os.listdir(r'E:\test_dir')3.函数用来删除一个文件:os.remove()4.删除多个目录:os.removedirs(r"c:\python")5.检验给出的路径是否是一个文件:os.

视图表单访问控制器操作方法的POST、GET方式对应关系

在视图中,表单默认访问方式是FormMethod.Post(不会将请求显示在地址栏中).在控制器中,操作方法不标注属性,默认为HttpGet属性.会有以前情况出现. 1.表单不指定访问方式(默认形式为Post),只有一个操作方法,且不标注属性,默认为HttpGet属性.则表单将数据提交至控制器HttpGet方法中. @using (Html.BeginForm())    {       <div class="form-group">           <labe