CAN/FD CAN总线配置 最新详解 包含理论+实战(附带源码)
看前须知:本篇文章不会说太多理论性的内容(重点在理论结合实践),顾及实操,应用,一切理论内容支撑都是为了后续实际操作进行铺垫,重点在于读者可以看完文章应用。(也为节约读者时间,节约学习时间成本)
一、理论部分
CAN总线(Controller Area Network Bus)控制器局域网总线
CAN总线是由BOSCH公司开发的一种简洁易用、传输速度快、易扩展、可靠性高的串行通信总线,广泛应用于汽车、嵌入式、工业控制等领域

CAN硬件电路
每个设备通过CAN收发器挂载在CAN总线网络上
CAN控制器引出的TX和RX与CAN收发器相连,CAN收发器引出的CAN_H和CAN_L分别与总线的CAN_H和CAN_L相连
(xCAN_TX直连CAN收发器TX,同理RX如此)
高速CAN使用闭环网络,CAN_H和CAN_L两端添加120Ω的终端电阻
(避免回波反射的作用)

低速CAN使用开环网络,CAN_H和CAN_L其中一端添加2.2kΩ的终端电阻
(类IIC有着上拉的作用)

CAN电平标准


CAN总线特征:
两根通信线(CAN_H、CAN_L),线路少
差分信号通信,抗干扰能力强
高速CAN(ISO11898):125k~1Mbps, <40m
低速CAN(ISO11519):10k~125kbps, <1km
异步,无需时钟线,通信速率由设备各自约定
半双工,可挂载多设备,多设备同时发送数据时通过仲裁判断先后顺序
11位/29位报文ID,用于区分消息功能,同时决定优先级
可配置1~8字节的有效载荷
可实现广播式和请求式两种传输方式
应答、CRC校验、位填充、位同步、错误处理等特性
| 帧类型 | 用途 |
| 数据帧 | 发送设备主动发送数据(广播式) |
| 遥控帧 | 接收设备主动请求数据(请求式) |
| 错误帧 | 某个设备检测出错误时向其他设备通知错误 |
| 过载帧 | 接收设备通知其尚未做好接收准备 |
| 帧间隔 | 用于将数据帧及遥控帧与前面的帧分离开 |

| 字段 | 经典CAN (CAN 2.0) | FDCAN |
|---|---|---|
| SOF(Start of Frame) | 帧起始 | 帧起始 |
| ID(Identifier) | 11位/29位 | 11位/29位 |
| RTR(Remote Transmission Request) | 远程请求位 | 仅在经典CAN模式下有效 |
| IDE(Identifier Extension) | 扩展标志位 | 扩展标志位 |
| SRR(Substitute Remote Request) | 替代RTR | 替代RTR |
| r0/r1(Reserve) | 1位保留 | 2位保留 |
| FDF(Flexible Data-rate Format) | 无 | 指示是否为FDCAN帧 |
| BRS(Bit Rate Switching) | 无 | 指示数据段是否使用更高波特率 |
| DLC(Data Length Code) | 4位(支持0~8字节) | 4位(支持0~64字节) |
| Data | 0~8 字节 | 0~64 字节 |
| CRC(Cyclic Redundancy Check) | 15/17位 | 17/21位 |
| ACK(Acknowledgement) | 应答位 | 应答位 |
| CRC/ACK界定符 | 为ACK前后提供时间 | 为ACK前后提供时间 |
| EOF(End of Frame) | 帧结束 | 帧结束 |
遥控帧
遥控帧无数据段,RTR为隐性电平1,其他部分与数据帧相同

错误帧
总线上所有设备都会监督总线的数据,一旦发现“位错误”或“填充错误”或“CRC错误”或“格式错误”或“应答错误” ,这些设备便会发出错误帧来破坏数据,同时终止当前的发送设备

过载帧
当接收方收到大量数据而无法处理时,其可以发出过载帧,延缓发送方的数据发送,以平衡总线负载,避免数据丢失

帧间隔
将数据帧和遥控帧与前面的帧分离开

位填充
发送方 每发送 5 个连续相同电平位(0 或 1)后,自动插入 1 个相反电平的填充位。
接收方 在收到数据时,会检测并移除填充位,恢复原始数据流。
| 即将发送的原始数据 | 实际发送的数据(填充后) | 接收后移除填充 |
|---|---|---|
100000110 | 1000001110 | 100000110 |
10000011110 | 1000001111100 | 10000011110 |
0111111111110 | 011111011111010 | 0111111111110 |
FDCAN(Flexible Data-rate CAN)是CAN总线的升级版本,旨在提高数据传输速度和数据负载能力。它兼容经典CAN(CAN2.0),同时提供更高效的通信性能,使其在汽车电子、工业控制、机器人等领域得到广泛应用。



FDCAN 主要特性
更高的数据速率:
最高可达 8Mbps(相比经典CAN的1Mbps有大幅提升)。
更大的数据负载:
经典CAN最大数据长度:8字节
FDCAN最大数据长度:64字节

更高效的协议:
采用 位速率切换(BRS, Bit Rate Switching):允许在数据段提升传输速率,提高吞吐量。
改进的错误检测机制:包括Cyclic Redundancy Check(CRC)增强,提高数据可靠性。
兼容性:
向下兼容 经典CAN,可与CAN 2.0设备共存。

可以混合经典CAN和FDCAN设备,确保平滑升级。
FDCAN的帧格式,FDCAN与经典CAN的帧结构类似,但在数据段长度和速率切换上有所不同:
标准帧格式(11-bit 标准 ID)
扩展帧格式(29-bit 扩展 ID)
数据字段可变(8~64 字节)
位速率切换(BRS) 用于在数据段加速传输
| 字段 | 说明 |
|---|---|
| 帧起始(SOF) | 表示帧开始 |
| 标识符(ID) | 11位/29位 |
| 控制字段 | 指示数据长度、BRS、FDF(FDCAN帧标识)等 |
| 数据字段 | 可变长度(0~64字节) |
| CRC 校验 | 用于错误检测 |
| 确认字段 | 其他节点发送ACK |
| 帧结束 | 结束标识 |
标识符过滤器
每个过滤器单元由 4 个关键控制位 + 2 个 32 位寄存器(R1 和 R2)组成:
| 配置项 | 作用 | 说明 |
|---|---|---|
| FSCx(Filter Scale,位宽设置) | 选择过滤器位宽 | 0:16 位模式(适用于 标准 ID)。 1:32 位模式(适用于 扩展 ID)。 |
| FBMx(Filter Mode,模式设置) | 选择过滤模式 | 0:屏蔽模式(Mask Mode)。 1:列表模式(List Mode)。 |
| FFAx(Filter FIFO Assignment,关联 FIFO) | 指定接收 FIFO | 0:匹配的消息进入 FIFO 0。 1:匹配的消息进入 FIFO 1。 |
| FACTx(Filter Activation,激活设置) | 启用或禁用过滤器 | 0:过滤器禁用(不使用)。 1:过滤器启用(使用)。 |
标准 ID,屏蔽模式,匹配 0x100 ~ 0x1FF
FDCAN_FilterTypeDef sFilterConfig;
sFilterConfig.IdType = FDCAN_STANDARD_ID; // 标准 ID(11-bit)
sFilterConfig.FilterIndex = 0; // 过滤器索引 0
sFilterConfig.FilterType = FDCAN_FILTER_MASK; // 屏蔽模式
sFilterConfig.FilterConfig = FDCAN_FILTER_TO_RXFIFO0; // 关联 FIFO 0
sFilterConfig.FilterID1 = 0x100; // 基准 ID
sFilterConfig.FilterID2 = 0x700; // 掩码(低 8 位可变)if (HAL_FDCAN_ConfigFilter(&hfdcan1, &sFilterConfig) != HAL_OK)
{Error_Handler();
}
扩展 ID,列表模式,匹配 0x12345678
sFilterConfig.IdType = FDCAN_EXTENDED_ID; // 扩展 ID(29-bit)
sFilterConfig.FilterIndex = 1; // 过滤器索引 1
sFilterConfig.FilterType = FDCAN_FILTER_LIST; // 列表模式
sFilterConfig.FilterConfig = FDCAN_FILTER_TO_RXFIFO1; // 关联 FIFO 1
sFilterConfig.FilterID1 = 0x12345678; // 仅允许此 ID
sFilterConfig.FilterID2 = 0x00000000; // 备用if (HAL_FDCAN_ConfigFilter(&hfdcan1, &sFilterConfig) != HAL_OK)
{Error_Handler();
}
FDCAN 具有 两个接收 FIFO(FIFO 0 和 FIFO 1):
FIFO 0:通常用于 高优先级消息。
FIFO 1:用于 低优先级或非关键消息。
在过滤器配置时:
FFAx = 0:匹配的消息存入 FIFO 0。
FFAx = 1:匹配的消息存入 FIFO 1。
过滤器的激活
所有过滤器在默认情况下 禁用(FACTx=0),需要手动激活:
HAL_FDCAN_Start(&hfdcan1);
如果需要修改过滤器,先禁用,再重新配置:
HAL_FDCAN_Stop(&hfdcan1);
HAL_FDCAN_ConfigFilter(&hfdcan1, &sFilterConfig);
HAL_FDCAN_Start(&hfdcan1);
测试模式
静默模式:用于分析CAN总线的活动,不会对总线造成影响
hfdcan1.Init.Mode = FDCAN_MODE_BUS_MONITORING; // 设为静默模式
HAL_FDCAN_Init(&hfdcan1);

环回模式:用于自测试,同时发送的报文可以在CAN_TX引脚上检测到
hfdcan1.Init.Mode = FDCAN_MODE_INTERNAL_LOOPBACK; // 设为环回模式
HAL_FDCAN_Init(&hfdcan1);

环回静默模式:用于热自测试,自测的同时不会影响CAN总线
hfdcan1.Init.Mode = FDCAN_MODE_EXTERNAL_LOOPBACK; // 设为环回静默模式
HAL_FDCAN_Init(&hfdcan1);

二、实操部分
下述配置可以用到相关的软件比如笔者用的这款软件。
重点说明下配置问题

#include "fdcan.h"/* USER CODE BEGIN 0 */
//FDCAN_RxHeaderTypeDef RxHeader;
//uint8_t RxData[8];
//FDCAN_TxHeaderTypeDef TxHeader;
//uint8_t TxData[8]={0};
/* USER CODE END 0 */FDCAN_HandleTypeDef hfdcan2;/* FDCAN2 init function */
void MX_FDCAN2_Init(void)
{/* USER CODE BEGIN FDCAN2_Init 0 *//* USER CODE END FDCAN2_Init 0 *//* USER CODE BEGIN FDCAN2_Init 1 *//* USER CODE END FDCAN2_Init 1 */hfdcan2.Instance = FDCAN2;hfdcan2.Init.ClockDivider = FDCAN_CLOCK_DIV1;hfdcan2.Init.FrameFormat = FDCAN_FRAME_FD_BRS;hfdcan2.Init.Mode = FDCAN_MODE_NORMAL;hfdcan2.Init.AutoRetransmission = DISABLE;hfdcan2.Init.TransmitPause = DISABLE;hfdcan2.Init.ProtocolException = DISABLE;hfdcan2.Init.NominalPrescaler = 4;hfdcan2.Init.NominalSyncJumpWidth = 4;hfdcan2.Init.NominalTimeSeg1 = 31;hfdcan2.Init.NominalTimeSeg2 = 8;hfdcan2.Init.DataPrescaler = 2; hfdcan2.Init.DataSyncJumpWidth = 4;hfdcan2.Init.DataTimeSeg1 = 11;hfdcan2.Init.DataTimeSeg2 = 4;hfdcan2.Init.StdFiltersNbr = 0;hfdcan2.Init.ExtFiltersNbr = 0;hfdcan2.Init.TxFifoQueueMode = FDCAN_TX_FIFO_OPERATION;if (HAL_FDCAN_Init(&hfdcan2) != HAL_OK){Error_Handler();}/* USER CODE BEGIN FDCAN2_Init 2 *//* USER CODE END FDCAN2_Init 2 */}void HAL_FDCAN_MspInit(FDCAN_HandleTypeDef* fdcanHandle)
{GPIO_InitTypeDef GPIO_InitStruct = {0};RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};if(fdcanHandle->Instance==FDCAN2){/* USER CODE BEGIN FDCAN2_MspInit 0 *//* USER CODE END FDCAN2_MspInit 0 *//** Initializes the peripherals clocks*/PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_FDCAN;PeriphClkInit.FdcanClockSelection = RCC_FDCANCLKSOURCE_PLL;if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK){Error_Handler();}/* FDCAN2 clock enable */__HAL_RCC_FDCAN_CLK_ENABLE();__HAL_RCC_GPIOB_CLK_ENABLE();/**FDCAN2 GPIO ConfigurationPB6 ------> FDCAN2_TXPB5 ------> FDCAN2_RX*/GPIO_InitStruct.Pin = GPIO_PIN_6|GPIO_PIN_5;GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;GPIO_InitStruct.Pull = GPIO_NOPULL;GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;GPIO_InitStruct.Alternate = GPIO_AF9_FDCAN2;HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);/* USER CODE BEGIN FDCAN2_MspInit 1 *//* USER CODE END FDCAN2_MspInit 1 */}
}void HAL_FDCAN_MspDeInit(FDCAN_HandleTypeDef* fdcanHandle)
{if(fdcanHandle->Instance==FDCAN2){/* USER CODE BEGIN FDCAN2_MspDeInit 0 *//* USER CODE END FDCAN2_MspDeInit 0 *//* Peripheral clock disable */__HAL_RCC_FDCAN_CLK_DISABLE();/**FDCAN2 GPIO ConfigurationPB6 ------> FDCAN2_TXPB5 ------> FDCAN2_RX*/HAL_GPIO_DeInit(GPIOB, GPIO_PIN_6|GPIO_PIN_5);/* USER CODE BEGIN FDCAN2_MspDeInit 1 *//* USER CODE END FDCAN2_MspDeInit 1 */}
}/* USER CODE BEGIN 1 */
//void FDCAN2_Config(void)
//{
// FDCAN_FilterTypeDef sFilterConfig;
//
// sFilterConfig.IdType = FDCAN_STANDARD_ID;
// sFilterConfig.FilterIndex = 0;
// sFilterConfig.FilterType = FDCAN_FILTER_MASK;
// sFilterConfig.FilterConfig = FDCAN_FILTER_TO_RXFIFO0;
// sFilterConfig.FilterID1 = 0x000;
// sFilterConfig.FilterID2 = 0x000;
// if (HAL_FDCAN_ConfigFilter(&hfdcan2, &sFilterConfig) != HAL_OK)
// {
// Error_Handler();
// }
//
// sFilterConfig.IdType = FDCAN_EXTENDED_ID;
// sFilterConfig.FilterIndex = 0;
// sFilterConfig.FilterType = FDCAN_FILTER_RANGE;
// sFilterConfig.FilterConfig = FDCAN_FILTER_TO_RXFIFO0;
// sFilterConfig.FilterID1 = 0x00000000;
// sFilterConfig.FilterID2 = 0x1FFFFFFF;
// if (HAL_FDCAN_ConfigFilter(&hfdcan2, &sFilterConfig) != HAL_OK)
// {
// Error_Handler();
// }
//
// if (HAL_FDCAN_ConfigGlobalFilter(&hfdcan2, FDCAN_REJECT, FDCAN_REJECT, FDCAN_FILTER_REMOTE, FDCAN_FILTER_REMOTE) != HAL_OK)
// {
// Error_Handler();
// }
//
// if (HAL_FDCAN_Start(&hfdcan2) != HAL_OK)//启动CAN
// {
// Error_Handler();
// }
//
// if (HAL_FDCAN_ActivateNotification(&hfdcan2, FDCAN_IT_RX_FIFO0_NEW_MESSAGE, 0) != HAL_OK)//设置中断使能
// {
// Error_Handler();
// }
// TxHeader.Identifier = 0x000;
// TxHeader.IdType = FDCAN_STANDARD_ID;
// TxHeader.TxFrameType = FDCAN_DATA_FRAME;
// TxHeader.DataLength = FDCAN_DLC_BYTES_8;
// TxHeader.ErrorStateIndicator = FDCAN_ESI_PASSIVE;
// TxHeader.BitRateSwitch = FDCAN_BRS_OFF;
// TxHeader.FDFormat = FDCAN_CLASSIC_CAN;
// TxHeader.TxEventFifoControl = FDCAN_NO_TX_EVENTS;
// TxHeader.MessageMarker = 0;
//
// //HAL_FDCAN_Start(&hfdcan2); 滤波器后方已经配置
//}
/* USER CODE END 1 */
txHeader.Identifier = 0x123; // 设置消息标识符
txHeader.IdType = FDCAN_STANDARD_ID;
txHeader.TxFrameType = FDCAN_DATA_FRAME; // 设置为数据帧
txHeader.DataLength = FDCAN_DLC_BYTES_64;
txHeader.ErrorStateIndicator = FDCAN_ESI_ACTIVE;
txHeader.BitRateSwitch = FDCAN_BRS_ON;
txHeader.FDFormat = FDCAN_FD_CAN; //FDCAN_FD_CAN
txHeader.TxEventFifoControl = FDCAN_NO_TX_EVENTS;
txHeader.MessageMarker = 0; // 消息标记
代码内容就分析到这,更多问题可以联系博主。
相关文章:
CAN/FD CAN总线配置 最新详解 包含理论+实战(附带源码)
看前须知:本篇文章不会说太多理论性的内容(重点在理论结合实践),顾及实操,应用,一切理论内容支撑都是为了后续实际操作进行铺垫,重点在于读者可以看完文章应用。(也为节约读者时间&a…...
DE2-115分秒计数器
一、模块设计 如若不清楚怎么模块化,请看https://blog.csdn.net/szyugly/article/details/146379170?spm1001.2014.3001.5501 1.1顶层模块 module top_counter(input wire CLOCK_50, // 50MHz时钟input wire KEY0, // 暂停/继续按键out…...
MoE Align Sort在医院AI医疗领域的前景分析(代码版)
MoE Align & Sort技术通过优化混合专家模型(MoE)的路由与计算流程,在医疗数据处理、模型推理效率及多模态任务协同中展现出显著优势,其技术价值与应用意义从以下三方面展开分析: 一、方向分析 1、提升医疗数据处理效率 在医疗场景中,多模态数据(如医学影像、文本…...
【已解决】Webstorm 每次使用 git pull/push 都要输入令牌/密码登录
解决办法:勾上【使用凭据帮助程序】(英文:Use credential helper)...
阅读分析Linux0.11 /boot/setup.s
目录 第一部分第二部分第三部分 该源文件功能分为三部分: (1)源文件开始部分是通过各种中断指令, 初始化计算机的组成硬件,获得硬件的参数,然后保存到段空间0X9000。该空间原来是保存加载到内存的引导扇区内…...
Cmake:Win10 如何编译 midifile C++应用程序
先从 Microsoft C Build Tools - Visual Studio 下载 1.73GB 安装 "Microsoft C Build Tools“ 下载:midifile 项目 , 将 midifile-master.zip 解压到 D:\Music-soft 参阅: cmake超详细入门教程 CMake是一个跨平台的自动化建构系统,它使用一个名为 CMakeLi…...
QEMU源码全解析 —— 块设备虚拟化(14)
接前一篇文章:QEMU源码全解析 —— 块设备虚拟化(13) 本文内容参考: 《趣谈Linux操作系统》 —— 刘超,极客时间 《QEMU/KVM源码解析与应用》 —— 李强,机械工业出版社 特此致谢! 上一回开始解析VirtioDeviceClass的realize函数virtio_blk_device_realize(),再来回…...
软路由安装指南
1.openwrt下载 : 选择合适的安装包,我用的软路由CPU主板是j3160,属于X86_64架构,所以筛选的时候使用X86_64的安装镜像 openwrt的官方地址可能国内打不开,需要科学上网 openwrt安装镜像下载地址 我准备用U盘引导小主机开机,进而安装openwrt操作系统,所以下载 .img.gz 文…...
机器视觉工程师的专业精度决定职业高度,而专注密度决定成长速度。低质量的合群,不如高质量独处
在机器视觉行业,真正的技术突破往往诞生于深度思考与有效碰撞的辩证统一。建议采用「70%高质量独处30%精准社交」的钻石结构,构建可验证的技术能力护城河。记住:你的专业精度决定职业高度,而专注密度决定成长速度。 作为机器视觉工…...
Oracle 数据库中,并行 DML
在 Oracle 数据库中,PL/SQL 的 BEGIN...END 块默认是串行执行的,但可以通过以下方法实现并行处理,提升大规模数据操作的性能: 并行 DML(Data Manipulation Language) 在 BEGIN...END 块中启用并行 DML&am…...
Spring Boot 集成 Redis中@Cacheable 和 @CachePut 的详细对比,涵盖功能、执行流程、适用场景、参数配置及代码示例
以下是 Cacheable 和 CachePut 的详细对比,涵盖功能、执行流程、适用场景、参数配置及代码示例: 1. 核心对比表格 特性CacheableCachePut作用缓存方法的返回结果,避免重复计算执行方法并更新缓存,不覆盖原有缓存执行流程缓存命中…...
3500 阶乘求和
3500 阶乘求和 ⭐️难度:中等 🌟考点:2023、思维、省赛 📖 📚 import java.util.Scanner;public class Main {public static void main(String[] args) {long sum 0;for(int i1;i<50;i) { // 之后取模都相等su…...
软件工程(应试版)图形工具总结(二)
遇到的问题,都有解决方案,希望我的博客能为你提供一点帮助。 教材参考《软件工程导论(第六版)》 七、 层次图(H图)与HIPO图 1、概述 1.1、层次图(Hierarchy Chart / H图) 核心…...
思维链、思维树、思维图与思维森林在医疗AI编程中的应用蓝图
在医疗AI编程中,思维链(Chain of Thought, CoT)、思维树(Tree of Thoughts, ToT)、思维图(可能指知识图谱或逻辑图)以及思维森林(Forest-of-Thought, FoT)等技术框架通过模拟人类认知和推理过程,显著提升了AI在复杂医疗场景中的决策能力和可解释性: 1. 思维链(CoT)…...
SpringBoot异步任务实践指南:提升系统性能的利器
精心整理了最新的面试资料和简历模板,有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 引言 在现代Web应用中,高并发场景下的响应速度和资源利用率是系统设计的重要考量。SpringBoot通过简洁的异步任务机制,帮助开发者轻松…...
化工行业如何通过定制化工作流自动化实现25-30%成本优化?
作者:Mihir Jhaveri 编译:李升伟 发布日期:2024年10月30日 在化工生产领域,数字化转型正以颠覆性态势重塑产业格局。通过集成定制化软件、ERP系统、工业物联网(IIoT)传感网络、机器人流程自动化࿰…...
嵌入式硬件篇---嘉立创PCB绘制
文章目录 前言一、PCB绘制简介1.1绘制步骤1.1.1前期准备1.1.2原理图设计1.1.3原理图转PCB1.1.4PCB布局1.1.5布线1.1.6布线优化和丝印1.1.7制版1.2原理1.2.1电气连接原理1.2.2信号传输原理1.2.3电源和接地原理1.3注意事项1.3.1元件封装1.3.2布局规则1.3.3过孔设计1.3.4DRC检查1.…...
CSS Id 和 Class 选择器学习笔记
一、概述 在 CSS 中,id 和 class 选择器是用于为 HTML 元素指定样式的强大工具。它们可以帮助我们精确地控制页面中元素的样式,让页面设计更加灵活和高效。 二、id 选择器 1. 定义和使用 定义:id 选择器用于为具有特定 id 属性的 HTML 元素…...
Linux的 /etc/sysctl.conf 笔记250404
Linux的 /etc/sysctl.conf 笔记250404 /etc/sysctl.conf 是 Linux 系统中用于 永久修改内核运行时参数 的核心配置文件。它通过 sysctl 工具实现参数的持久化存储,确保系统重启后配置依然生效。以下是其详细说明: 📂 备份/etc/sysctl.conf t…...
LocaDate、LocalTime、LocalDateTime
Java8的时间处理 Java的时间处理在早期版本中存在诸多问题(如 java.util.Date 和 java.util.Calendar 的混乱设计),但Java8引入了引入了全新的 java.time包(基于JSR 310),提供了更清晰、线程安全且强大的时…...
1.Qt信号与槽
本篇主要介绍信号和槽,如何关联信号和槽以及用QPixmap在窗口中自适应显示图片 本文部分ppt、视频截图原链接:[萌马工作室的个人空间-萌马工作室个人主页-哔哩哔哩视频] 1. 信号 一般不需要主动发送信号,只有自定义的一些控件才需要做信号的…...
MySQL 基础入门
写在前面 关于MySQL的下载安装和其图形化软件Navicat的下载安装,网上已经有了很多的教程,这里就不再赘述了,本文主要是介绍了关于MySQL数据库的基础知识。 MySQL数据库 MySQL数据库基础 MySQL数据库概念 MySQL 数据库: 是一个关系型数据库管理系统 。 支持SQL语…...
shell语言替换脚本、填补整个命令行
shell语言替换脚本 填补整个命令行正则查询服务器指定路径替换内容 填补整个命令行 多用于脚本显示 seq -s "*" tput cols |tr -d [:digit:]正则查询 grep -r -E register[0-9]{5} /www/wwwroot服务器指定路径替换内容 #!/bin/bash cat > 1.sh << EOF #…...
数据分析与知识发现 论文阅读【信息抽取】
文章目录 基于知识蒸馏的半监督古籍实体抽取数据集模型实验结果 基于大语言模型的专利命名实体识别方法研究数据集评估公式实验 基于数据增强和多任务学习的突发公共卫生事件谣言识别研究数据集实验结果 参考 基于知识蒸馏的半监督古籍实体抽取 数据集 本文在有监督数据集的基…...
Compose组件转换XML布局
文章目录 学习JetPack Compose资源前言:预览界面的实现Compose组件的布局管理一、Row和Colum组件(LinearLayout)LinearLayout(垂直方向 → Column)LinearLayout(水平方向 → Row) 二、相对布局 …...
Linux开发工具——vim
📝前言: 上篇文章我们讲了Linux开发工具——apt,这篇文章我们来讲讲Linux开发工具——vim 🎬个人简介:努力学习ing 📋个人专栏:Linux 🎀CSDN主页 愚润求学 🌄其他专栏&a…...
Vue3学习二
认识组件的嵌套 还可以将Main中内容再划分 scoped防止组件与组件之间的样式相互污染 组件的通信 父子组件之间通信的方式 父组件传递给子组件 给传过来的内容做限制 type为传的内容的属性类型,required为true表示该内容是必须传的,default为,…...
[ deepseek 指令篇章 ]300个领域和赛道喂饭级deepseek指令
🍬 博主介绍 👨🎓 博主介绍:大家好,我是 _PowerShell ,很高兴认识大家~ ✨主攻领域:【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 🎉点赞➕评论➕收藏 养成习…...
2024第十五届蓝桥杯大赛软件赛省赛C/C++ 大学 B 组
记录刷题的过程、感悟、题解。 希望能帮到,那些与我一同前行的,来自远方的朋友😉 大纲: 1、握手问题-(解析)-简单组合问题(别人叫她 鸽巢定理)😇,感觉叫高级了…...
C++ | C++11知识点
前言: 本篇内容讲述了C11中比较重要的内容为:右值引用、可变参数模板、lambda表达式和包装器。 ps:包装器博主在另一篇文章讲述的,本篇文章包装器板块为原文链接。 C11知识点目录 花括号初始化自定义类型的花括号初始化内…...

