vcanfd配置与使用

canfd

CAN FD (Controller Area Network Flexible Data-rate) 是传统 CAN (Controller Area Network) 的升级版本,旨在满足现代汽车电子系统和工业自动化中对更高数据速率和更大数据负载的需求。以下是对 CAN FD 的详细介绍:

CAN 和 CAN FD 的背景

CAN 是由 Robert Bosch GmbH 在 1980 年代开发的串行通信协议,用于车辆内部各控制器(ECU)之间的通信。由于其鲁棒性、实时性和错误检测能力,CAN 被广泛应用于汽车和工业自动化领域。然而,随着技术进步和系统复杂性的增加,传统 CAN 的数据速率(最高 1 Mbps)和数据帧长度(最多 8 字节)已不能满足新的需求。因此,CAN FD 应运而生。

CAN FD 的特点

  1. 更高的数据速率

    • CAN FD 允许在数据阶段使用高达 8 Mbps 的数据速率,而传统 CAN 的最大数据速率为 1 Mbps。
  2. 更大的数据帧

    • CAN FD 允许数据帧长度扩展到 64 字节,而传统 CAN 仅支持最多 8 字节的数据负载。
  3. 灵活的数据速率

    • 在同一帧中,CAN FD 可以在仲裁阶段使用较低的速率,以确保向下兼容传统 CAN 节点,然后在数据阶段切换到更高的速率。

CAN FD 的帧格式

CAN FD 帧格式与传统 CAN 帧格式类似,但有一些关键区别:

  1. 控制字段

    • 增加了一个 FDF (Flexible Data-rate Format) 位,用于指示这是一个 CAN FD 帧。
    • 增加了一个 BRS (Bit Rate Switch) 位,用于指示在数据阶段切换到更高的数据速率。
    • 取消了传统 CAN 中的 r0 保留位。
  2. 数据字段

    • 数据字段长度可以是 0 到 64 字节,而传统 CAN 是 0 到 8 字节。
  3. CRC 校验

    • 增加了一个 CRC 部分,以确保数据完整性。CAN FD 使用更长的 CRC 码(17 或 21 位),以适应更大的数据帧。

CAN FD 的优势

  1. 更高的数据吞吐量

    • 通过提高数据速率和数据帧长度,CAN FD 提供了更高的数据传输效率和吞吐量。
  2. 兼容性

    • CAN FD 节点可以与传统 CAN 节点共存于同一总线系统,确保向下兼容性。
  3. 鲁棒性

    • 保留了 CAN 的所有错误检测和纠正机制,确保通信的可靠性。
  4. 成本效益

    • 与其他高带宽总线系统相比,CAN FD 提供了一种成本效益更高的解决方案,适用于现有 CAN 总线基础设施的升级。

CAN FD 的应用

  1. 汽车电子

    • 由于汽车电子系统变得越来越复杂,CAN FD 能够提供更高的数据速率和更大的数据帧,满足现代汽车对数据通信的需求。
  2. 工业自动化

    • 在工业自动化领域,CAN FD 提供了更高效的数据通信,适用于机器人、自动化设备和传感器网络。
  3. 其他嵌入式系统

    • 适用于任何需要高数据速率和可靠通信的嵌入式系统,如医疗设备、航天器和消费电子。

CAN FD 示例

下面是一个简化的 CAN FD 帧的示例,展示了它与传统 CAN 帧的不同之处:

+--------------------------------------------------------------------+
| 仲裁阶段 (Arbitration Phase) | 控制字段 (Control Field)          |
+-------------------------------+------------------------------------+
| 标识符 | FDF | BRS | EDL | 数据长度代码 (DLC) | 数据字段 (0-64 字节) |
+--------+-----+-----+-----+--------------------+--------------------+
| 11/29  |  1  |  1  |  1  |         15         | 0 到 64 字节的有效数据 |
+--------+-----+-----+-----+--------------------+--------------------+

总结

CAN FD 是传统 CAN 的自然进化,它通过提高数据速率和扩展数据帧长度,满足了现代汽车和工业自动化系统的需求。它的向下兼容性、鲁棒性和成本效益使其成为升级现有 CAN 网络的理想选择。

vcanfd

虚拟 CAN FD (vCAN FD) 是一种在没有物理 CAN 硬件的情况下模拟 CAN FD 网络的工具。这对于开发和测试 CAN FD 应用程序非常有用,因为它允许开发者在虚拟环境中验证代码的功能和行为。虚拟 CAN FD 通常由软件实现,可以在 PC 上运行,为开发、调试和测试提供便利。

虚拟 CAN FD 的优势

  1. 方便开发和测试:在没有物理 CAN 硬件的情况下,可以进行开发和测试,节省成本。
  2. 提高调试效率:开发人员可以在虚拟环境中快速迭代和调试代码。
  3. 支持自动化测试:可以轻松集成到自动化测试框架中,以实现大规模的回归测试。

在 Linux 上使用 SocketCAN 实现虚拟 CAN FD

SocketCAN 是 Linux 内核中的 CAN 总线支持,通过 vcan 驱动程序,可以实现虚拟 CAN 网络。下面介绍如何在 Linux 上配置和使用虚拟 CAN FD。

安装必要的软件包

确保系统安装了必要的软件包,例如 can-utils

sudo apt-get update
sudo apt-get install can-utils
加载虚拟 CAN 模块

加载 vcan 模块,创建虚拟 CAN 网络接口。

sudo modprobe vcan
创建虚拟 CAN FD 接口

使用 ip 命令创建并配置虚拟 CAN FD 接口。

sudo ip link add dev vcan0 type vcan
sudo ip link set vcan0 mtu 72       # 设置 MTU 以支持 CAN FD
sudo ip link set up vcan0
验证虚拟 CAN FD 接口

使用 ip 命令验证接口是否正确创建。

ip link show vcan0

输出示例:

4: vcan0: <NOARP,UP,LOWER_UP> mtu 72 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000link/can
发送和接收 CAN FD 消息

可以使用 cangencandump 工具发送和接收 CAN FD 消息。

  1. 发送 CAN FD 消息
cangen vcan0 -g 10 -I 123 -D i -n 5

此命令每隔 10 毫秒在 vcan0 接口上发送 5 条带有 ID 123 的随机数据帧。

cangencan-utils 工具包中的一个工具,用于在 CAN 网络上生成随机的 CAN 帧。下面解释一下 cangen vcan0 -g 10 -I 123 -D i -n 5 命令中每个参数的含义:

  • vcan0:指定要在其上发送 CAN 帧的网络接口。在这个例子中,vcan0 是一个虚拟 CAN 接口。

  • -g 10:设置生成帧之间的间隔时间。10 表示间隔时间为 10 毫秒。这意味着每发送一帧后,会等待 10 毫秒再发送下一帧。

  • -I 123:设置 CAN 帧的标识符(ID)。123 是十六进制的 CAN ID。在这个例子中,CAN 帧的标识符被设置为 0x123

  • -D i:设置数据帧的数据部分。

  • i 表示数据字段将包含随机字节。每个生成的帧将具有随机内容。

  • -n 5:设置要生成和发送的帧数。5 表示将生成和发送 5 个 CAN 帧。

    详细解释

    • 接口 (vcan0):指定命令运行在哪个 CAN 接口上。在这里,使用的是虚拟 CAN 接口 vcan0。你可以替换成你实际使用的物理 CAN 接口名称。

    • 间隔 (-g 10):指定两帧之间的生成间隔时间。单位是毫秒。这在测试 CAN 总线负载时很有用,因为它允许你控制帧生成的速率。

    • 标识符 (-I 123):设置帧的 CAN ID。这个 ID 用于在 CAN 网络中识别消息的发送者和消息的类型。CAN ID 可以是标准的(11 位)或扩展的(29 位),取决于具体应用。

    • 数据 (-D i):数据选项用于指定帧的数据字段。i 表示数据字段将被随机填充。如果没有指定数据,默认情况下会生成空帧。这个选项允许你生成各种类型的数据内容以测试不同的场景。

    • 帧数 (-n 5):指定要生成的帧数。在这个例子中,命令将生成 5 个帧。你可以根据需要调整这个数字以生成更多或更少的帧。

    示例

    cangen vcan0 -g 10 -I 123 -D i -n 5
    

    此命令将:

    • 在虚拟 CAN 接口 vcan0 上发送帧。
    • 每隔 10 毫秒发送一帧。
    • 每个帧的 CAN ID 为 0x123
    • 每个帧的数据字段包含随机字节。
    • 总共发送 5 个帧。

    补充

    你可以使用其他参数来自定义生成的帧,例如指定帧的数据长度、使用扩展 ID 等。详细的参数说明可以参考 cangen 的手册页:

    man cangen
    

    或使用 cangen --help 查看帮助信息。

    以下是 cangen 工具的使用说明和示例翻译:

    cangen: 生成 CAN 帧

    用法
    cangen [选项] <CAN 接口>
    
    选项
    • -g <ms>:帧间隔时间(以毫秒为单位,默认:200 毫秒)
    • -e:生成扩展帧格式(EFF)的 CAN 帧
    • -f:生成 CAN FD 帧
    • -R:发送 RTR 帧
    • -m:混合生成 -e-f-R
    • -I <模式>:CAN ID 生成模式 - 见下文
    • -L <模式>:CAN 数据长度码(dlc)生成模式 - 见下文
    • -D <模式>:CAN 数据(有效载荷)生成模式 - 见下文
    • -p <超时>:在 -ENOBUFS 上轮询以 <timeout> 毫秒间隔发送帧
    • -n <数量>:在发送 <count> 个 CAN 帧后终止 - 默认无限
    • -i:忽略 write() 系统调用中的 -ENOBUFS 返回值
    • -x:禁用生成的 CAN 帧的本地环回
    • -v:增加打印已发送 CAN 帧的详细程度
    生成模式
    • 'r':随机值(默认)
    • 'i':递增值
    • <hexvalue>:使用 <hexvalue> 固定值

    在递增 CAN 数据时,数据长度码最小值设为 1。CAN ID 和数据内容使用十六进制值。

    示例
    • cangen vcan0 -g 4 -I 42A -L 1 -D i -v -v
      (固定 CAN ID 和长度,递增数据)

    • cangen vcan0 -e -L i -v -v -v
      (生成 EFF 帧,递增长度)

    • cangen vcan0 -D 11223344DEADBEEF -L 8
      (固定 CAN 数据有效载荷和长度)

    • cangen vcan0 -g 0 -i -x
      (忽略 -ENOBUFS 的全负载测试)

    • cangen vcan0 -g 0 -p 10 -x
      (具有轮询功能的全负载测试,10 毫秒超时)

    • cangen vcan0
      (我最喜欢的默认设置 😃)

  1. 接收 CAN FD 消息
candump vcan0

此命令在 vcan0 接口上接收并打印 CAN FD 消息。

发送和接收

发送
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <errno.h>
#include <sys/ioctl.h>
#include <net/if.h>
#include <linux/can.h>
#include <linux/can/raw.h>#define CAN_INTERFACE "vcan0"void send_canfd_frames() {int s;struct sockaddr_can addr;struct canfd_frame frame;struct ifreq ifr;int enable_canfd = 1;s = socket(PF_CAN, SOCK_RAW, CAN_RAW);if (s < 0) {perror("Socket");exit(EXIT_FAILURE);}if (setsockopt(s, SOL_CAN_RAW, CAN_RAW_FD_FRAMES, &enable_canfd, sizeof(enable_canfd)) < 0) {perror("setsockopt CAN_RAW_FD_FRAMES");close(s);exit(EXIT_FAILURE);}strcpy(ifr.ifr_name, CAN_INTERFACE);ioctl(s, SIOCGIFINDEX, &ifr);addr.can_family = AF_CAN;addr.can_ifindex = ifr.ifr_ifindex;if (bind(s, (struct sockaddr *)&addr, sizeof(addr)) < 0) {perror("Bind");close(s);exit(EXIT_FAILURE);}frame.can_id = 0x123 | CAN_EFF_FLAG; // Extended frame formatframe.len = 64; // CAN FD payload lengthfor (int i = 0; i < 64; i++) {frame.data[i] = i;}while (1) {if (write(s, &frame, sizeof(struct canfd_frame)) != sizeof(struct canfd_frame)) {perror("Write");}printf("Sent CAN FD frame: ID=0x%X LEN=%d\n", frame.can_id, frame.len);sleep(1); // Wait 1 second before sending the next frame}close(s);
}int main() {send_canfd_frames();return 0;
}
接收
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <errno.h>
#include <sys/ioctl.h>
#include <net/if.h>
#include <linux/can.h>
#include <linux/can/raw.h>#define CAN_INTERFACE "vcan0"void receive_canfd_frames() {int s;struct sockaddr_can addr;struct canfd_frame frame;struct ifreq ifr;int enable_canfd = 1;s = socket(PF_CAN, SOCK_RAW, CAN_RAW);if (s < 0) {perror("Socket");exit(EXIT_FAILURE);}if (setsockopt(s, SOL_CAN_RAW, CAN_RAW_FD_FRAMES, &enable_canfd, sizeof(enable_canfd)) < 0) {perror("setsockopt CAN_RAW_FD_FRAMES");close(s);exit(EXIT_FAILURE);}strcpy(ifr.ifr_name, CAN_INTERFACE);ioctl(s, SIOCGIFINDEX, &ifr);addr.can_family = AF_CAN;addr.can_ifindex = ifr.ifr_ifindex;if (bind(s, (struct sockaddr *)&addr, sizeof(addr)) < 0) {perror("Bind");close(s);exit(EXIT_FAILURE);}while (1) {int nbytes = read(s, &frame, sizeof(struct canfd_frame));if (nbytes < 0) {perror("Read");} else if (nbytes == sizeof(struct canfd_frame)) {printf("Received CAN FD frame: ID=0x%X LEN=%d\n", frame.can_id, frame.len);for (int i = 0; i < frame.len; i++) {printf("%02X ", frame.data[i]);}printf("\n");}}close(s);
}int main() {receive_canfd_frames();return 0;
}
注:

canfd和can的发送和接收程序的区别

1.使用的结构体不同

  • struct canfd_frame frame;
  • struct can_frame frame;

2.canfd发送和接收需要使能Socket的canfd功能

int enable_canfd = 1;
if (setsockopt(s, SOL_CAN_RAW, CAN_RAW_FD_FRAMES, &enable_canfd, sizeof(enable_canfd)) < 0) {perror("setsockopt CAN_RAW_FD_FRAMES");close(s);exit(EXIT_FAILURE);
}

启用 CAN FD 模式是必须的,因为默认情况下,套接字配置为只支持经典 CAN 帧。如果不启用 CAN FD 模式,发送 CAN FD 帧时会出现 “Invalid argument” 错误。

CAN_RAW_FD_FRAMES 选项允许套接字发送和接收 CAN FD 帧。如果没有启用这个选项,套接字将仅支持经典 CAN 帧,并且会拒绝长度超过 8 字节的帧,这也是你之前遇到错误的原因。

如果你希望发送和接收 CAN FD 帧,必须包含这段代码。如果你不需要 CAN FD 支持并且仅使用经典 CAN 帧,可以省略它,但在这种情况下,数据帧长度会被限制在 8 字节以内。

对比

CAN(Controller Area Network)和 CAN FD(Controller Area Network Flexible Data-rate)是用于汽车和工业系统通信的两种协议。CAN 是传统的标准,而 CAN FD 是对 CAN 的改进版本。下面是它们之间的详细对比:

基本概念

  • CAN(Controller Area Network):一种标准的多主总线协议,广泛应用于汽车和工业自动化领域,提供高可靠性和实时性。
  • CAN FD(Flexible Data-rate CAN):是对 CAN 协议的扩展,旨在提高数据传输速率和增加数据帧容量。

数据速率

  • CAN
    • 最高数据速率为 1 Mbps。
  • CAN FD
    • 在仲裁阶段与传统 CAN 一样,最高为 1 Mbps。
    • 在数据阶段,最高数据速率可达 8 Mbps。

数据帧长度

  • CAN
    • 最大数据帧长度为 8 字节。
  • CAN FD
    • 最大数据帧长度为 64 字节。

帧结构

  • CAN
    • 标准帧格式包括 11 位标识符和扩展帧格式包括 29 位标识符。
    • 数据长度码(DLC)表示数据字段的长度(0 到 8 字节)。
  • CAN FD
    • 保留了标准和扩展帧格式。
    • DLC 扩展到支持 0 到 64 字节的数据字段。
    • 增加了 FDF(Flexible Data-rate Format)位以区分 CAN 和 CAN FD 帧。
    • 增加了 BRS(Bit Rate Switch)位以指示数据阶段的速率切换。
    • 增加了 EDL(Extended Data Length)位。

误码检测

  • CAN
    • 使用 15 位或 17 位的 CRC 校验。
  • CAN FD
    • 使用 17 位或 21 位的 CRC 校验,以支持更大的数据负载。

兼容性

  • CAN
    • CAN 控制器只能处理 CAN 帧。
  • CAN FD
    • CAN FD 控制器能够处理传统的 CAN 帧和 CAN FD 帧。
    • 在一个网络中,CAN 节点和 CAN FD 节点可以共存,但需要确保仲裁阶段的兼容性。

实时性和可靠性

  • CAN
    • 提供确定性和高实时性,适用于实时控制系统。
  • CAN FD
    • 提供更高的数据吞吐量,同时保留 CAN 的实时性和可靠性特性。

应用场景

  • CAN
    • 广泛应用于汽车电子(如发动机控制单元、传感器、空调系统等)和工业自动化系统。
  • CAN FD
    • 应用于需要更高数据速率和更大数据负载的新一代汽车电子系统(如高级驾驶辅助系统、信息娱乐系统等)和工业自动化系统。

实例比较

CAN 帧结构
  • 标准 CAN 帧:

    +------+--------+------+-------+------+---------+------+
    | SOF  | 标识符 | RTR  | 控制  | 数据  | CRC     | ACK  |
    +------+--------+------+-------+------+---------+------+
    | 1 位 | 11 位  | 1 位 | 6 位  | 0-8 字节 | 15/17 位 | 2 位 |
    +------+--------+------+-------+------+---------+------+
    
  • 扩展 CAN 帧:

    +------+--------+--------+------+-------+------+---------+------+
    | SOF  | 标识符 (前 11 位) | SRR  | IDE  | 标识符 (后 18 位) | RTR  | 控制  | 数据  | CRC     | ACK  |
    +------+--------+--------+------+-------+------+---------+------+
    | 1 位 | 11 位  | 1 位  | 1 位  | 18 位  | 1 位 | 6 位  | 0-8 字节 | 15/17 位 | 2 位 |
    +------+--------+--------+------+-------+------+---------+------+
    
CAN FD 帧结构
  • CAN FD 帧:
    +------+--------+------+-------+-------+------+----------+-------+------+---------+------+
    | SOF  | 标识符 | FDF  | 控制  | 数据长度代码 (DLC) | 数据  | CRC     | ACK  |
    +------+--------+------+-------+-------+------+----------+-------+------+---------+------+
    | 1 位 | 11/29 位 | 1 位 | 1 位  | 4 位   | 0-64 字节 | 17/21 位 | 2 位 |
    +------+--------+------+-------+-------+------+----------+-------+------+---------+------+
    

总结

CAN 和 CAN FD 都是高可靠性、实时性强的总线通信协议。CAN 适用于大多数常规汽车和工业应用,而 CAN FD 则为需要更高数据速率和更大数据负载的现代应用提供了解决方案。通过对 CAN 的改进,CAN FD 保留了 CAN 的许多优点,同时增强了其性能和适用范围。在选择使用 CAN 还是 CAN FD 时,应根据具体应用的需求进行评估。

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

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

相关文章

从hugging face 下模型

支持国内下载hugging face 的东西 下模型权重 model_id 是红色圈复制的 代码 记得设置下载的存储位置 import os from pathlib import Path from huggingface_hub import hf_hub_download from huggingface_hub import snapshot_downloadmodel_id"llava-hf/llava-v1…

【Python机器学习】模型评估与改进——二分类指标

目录 1、错误类型 2、不平衡数据集 3、混淆矩阵 与精度的关系。 准确率、召回率与f-分数 分类报告 4、考虑不确定性 5、准确率-召回率曲线 6、受试者工作特征&#xff08;ROC&#xff09;与AUC 二分类可能是实践中最常见的机器学习应用&#xff0c;也是概念最简单的应…

云原生之容器编排实践-OpenEuler23.09在线安装Kubernetes与KubeSphere

背景 前几篇文章中介绍了如何将 ruoyi-cloud 项目部署到 Kubernetes 集群中&#xff0c;包括网关服务、认证服务和系统服务并且对全部服务采用 YAML 文件的方式来进行部署&#xff0c;这虽然有助于理解 K8S 组织管理资源的风格与底层机制&#xff0c;但是对于团队中不太熟悉命…

代码随想录算法训练营第21天|LeetCode 669. 修剪二叉搜索树、108.将有序数组转换为二叉搜索树、538.把二叉搜索树转换为累加树

1.LeetCode 669. 修剪二叉搜索树 题目链接&#xff1a;https://leetcode.cn/problems/trim-a-binary-search-tree/description/ 文章链接&#xff1a;https://programmercarl.com/0669.修剪二叉搜索树.html 视频链接&#xff1a;https://www.bilibili.com/video/BV17P41177ud?…

【网络】网络基础(一)

网络基础&#xff08;一&#xff09; 文章目录 一、计算机网络背景1.1网络发展1.2认识“协议” 二、网络协议初识2.1OSI七层模型2.2OSI五层模型 三、网络传输基本流程3.1局域网通信3.2网络传输流程不跨子网的网络传输跨子网的网络传输 3.3网络中的地址管理IP地址MAC地址 一、计…

Kotlin中的数据类型

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 目录 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌…

冒泡排序写法

正宗的冒泡排序写法&#xff1a; public class BubbleSort {public static void main(String[] args) {int[] a {4,6,5,24,3,7,1};//初始化一个最大角标变量int n a.length-1;//循环轮次for (int i0;i<n;i){//从后向前开始&#xff0c;相邻元素比较大小&#xff0c;小的元…

Batch Size 不同对evaluation performance的影响

目录 问题描述如果是bugbatch size的设置问题尝试使用GroupNorm解决batchsize不同带来的问题归一化的分类 参考文章 问题描述 深度学习网络训练时&#xff0c;使用较小的batch size训练网络后&#xff0c;如果换用较大的batch size进行evaluation&#xff0c;网络的预测能力会…

Python基础001

Python输出语句 print输出字符串 print("中国四大名著&#xff1a;","西游记|","三国演义|","红楼梦|","水浒传") print(6) print(1 1)Python输入语句 input函数 input() input("我的名字是&#xff1a;") p…

RK3568驱动指南|第十五篇 I2C-第182章 使用Linux中默认的模拟I2C驱动程序

瑞芯微RK3568芯片是一款定位中高端的通用型SOC&#xff0c;采用22nm制程工艺&#xff0c;搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码&#xff0c;支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU&#xff0c;可用于轻量级人工…

线性代数笔记

行列式 求高阶行列式 可以划上三角 上三角 余子式 范德蒙行列式 拉普拉斯公式 行列式行列对换值不变 矩阵 矩阵的运算 同型矩阵加减 对应位置相加减 矩阵的乘法 左边第 i 行 一次 相乘求和 右边 第 j 列 eg 中间相等 两边规模 矩阵的幂运算 解题思路 找规律 数学归纳…

CVE-2024-6387 分析

文章目录 1. 漏洞成因2. 漏洞利用前置知识2.1 相关 SSH 协议报文格式2.2 Glibc 内存分配相关规则 3. POC3.1 堆内存布局3.2 服务端解析数据时间测量3.3 条件竞争3.4 FSOP 4. 相关挑战 原文链接&#xff1a;个人博客 近几天&#xff0c;OpenSSH爆出了一个非常严重的安全漏洞&am…

重生奇迹mu精灵之心怎么搭配

玩家可以通过召唤来召唤多种精灵之心&#xff0c;每种精灵之心增加的属性也不同。精灵之心的作用是为了提升各种各样的属性。我们可以通过召唤获得精灵之心&#xff0c;前面的解锁费用较低&#xff0c;而后面的解锁需要大量的金币来解锁。 召唤精灵之心后&#xff0c;我们可以…

数据结构(JAVA)—代码题

01-数据结构—判断题 02-数据结构—选择题 03 数据结构—多选填空程序填空 ​ 01-顺序表的建立及遍历 import java.util.Iterator; import java.util.LinkedList; import java.util.ListIterator; import java.util.Scanner;public class Main {public static void main(St…

Hadoop-09-HDFS集群 JavaClient 代码上手实战!详细附代码 安装依赖 上传下载文件 扫描列表 PUT GET 进度条显示

章节内容 上一节完成&#xff1a; HDFS的集群启动HDFS的命令行操作HDFS 上传下载移动重命名等操作 背景介绍 这里是三台公网云服务器&#xff0c;每台 2C4G&#xff0c;搭建一个Hadoop的学习环境&#xff0c;供我学习。 之前已经在 VM 虚拟机上搭建过一次&#xff0c;但是没…

基于FPGA的DDS信号发生器

前言 此处仅为基于Vivado实现DDS信号发生器的仿真实现&#xff0c;Vivado的安装请看下面的文章&#xff0c;这里我只是安装了一个标准版本&#xff0c;只要能够仿真波形即可。 FPGA开发Vivado安装教程_vivado安装 csdn-CSDN博客 DDS原理 DDS技术是一种通过数字计算生成波形…

Pandas_DataFrame读写详解:案例解析(第24天)

系列文章目录 一、 读写文件数据 二、df查询数据操作 三、df增加列操作 四、df删除行列操作 五、df数据去重操作 六、df数据修改操作 提示&#xff1a;写完文章后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 系列文章目录前言一、 读写文…

Web 基础与 HTTP 协议

Web 基础与 HTTP 协议 一、Web 基础1.1域名和 DNS域名的概念Hosts 文件DNS&#xff08;Domain Name System 域名系统&#xff09;域名注册 1.2网页与 HTML网页概述HTML 概述网站和主页Web1.0 与 Web2.0 1.3静态网页与动态网页静态网页动态网页 二、HTTP 协议1.1HTTP 协议概述1.…

秋招——MySQL补充——MySQL是如何加行级锁

文章目录 引言正文什么SQL语句会加行级锁查询操作增加对应的行级锁事务的写法 update和delete修改操作也会增加行级锁 行级锁有哪些种类记录锁间隙锁Next-Key锁 MySQL是如何加行级锁&#xff1f;唯一索引等值查询查询记录是存在的查询记录是不存在的 唯一索引范围查找针对大于或…