全志V3S嵌入式驱动开发(看门狗驱动)

news2024/11/27 21:35:37

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

        大家如果做过工业级别的嵌入式设备,那么对看门狗应该不陌生。很多工业级的设备,其应用环境很多时候是非常糟糕的,甚至简单加一个塑料壳子,放在室外都是有可能的。在这么差的环境下,要保证系统持续稳定地运行,这就需要引入看门狗这个武器了。

        所谓看门狗,就是要求系统定时去进行喂狗的操作。具体时间多长,可以自己设置。软件一旦没有及时喂狗,那么系统就会自动重启。这个操作,就是为了防止嵌入式系统出现死锁、软件故障、程序跑飞等各种异常情况。

1、文档说明

        在Allwinner_V3s_Datasheet_V1.0.pdf芯片手册上面,看门狗是和timer放在一起的。这也算合理。相关的寄存器不多,主要就是5个,

         从名字也能大概看出这5个寄存器的用途。第一个是中断开关,第二个是状态,第三个是控制,第四个是配置,第五个是模式。

2、电路

        和之前的驱动都不同,看门狗完全是soc内部的模块设置,因此这个部分也就没有电路图,没有外部引脚的信号需要考虑。

3、设备树文件

        查看sun8i-v3s.dtsi文件,输入wdt,可以很容易找到看门狗的内容,

		wdt0: watchdog@01c20ca0 {
			compatible = "allwinner,sun6i-a31-wdt";
			reg = <0x01c20ca0 0x20>;
			interrupts = <GIC_SPI 25 IRQ_TYPE_LEVEL_HIGH>;
		};

        内容也不复杂,第一个表明兼容什么样的soc,第二个表示寄存器地址范围,第三个表示中断号、中断形式。

4、查看驱动c文件

        由之前的sun6i-a31-wdt在drivers目录下面做全局查找,不需要花很多的时间就可以找到驱动文件,即sunxi_wdt.c。文件中有这样的内容,

static const struct of_device_id sunxi_wdt_dt_ids[] = {
	{ .compatible = "allwinner,sun4i-a10-wdt", .data = &sun4i_wdt_reg },
	{ .compatible = "allwinner,sun6i-a31-wdt", .data = &sun6i_wdt_reg },
	{ /* sentinel */ }
};

        看到这个,基本就能判断出我们的驱动是加载对了。整个驱动基本上就是一个套路,对于驱动开发者来说,他所要做的就是把对应的回调函数填完就可以了,

static const struct watchdog_ops sunxi_wdt_ops = {
	.owner		= THIS_MODULE,
	.start		= sunxi_wdt_start,
	.stop		= sunxi_wdt_stop,
	.ping		= sunxi_wdt_ping,
	.set_timeout	= sunxi_wdt_set_timeout,
	.restart	= sunxi_wdt_restart,
};

5、验证和使用

        通过查看官方soc文档,我们发现目前来说看门狗的最长喂狗时间是16s。当然,配小一点也是可以的,大家可以根据自己的需求灵活设置,

        如果不想设置,那直接使用默认配置就好。这个时候为了验证看门狗有没有起作用,可以分成两步骤,第一,查看ls -l /dev/w*下面有没有watchdog这个节点;第二,给watchdog发送一个1的数据,即

echo 1 > /dev/watchdog

         一段时间之后,如果发生了系统重启,那么代表看门狗生效。当然,没有生效的话,需要结合soc文档和kernel驱动打印日志,分析一下具体的原因了。当前,watchdog的驱动是默认打开的,大家不需要做额外的配置就可以开始测试了。

        此外,正在做、或者将来准备做工业级设备的同学,可以好好看看相关的用法,未来肯定会涉及到看门狗的操作。当然,使用看门狗,只是最后没有办法的办法,嵌入式系统本身的稳定性还是需要研发人员努力去完成的。这和看门狗本身并不冲突。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/626937.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

抖音seo矩阵系统源码开发及部署配置文档分享

一、开发要求及实现流程 &#xff1a;Scope: video.create 需要申请权限 需要用户授权 该接口用于上传视频文件到文件服务器&#xff0c;获取视频文件video_id&#xff08;该 ID 为加密后的 ID&#xff09;。该接口适用于抖音。 注意&#xff1a; 抖音的OAuth API以https://…

阿里云弹性公网ip(EIP)是什么?eip详细介绍

阿里云eip是什么&#xff1f;阿里云百科分享弹性公网IP详细介绍&#xff0c;阿里云弹性公网EIP是什么意思&#xff1f;EIP是可以独立持有的公网IP地址&#xff0c;EIP可以和阿里云专有网络VPC类型的云服务器ECS、NAT网关、ENI网卡、私网负载均衡SLB等绑定&#xff0c;通过EIP可…

chatgpt赋能python:Python是什么

Python是什么 Python是一门高级编程语言&#xff0c;由Guido van Rossum于1991年发明并开发。它具有简单易学、可读性强、跨平台等特点&#xff0c;在Web开发、数据分析、机器学习等领域广泛应用。 Python的文档 Python的文档非常全面&#xff0c;包括官方文档、第三方文档、…

SimSwap复现指引及代码分析【2023有更新】

SimSwap复现指引及代码分析【2023有更新】 0、前言1、复现指引环境配置指引Inference for image or video face swappingInference参数解析Inference用法示例图像视频 2、结果分析3、代码分析 0、前言 论文讲解在&#xff1a;https://blog.csdn.net/qq_45934285/article/detail…

33、js - 事件循环 微任务 宏任务

1、事件循环♻️&#xff08;EventLoop&#xff09; js是单线程语言&#xff0c;也就是某一刻只能执行一行代码&#xff0c;为了让耗时代码不阻塞其他代码运行&#xff0c;设计了事件循环模型。 事件循环是一个并发模型&#xff0c;负责执行代码、收集异步任务的模型&#xff0…

容器(第四篇)创建镜像-dockerfile

创建镜像有三种方法&#xff0c;分别为基于已有镜像创建、基于本地模板创建以及基于Dockerfile创建。 基于现有镜像创建&#xff1a; ①先使用现有镜像创建容器 docker run ②再进入容器进行内容更新 docker exec ③最后提交成新的镜像 docker commit 或 docker…

Linux远程管理工具(PuTTY和SecureCRT)

通过《Linux远程管理协议》一节可以知道&#xff0c;Linux远程管理服务器多基于 SSH 协议。本节给大家介绍 2 种常见的基于 SSH 协议的远程管理工具&#xff0c;分别是 PuTTY 和 SecureCRT。 在使用远程管理工具之前&#xff0c;应先设置宿主机 Windows 与虚拟机 Linux 能够连…

mysql 联合查询

mysql联合查询 联合查询&#xff1a;union&#xff0c;将多次查询(多条select语句)的结果&#xff0c;在字段数相同的情况下&#xff0c;在记录的层次上进行拼接。 基本语法 联合查询由多条select语句构成&#xff0c;每条select语句获取的字段数相同&#xff0c;但与字段类…

Seata介绍、原理、配置

目录 介绍&#xff1a; 核心组件&#xff1a; 原理&#xff1a; Seata 会有 4 种分布式事务解决方案&#xff0c;分别是 AT 模式、TCC 模式、Saga 模式和 XA 模式 AT模式原理&#xff1a; 一阶段&#xff1a; 二阶段提交&#xff1a; 二阶段回滚&#xff1a; Seata配置…

【轨迹跟踪】基于自适应跟踪(EAT)方法的无人机/移动机器人轨迹跟踪(MatlabSimulink)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

随着信息技术的快速发展,编程已经成为一个越来越重要的技能。那么,我们该如何入门编程呢?

*随着信息技术的快速发展&#xff0c;编程已经成为一个越来越重要的技能。那么&#xff0c;我们该如何入门编程呢&#xff1f; 一、自学编程需要注意什么&#xff1f; 自学编程需要注意以下几点&#xff1a; 设定清晰的学习目标&#xff1a;在开始学习编程前&#xff0c;你需…

chatgpt赋能python:Python在485读电表方面的应用

Python在485读电表方面的应用 介绍 近年来&#xff0c;随着智能电网和智慧城市的不断发展&#xff0c;越来越多的城市和企事业单位开始关注能源消费情况并采取有效管理手段&#xff0c;实现节能减排。而想要实现对能源消费情况的监测和控制&#xff0c;就需要能够对电表进行读…

Docker数据管理和网络通信

Docker 的数据管理 管理 Docker 容器中数据主要有两种方式&#xff1a;数据卷&#xff08;Data Volumes&#xff09;和数据卷容器&#xff08;DataVolumes Containers&#xff09;。 1&#xff0e;数据卷 数据卷是一个供容器使用的特殊目录&#xff0c;位于容器中。可将宿主机…

MQTT协议基本讲解(结合netty)

正文 前提MQTT结构可变报文头&#xff08;Variable Header&#xff09;有效负荷&#xff08;payload&#xff09;固定报文头&#xff08;Fixed Header&#xff09;消息类型&#xff08;Message Type&#xff09;QoS级别标志&#xff08;0&#xff0c;1&#xff0c;2&#xff09…

Spring Cloud OpenFeign源码解析,代理的魅力一展无遗

文章目录 一、OpenFeign简介二、OpenFeign中Bean的动态装载1、EnableFeignClients2、registerFeignClients3、FeignClientFactoryBean.getObject4、loadBalance5、DefaultTarget.target6、ReflectiveFeign.newInstance生成代理&#xff08;1&#xff09;targetToHandlersByName…

C语言字符及字符串讲解

文章目录 前言一、字符介绍和使用二、字符串介绍和使用三、字符串操作函数四、字符串的长度和字符串所占内存空间的大小总结 前言 C 语言中的字符和字符串是常用的数据类型。字符是一个单个的字母、数字、标点符号或者其他可打印的符号&#xff0c;使用单引号 ’ ’ 表示&…

Linux route命令实战:route 命令实战教程,配置静态路由,删除路由表项

前言 大家好&#xff0c;又见面了&#xff0c;我是沐风晓月&#xff0c;本文是专栏【linux基本功-基础命令实战】的第61篇文章。 专栏地址&#xff1a;[linux基本功-基础命令专栏] &#xff0c; 此专栏是沐风晓月对Linux常用命令的汇总&#xff0c;希望能够加深自己的印象&am…

使用大型语言模(LLM)构建系统(四):链式提示

今天我学习了DeepLearning.AI的 Building Systems with LLM 的在线课程&#xff0c;我想和大家一起分享一下该门课程的一些主要内容。 下面是我们访问大型语言模(LLM)的主要代码&#xff1a; import openai#您的openai的api key openai.api_key YOUR-OPENAI-API-KEY def get_…

word如何转化为pdf格式?分享四个方法给大家!

在工作和学习中&#xff0c;经常需要对文档进行转换&#xff0c;其中将Word文档转换为PDF是最常见的格式转换之一。下面介绍几种常用的转换方法&#xff0c;包括使用记灵在线工具。 方法一&#xff1a;使用Word软件直接转换 如果你使用的是电脑上的Word软件&#xff0c;可以直…

vue3ts安装sass(scss)

序 1、我附上个sass的github&#xff08;跟本教程无关&#xff09;地址GitHub - sass/sass: Sass makes CSS fun! 2、博主本地环境 "vue": "^3.2.47", "typescript": "^5.0.2" "vite": "^4.3.9", node18.12.1 3、…