当前位置: 首页 > news >正文

看门狗应用编程-I.MX6U嵌入式Linux C应用编程学习笔记基于正点原子阿尔法开发板

看门狗应用编程

在这里插入图片描述

看门狗应用编程介绍

看门狗定时器的基本概念

  • 看门狗是一个可以在一定时间内被复位/重置的计数器

  • 如果在规定时间内没有复位,看门狗计时器溢出会对CPU产生复位信号使系统重启

  • 有些看门狗可以只产生中断信号而不会使系统复位

I.MX6UL/I.MX6ULL SoC 中的看门狗定时器

  • 集成了两个看门狗定时器:WDOG1 和 WDOG2

  • WDOG2 用于安全目的

  • WDOG1 是一个普通的看门狗,支持产生中断信号和复位CPU

Linux 系统中的看门狗设备节点

  • 注册的看门狗外设在 /dev/ 目录下生成设备节点,通常命名为 watchdogX(X为数字编号)

  • 例如 /dev/watchdog0、/dev/watchdog1

  • 这些设备节点用于控制看门狗外设

默认看门狗设备节点

  • /dev/watchdog0 对应 I.MX6U 的 WDOG1

  • 系统中可能注册多个看门狗设备,/dev/watchdog 是系统默认的看门狗设备节点

  • 通常 /dev/watchdog 代表系统默认的看门狗设备,即 watchdog0

应用层控制看门狗的方法

  • 通过 ioctl() 函数控制看门狗

  • 需要包含 <linux/watchdog.h> 头文件

  • 头文件中定义了多种 ioctl 指令宏,对应不同的操作

    • #define WDIOC_GETSUPPORT _IOR(WATCHDOG_IOCTL_BASE, 0, struct watchdog_info)
      #define WDIOC_GETSTATUS _IOR(WATCHDOG_IOCTL_BASE, 1, int)
      #define WDIOC_GETBOOTSTATUS _IOR(WATCHDOG_IOCTL_BASE, 2, int)
      #define WDIOC_GETTEMP _IOR(WATCHDOG_IOCTL_BASE, 3, int)
      #define WDIOC_SETOPTIONS _IOR(WATCHDOG_IOCTL_BASE, 4, int)
      #define WDIOC_KEEPALIVE _IOR(WATCHDOG_IOCTL_BASE, 5, int)
      #define WDIOC_SETTIMEOUT _IOWR(WATCHDOG_IOCTL_BASE, 6, int)
      #define WDIOC_GETTIMEOUT _IOR(WATCHDOG_IOCTL_BASE, 7, int)
      #define WDIOC_SETPRETIMEOUT _IOWR(WATCHDOG_IOCTL_BASE, 8, int)
      #define WDIOC_GETPRETIMEOUT _IOR(WATCHDOG_IOCTL_BASE, 9, int)
      #define WDIOC_GETTIMELEFT _IOR(WATCHDOG_IOCTL_BASE, 10, int
  • 常用的 ioctl 指令宏

看门狗应用编程流程

打开设备

  • 在调用 ioctl()函数之前,需要先打开看门狗设备得到文件描述符

    • int fd;

fd = open(“/dev/watchdog”, “O_RDWR”);
if (0 > fd)
fprintf(stderr, “open error: %s: %s\n”, “/dev/watchdog”, strerror(errno));

获取设备支持哪些功能:WDIOC_GETSUPPORT

  • 调用 ioctl() 函数来获取功能信息

    • ioctl(int fd, WDIOC_GETSUPPORT, struct watchdog_info *info);

    • fd:文件描述符

    • WDIOC_GETSUPPORT:指令宏,获取设备的信息

    • info:指向 struct watchdog_info 的指针

  • struct watchdog_info 结构体

    • struct watchdog_info {
      __u32 options; /* Options the card/driver supports /
      _u32 firmware_version; /
      Firmware version of the card /
      __u8 identity[32]; /
      Identity of the board */
      }

    • options:记录设备支持的功能或选项

      • #define WDIOF_OVERHEAT 0x0001 /* Reset due to CPU overheat /
        #define WDIOF_FANFAULT 0x0002 /
        Fan failed /
        #define WDIOF_EXTERN1 0x0004 /
        External relay 1 /
        #define WDIOF_EXTERN2 0x0008 /
        External relay 2 /
        #define WDIOF_POWERUNDER 0x0010 /
        Power bad/power fault /
        #define WDIOF_CARDRESET 0x0020 /
        Card previously reset the CPU /
        #define WDIOF_POWEROVER 0x0040 /
        Power over voltage /
        #define WDIOF_SETTIMEOUT 0x0080 /
        Set timeout (in seconds) /
        #define WDIOF_MAGICCLOSE 0x0100 /
        Supports magic close char /
        #define WDIOF_PRETIMEOUT 0x0200 /
        Pretimeout (in seconds), get/set /
        #define WDIOF_ALARMONLY 0x0400 /
        Watchdog triggers a management or other external alarm
        not a reboot /
        #define WDIOF_KEEPALIVEPING 0x8000 /
        Keep alive ping reply */

      • 常见的 options 值

        • WDIOF_SETTIMEOUT:设备支持设置超时时间

        • WDIOF_KEEPALIVEPING:设备支持“喂狗”操作(重置看门狗计时器)

    • firmware_version:记录设备的固件版本号

    • identity:描述性的字符串

  • 使用示例

    • struct watchdog_info info;
      if (0 > ioctl(fd, WDIOC_GETSUPPORT, &info)) {
      fprintf(stderr, “ioctl error: WDIOC_GETSUPPORT: %s\n”, strerror(errno));
      return -1;
      }
      printf(“identity: %s\n”, info.identity);
      printf(“version: %u\n”, info.firmware_version);
      if (0 == (WDIOF_KEEPALIVEPING & info.options))
      printf(“设备不支持喂狗操作\n”);
      if (0 == (WDIOF_SETTIMEOUT & info.options))
      printf(“设备不支持设置超时时间\n”);

获取/设置超时时间:WDIOC_GETTIMEOUT、WDIOC_SETTIMEOUT

  • 获取超时时间

    • 使用指令:WDIOC_GETTIMEOUT

    • 功能:获取设备当前设置的超时时间

    • ioctl(int fd, WDIOC_GETTIMEOUT, int *timeout);

    • timeout:指向一个整数的指针,用于存储获取的超时时间(单位:秒)

  • 设置超时时间

    • 使用指令:WDIOC_SETTIMEOUT

    • 功能:设置看门狗的超时时间

    • ioctl(int fd, WDIOC_SETTIMEOUT, int *timeout);

    • timeout:指向一个整数的指针,包含要设置的超时时间(单位:秒)

  • 超时时间限制

    • 设置超时时间不得超过设备的最大值,否则 ioctl() 调用将失败
  • 使用示例

    • int timeout;

/* 获取超时时间 */
if (0 > ioctl(fd, WDIOC_GETTIMEOUT, &timeout)) {
fprintf(stderr, “ioctl error: WDIOC_GETTIMEOUT: %s\n”, strerror(errno));
return -1;
}

printf(“current timeout: %ds\n”, timeout);

/* 设置超时时间 */
timeout = 10; //10 秒钟
if (0 > ioctl(fd, WDIOC_SETTIMEOUT, &timeout)) {
fprintf(stderr, “ioctl error: WDIOC_SETTIMEOUT: %s\n”, strerror(errno));
return -1;
}

开启/关闭看门狗:WDIOC_SETOPTIONS

  • 开启看门狗计时

    • 设置好超时时间后,可以开启看门狗计时

    • 使用指令:WDIOC_SETOPTIONS

  • 停止看门狗计时

    • 同样使用指令:WDIOC_SETOPTIONS
  • 调用方式

    • ioctl(int fd, WDIOC_SETOPTIONS, int *option);

    • option:指向一个 int 类型变量的指针,用于控制开启或停止看门狗计时

      • #define WDIOS_DISABLECARD 0x0001 /* Turn off the watchdog timer /
        #define WDIOS_ENABLECARD 0x0002 /
        Turn on the watchdog timer */
  • 使用示例

    • int option = WDIOS_ENABLECARD; // 开启看门狗计时
      // int option = WDIOS_DISABLECARD; // 停止看门狗计时
      if (0 > ioctl(fd, WDIOC_SETOPTIONS, &option)) {
      fprintf(stderr, “ioctl error: WDIOC_SETOPTIONS: %s\n”, strerror(errno));
      return -1;
      }
  • 注意事项

    • 当调用 open() 打开看门狗设备时,即使程序中没有显式开启看门狗计时器,当 close() 关闭设备时,看门狗会自动启动

    • 因此,在打开设备后,需要立即使用 WDIOC_SETOPTIONS 指令停止看门狗计时器,完成所有设置后再开启看门狗计时器

喂狗:WDIOC_KEEPALIVE

  • 看门狗计时器启动后喂狗的必要性

    • 启动看门狗计时器后,需要在设定的超时时间之前进行“喂狗”操作

    • 如果未在超时前喂狗,计时器溢出将导致系统复位或产生中断信号

  • 喂狗的指令

    • 使用指令:WDIOC_KEEPALIVE

    • 作用:重置看门狗计时器,防止系统复位或产生中断信号

  • 调用方式

    • ioctl(int fd, WDIOC_KEEPALIVE, NULL);

    • fd:看门狗设备的文件描述符

    • WDIOC_KEEPALIVE:喂狗指令宏

    • NULL:指示不需要额外的参数

  • 使用示例

    • if (0 > ioctl(fd, WDIOC_KEEPALIVE, NULL)) {
      fprintf(stderr, “ioctl error: WDIOC_KEEPALIVE: %s\n”, strerror(errno));
      }

看门狗应用编程实战

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/ioctl.h>
#include <errno.h>
#include <string.h>
#include <linux/watchdog.h>#define  WDOG_DEV   "/dev/watchdog"int main(int argc, char *argv[])
{struct watchdog_info info;   // 看门狗信息结构体int timeout;    // 超时时间变量int time;   // 喂狗间隔时间变量int fd; // 文件描述符int op; // 操作选项变量if (2 != argc) {fprintf(stderr, "usage: %s <timeout>\n", argv[0]);exit(EXIT_FAILURE);}/* 打开看门狗 */fd = open(WDOG_DEV, O_RDWR);if (0 > fd) {fprintf(stderr, "open error: %s: %s\n", WDOG_DEV, strerror(errno));exit(EXIT_FAILURE);}/* 打开之后看门狗计时器会开启、先停止它 */op = WDIOS_DISABLECARD;if (0 > ioctl(fd, WDIOC_SETOPTIONS, &op)) {fprintf(stderr, "ioctl error: WDIOC_SETOPTIONS: %s\n", strerror(errno));close(fd);exit(EXIT_FAILURE);}timeout = atoi(argv[1]);if (1 > timeout)timeout = 1;/* 设置超时时间 */printf("timeout: %ds\n", timeout);if (0 > ioctl(fd, WDIOC_SETTIMEOUT, &timeout)) {fprintf(stderr, "ioctl error: WDIOC_SETTIMEOUT: %s\n", strerror(errno));close(fd);exit(EXIT_FAILURE);}/* 开启看门狗计时器 */op = WDIOS_ENABLECARD;if (0 > ioctl(fd, WDIOC_SETOPTIONS, &op)) {fprintf(stderr, "ioctl error: WDIOC_SETOPTIONS: %s\n", strerror(errno));close(fd);exit(EXIT_FAILURE);}/* 喂狗 */time = (timeout * 1000 - 100) * 1000;//喂狗时间设置us微秒、在超时时间到来前100ms喂狗for ( ; ; ) {usleep(time);ioctl(fd, WDIOC_KEEPALIVE, NULL);}
}

大致流程与上一级内容一致,实现了看门狗计时器的启动、停止、超时时间设置以及喂狗操作,确保系统在正常工作时不会因为超时导致复位重启

在开发板测试

看门狗默认已经被其他功能使用,需要其手动关闭

  • 打开/etc/init.d/watchdog.sh 文件,在开头加个 exit 0 将整个文件注释掉,然后开发板重新启动,再执行程序

执行程序后,看门狗计时器自动启动,并持续进行喂狗操作。当程序被终止(如通过 Ctrl + C)而未停止看门狗计时器时,计时器会溢出导致系统重启

  • 计时器溢出系统重启

相关文章:

看门狗应用编程-I.MX6U嵌入式Linux C应用编程学习笔记基于正点原子阿尔法开发板

看门狗应用编程 看门狗应用编程介绍 看门狗定时器的基本概念 看门狗是一个可以在一定时间内被复位/重置的计数器 如果在规定时间内没有复位&#xff0c;看门狗计时器溢出会对CPU产生复位信号使系统重启 有些看门狗可以只产生中断信号而不会使系统复位 I.MX6UL/I.MX6ULL So…...

Bug 解决 | 本地项目上线后出现错误

目录 一、前言 二、原因分析 1、本地代码误发线上 2、环境差异 3、配置差异 4、资源路径差异 5、API 接口差异 6、用量差异 一、前言 大家好&#xff0c;我是小洪爱分享。在开发上线项目的过程中&#xff0c;我们经常会遇到一种让人头疼的情况。那就是开发好的项目功能…...

为什么我工作 10 年后转行当程序员?逆袭翻盘!

今天文章的主人公暂且称他为 A 君。不过 A 君有点特别&#xff0c;非科班&#xff0c;工作 10 年后才转行 iOS 程序员。今年 36 岁&#xff0c;目前在某行业头部企业任职前端负责人&#xff0c;管理 40 人的前端团队。 废话不多说&#xff0c;我们开始 A 君&#xff08;为了描…...

见证中国数据库的崛起:从追赶到引领的壮丽征程《四》

见证中国数据库的崛起&#xff1a;从追赶到引领的壮丽征程《四》 四、未来展望&#xff1a;中国数据库的机遇与挑战新技术带来的机遇全球化竞争的挑战数据安全与隐私保护的挑战人才培养的持续挑战 【纪录片】中国数据库前世今生 在数字化潮流席卷全球的今天&#xff0c;数据库作…...

OpenCV||超细节的基本操作

一、图像读取 retval cv2.imread(filename[, flags]) filename&#xff1a;需要读取的图片路径名&#xff0c;支持多种图片格式&#xff0c;如JPEG、PNG、TIFF等。flags&#xff1a;一个可选参数&#xff0c;指定加载图像的颜色类型。常用的值包括&#xff1a; cv2.IMGEAD_A…...

算法训练(leetcode)第三十八天 | 1143. 最长公共子序列、1035. 不相交的线、53. 最大子数组和、392. 判断子序列

刷题记录 *1143. 最长公共子序列1035. 不相交的线53. 最大子数组和392. 判断子序列 *1143. 最长公共子序列 leetcode题目地址 本题和718. 最长重复子数组相似&#xff0c;只是本题不要求连续&#xff0c;需要记录前面最长的子序列&#xff0c;在此基础上累计长度。 dp[i][j]…...

STM32——外部中断(EXTI)

目录 前言 一、外部中断基础知识 二、使用步骤 三、固件库实现 四、STM32CubeMX实现 总结 前言 外部中断&#xff08;External Interrupt&#xff0c;简称EXTI&#xff09;是微控制器用于响应外部事件的一种方式&#xff0c;当外部事件发生时&#xff08;如按键按下、传感器信号…...

MySQL多实例部署

1、软件包下载 //环境&#xff1a;一台rocky Linux虚拟机&#xff0c;并且做好的基本配置及时钟同步&#xff0c;使用Xshell连接 [rootmysql ~]# yum -y install tar lrzsz libncurses* libaio perl//将包文件拖进去 [rootmysql ~]# rz -E rz waiting to receive. [rootmysql…...

云开发喝酒小程序3.6全新漂亮UI猜拳喝酒小程序 【已去除流量主】

云开发喝酒小程序3.6全新漂亮UI猜拳喝酒小程序 已去除流量主。UI特别漂亮&#xff0c;实属精品代码。 【已测】云开发喝酒小程序3.6漂亮UI猜拳喝酒小程序 已去除流量主。 云开发&#xff08;serverless&#xff09;小程序无需服务器&#xff0c;注册一个小程序就可以直接上线…...

图论进阶之路-最短路(Floyd)

时间复杂度&#xff1a;O(n^3) 使用场景&#xff1a;当需要得知任意两个点的最短距离以及其路径时使用 准备&#xff1a;需要两个矩阵 一个记录最短距离&#xff08;D&#xff09; 一个记录最短路径的最后一个结点&#xff08;P&#xff09; 其核心在于不断的判断越过中间…...

安装sqllab靶机之后,练习关卡报403 forbidden

解决办法&#xff1a; 在nginx的conf文件中添加上访问index.php vim /usr/local/nginx/conf/nginx.conf 保存退出 再重启一下nginx&#xff0c;就完成了。 ./nginx -s reload...

微信VX多开 免扫码 登录 互斥体 可视化 Exui v1.1 易语言源码附成品软件

UI设计&#xff1a; 1. EXUI界面库20240204 调用的模块&#xff1a; 1. wow64_hook_3.02.ec&#xff08;压缩包内含&#xff09; 2. 精易模块[v11.1.0].ec&#xff08;自行下载&#xff09; 更新日志&#xff1a; v1.1 2024年7月25日13:28:43 { 1. 有人反馈 设置了V…...

JavaEE 从入门到精通(一) ~ Maven

晚上好&#xff0c;愿这深深的夜色给你带来安宁&#xff0c;让温馨的夜晚抚平你一天的疲惫&#xff0c;美好的梦想在这个寂静的夜晚悄悄成长。 目录 前言 1.1 概念 什么是 Maven&#xff1f; Maven 的核心概念 1.2 maven依赖坐标 1.3 maven仓库 1.4 maven安装 1.5 mave…...

滚珠丝杆与丝杆支撑座:稳定性与精度的双重保障

丝杆支撑座是连接滚珠丝杆与电机的轴承&#xff0c;采用优质的轴承能确保支撑座与滚珠丝杆之间的刚性平衡。那么&#xff0c;滚珠丝杆搭连接杆支撑座有哪些优缺点呢&#xff1f; 正常情况下&#xff0c;丝杆支撑座能够提供稳定的支撑力&#xff0c;确保滚珠丝杆在复杂工况下保持…...

实验5-11 空心的数字金字塔

本题要求实现一个函数&#xff0c;输出n行空心的数字金字塔。 函数接口定义&#xff1a; void hollowPyramid( int n );其中n是用户传入的参数&#xff0c;为[1, 9]的正整数。要求函数按照如样例所示的格式打印出n行空心的数字金字塔&#xff0c;请注意&#xff0c;最后一行的…...

C#对象和类型

属性、方法、字段 字段和属性的区别 在C#中&#xff0c;字段&#xff08;fields&#xff09;和属性&#xff08;properties&#xff09;都是类的成员&#xff0c;它们提供了类存储数据的方式&#xff0c;但它们在用途和功能上有着明显的区别。 字段 字段通常用来存储类…...

免费分享一套SpringBoot+Vue图书(图书借阅)管理系统【论文+源码+SQL脚本】,帅呆了~~

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的SpringBootVue图书(图书借阅)管理系统&#xff0c;分享下哈。 项目视频演示 【免费】SpringBootVue图书(图书借阅)管理系统 Java毕业设计_哔哩哔哩_bilibili 项目介绍 本论文阐述了一套先进的图书管理系…...

数据结构与算法--队列

文章目录 提要队列的定义队列的认识队列的应用队列的抽象数据类型队列的存储结构队列的链式存储结构与实现链队的进队和出队操作链队的数据类型初始化链队列入队操作出队操作队列的顺序存储结构与实现顺序队列的假溢出问题队列上溢循环队列循环队列取下一相邻单元下标运算队满与…...

<Qt> 常用控件

目录 一、控件概述 二、QWidget 核心属性 &#xff08;一&#xff09;QWidget的核心属性概览 1. enabled 2. geometry 3. WindowFrame的影响 4. windowTitle 5. window Icon 6. windowOpacity 7. cursor 8. font 9. toolTip 10. focusPolicy 11. styleSheet 三、…...

关于C/C++的编译、构建、CMake、x86_amd64等问题(自用)

被这些玩意整红温了 编译器版本 x86&#xff1a;编译器为x86版本&#xff0c;输出文件为x86。amd64_x86&#xff1a;编译器为amd64版本&#xff0c;输出文件为x86。amd64&#xff1a;编译器为amd64版本&#xff0c;输出文件为amd64。x86_amd64&#xff1a;编译器为x86版本&am…...

【设计模式】工厂模式详解

1.简介 工厂模式是一种创建型设计模式&#xff0c;通过提供一个接口或抽象类来创建对象&#xff0c;而不是直接实例化对象。工厂模式的主要思想是将对象的创建与使用分离&#xff0c;使得创建对象的过程更加灵活和可扩展。 工厂模式主要包括以下角色&#xff1a; 抽象工厂&a…...

【Spring Boot】用 Spring Security 实现后台登录及权限认证功能

用 Spring Security 实现后台登录及权限认证功能 1.引入依赖2.创建权限开放的页面3.创建需要权限验证的页面4.配置 Spring Security4.1 配置 Spring MVC4.2 配置 Spring Security 5.创建登录页面6.测试权限 1.引入依赖 使用前需要引入相关依赖&#xff0c;见以下代码&#xff…...

PHP开发【石头剪刀布小游戏】

石头剪刀布小游戏 玩法超级简单&#xff0c;你只需要在下面选择石头、剪刀或者布&#xff0c;然后提交&#xff0c;系统就会随机生成电脑的选择&#xff0c;告诉你最终的结果哦&#xff01; 游戏规则&#xff1a; 如果你的选择和电脑一样&#xff0c;那么就是平局。如果你赢…...

(leetcode学习)42. 接雨水

给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 示例 1&#xff1a; 输入&#xff1a;height [0,1,0,2,1,0,1,3,2,1,2,1] 输出&#xff1a;6 解释&#xff1a;上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表…...

Python编程实例2

一、通过用户输入数字计算阶乘 # 获取用户输入的数字 num int(input("请输入一个数字: ")) factorial 1 # 查看数字是负数&#xff0c;0 或 正数 if num < 0:print("抱歉&#xff0c;负数没有阶乘") elif num 0:print("0 的阶乘为 1") e…...

排序算法:堆排序,golang实现

目录 前言 堆排序 代码示例 1. 算法包 2. 堆排序代码 3. 模拟程序 4. 运行程序 5. 从大到小排序 堆排序的思想 堆排序的实现逻辑 1. 构建最大堆 2. 排序 循环次数测试 假如 10 条数据进行排序 假如 20 条数据进行排序 假如 30 条数据进行排序 假设 5000 条数据…...

【网络安全入门】学习网络安全必须知道的77个网络基础知识

1、TCP/IP 协议的四层模型&#xff08;网络接口层、网络层、传输层、应用层&#xff09; TCP/IP 协议是互联网通信的基础&#xff0c;四层模型中&#xff0c;网络接口层负责与物理网络的连接&#xff1b;网络层主要处理 IP 数据包的路由和转发&#xff1b;传输层提供端到端的可…...

limit 以及分页 SQL 语句

目录 1. 作用 2. 演示 3. 分页 SQL 语句 1. 作用 获取结果集的一部分&#xff1b; 2. 演示 &#xff08;1&#xff09;如下&#xff0c;获取表的前三行&#xff1b; &#xff08;2&#xff09;只有一个数字&#xff0c;默认从 0 开始&#xff1b; &#xff08;3&#x…...

mysql8.0规范

MySQL 数据库开发规范 目录 背景与目标规范列表 1. 库表设计 1.1 必须字段1.2 命名规范 2. 定义规范 2.1 约束规范2.2 类型规范 2.2.1 字段类型与长度2.2.2 状态字段数据类型2.2.3 布尔型2.2.4 varchar和text, json2.2.5 decimal(m,d) 3. 索引规范4. 其他规范5. SQL 使用 5.…...

现代前端架构介绍(第三部分):深入了解状态管理层及其对前端App的影响

远离JavaScript疲劳和框架大战&#xff0c;了解真正重要的东西 在第二部分中&#xff0c;我们讨论了功能架构的三个层次。其中一个就是状态管理层&#xff0c;今天我们将对其进行更深入的探讨。下面是现代前端架构系列的第三部分和最后一部分介绍。 状态管理&#xff0c;你可能…...

html企业网站开发/软件开发公司有哪些

计算机网络原理的基本概念&#x1f50e;IP地址概念格式特殊IP地址&#x1f50e;端口号概念格式注意&#x1f50e;关于IP地址与端口号&#x1f50e;协议概念协议的三要素协议的作用&#x1f50e;协议分层协议分层的作用&#x1f50e;OSI 模型&#x1f50e;网络设备所在分层&…...

如何备份wordpress数据库结构/郑州网络营销顾问

/* * TreeSet存储对象的时候, 可以排序, 但是需要指定排序的算法 * * Integer能排序(有默认顺序), String能排序(有默认顺序), 自定义的类存储的时候出现异常(没有顺序) * * 如果想把自定义类的对象存入TreeSet进行排序, 那么必须实现Comparable接口 * 在类上implement Com…...

行业网站搭建/网站优化推广seo

手机的内存分为运行内存(RAM)和机身内存(也叫ROM、储存空间)。很多人都会搞混分不清这两种内存&#xff0c;下面给大家详细介绍一下&#xff0c;让大家对运行内存和机身内存的区别做一个大致的了解&#xff01;名词简介运行内存是指手机运行程序时的内存&#xff0c;也叫RAM(简…...

社区团购小程序模板/公司网站seo外包

好久没涂鸦了&#xff0c;最近一段时间一个人做项目&#xff0c;有些忙乱。写一篇关于生产领料的帖子&#xff0c;这篇帖子只是描述了我实施这个项目的做法&#xff0c;只适合这个项目的实际情况&#xff0c;没有普遍意义&#xff0c;每个项目都有自己的需求&#xff0c;抛砖引…...

保定网站制作报价/广东网站关键词排名

本论文发表于2018年BMCV&#xff0c;全称是《Guided Upsampling Network for Real-Time Semantic Segmentation》。介绍论文贡献提出一个新颖的名为Guided Upsampling Network多分辨率网络架构&#xff0c;512x1024分辨率图像在GPU可达到33FPS的速度&#xff0c;且在cityscapes…...

花瓣网素材/站长之家seo查询官方网站

传送门 可以离线&#xff0c;把询问拆成四个&#xff0c;然后把所有的按\(x\)坐标排序&#xff0c;这样就只要考虑\(y\)坐标了。然后把\(y\)坐标离散化&#xff0c;用树状数组统计即可 记得开longlong //minamoto #include<bits/stdc.h> #define R register #define int …...