AUTOSAR基础篇之CanNM

2023-05-16

前言

首先,问大家几个问题,你清楚:

  • 为什么要引入网络管理呢?上电同时启动,下电同时关闭,它不香吗?
  • 你知道车上的ECU节点可以分为哪几种类型吗?
  • 汽车启动时,ECU之间怎么保持同步唤醒的呢?
  • 下电时,ECU又是怎样协同罢工的呢?
  • 汽车熄火后,什么样的ECU会继续工作呢?

这篇,我们来一起探索并回答这些问题。为了便于大家理解,以下是本文的主题大纲:



正文

网络节点类型

汽车上ECU节点千千万万,不可能ignition On时所有ECU都正常工作,而是当用户需要请求相关功能时,参与该功能的相关ECU节点才需要启动起来,否则带来的只是过多对电池的无用消耗。

为了更好的去利用整车的能源,防止出现不必要的电池浪费,网络管理(Network Management,以下简称NM)便可以很好的解决此类问题,最大可能的高效利用整车电池能源,节约用车成本,延长电池使用寿命。

虽然汽车上网络总线类型多种多样,有CAN,FlexyRay、Lin、Ethernet等,但基本原理相似,本文将以最为常见的CAN总线的NM来讲述,举一反三,对于其他总线的NM,AUTOSAR也有相关规范,大家可以自行去阅读学习。

一般而言,按照唤醒方式,我们可以将ECU网络节点类型划分为两大类:本地唤醒与远程唤醒

本地唤醒:唤醒源来源于自身模块,比如常说的KL15硬线唤醒或者hardware sensor感知唤醒等;

远程唤醒:唤醒源来源于自身ECU节点所在的网络报文,该节点可以处于完全休眠状态,一般无静电消耗;

根据这两大类唤醒方式,可以组合出下列四种子唤醒方式,每种方式的供电方式如下图所示:

仅本地唤醒


​ 图1 本地唤醒节点

特点:ECU始终保持after-running状态,当检测到本地唤醒源之后,就会开启网络通信;


仅网络唤醒


​ 图2 仅网络管理唤醒节点

特点: 只有当Transceiver监控到总线电平变化或者特定报文时,就会接通Vreg给到芯片供电,从而唤醒ECU;


本地+网络唤醒


​ 图3 本地+网络唤醒节点

特点: ECU始终保持After-Running模式,当接收到本地唤醒源或者网络唤醒源时,就会启动ECU;


类KL15电唤醒


​ 图4 KL15电唤醒节点

特点: 仅当Power supply 连接至ECU时,ECU才会正常工作,比如常说的KL15唤醒。


NM状态机

本文对于本地唤醒方式不作过多讨论,因为本地唤醒本身就是一种供应商自定义的一种唤醒方式,比较直接,不需要其他ECU节点参与,同时也不会对其他ECU节点造成影响。

但是网络唤醒是以网络管理报文为基础来协同整个网络“同睡同醒”,采用分布式的直接网络管理方式来发送自身节点所需的网络管理请求及自身网络管理状态,并接受来自网络上其他ECU节点的网络管理请求与状态。

因此,对于这些NM状态的变化我们有必要进一步研究NM状态机的状态及它们之间状态转换关系。该状态机的状态类型可分为“三大三小”。其中“三大”指的是Bus Sleep Mode、Network Mode、Prepare Bus-Sleep Mode;而“三小”则值得是Network Mode下的三个子状态:Repeat Message State、Normal Operation Mode、Ready Sleep Mode。


Bus Sleep Mode

当没有远程唤醒或者本地唤醒请求时,ECU的Controller应当切换至Sleep模式,电流消耗将降低至最低水平,该Mode是ECU启动时的起始状态或者是ECU睡眠时的最终状态。

在该模式下,NM报文以及应用报文都应该被禁止发送,但是可以被网络上的报文唤醒。

在此特意说明一点,当Transiver支持并使能了特定帧唤醒时,该ECU只会接受到特定的NM报文才会正常唤醒,否则就会一直处于休眠状态,能够不受网络上应用报文的干扰。

如果Transiver不支持特定帧唤醒,那么网络的任意报文都可以唤醒该ECU,如果唤醒条件不满足,又会走休眠流程继续睡下去,这样“睡醒交替”的方式就是不支持特定帧唤醒的Transiver的典型特征。当然,如果整车上的NM都可以正常运作,那么就不会频繁出现这种“睡醒交替”的方式,这种方式一般都是在做测试时才会较多的体现出来。


Network Mode

一旦进入Network Mode,计时器T_NM_Timeout就会启动,只要成功接收到来自总线上的NM报文或者成功发送至总线NM报文,都会将该计时器T_NM_Timeout重置。

该模式又进一步细分为以下三种子状态,RMS、NOS、RSS

  • Repeat Message State(RMS)
    • 该状态能够确保当ECU的状态机从Bus-Sleep Mode或者Prepare Bus-Sleep mode切换至Network Mode时能够及时的被网络上其他ECU节点发现,也就是告诉其他ECU,“大家注意了,我成功上线了,请多多指教!”
    • 当成功进入到RMS状态时,该节点就会重新发送NM报文并开启计时器T_REPEAT_MESSAGE,应用报文则需要等待第一帧网络管理报文发送之后再发送。
    • 当然,第一帧NM报文可以通过配置参数MSG_CYCLE_ OFFSET来延迟发送,降低在同一时间内的总线负载,这个配置参数默认是0 ,一般根据测试结果来做适当的调整。
    • 在计时器T_REPEAT_MESSAGE超时之前,该节点就会一直保持在该状态,否则将会离开该状态。
    • 在该状态下也存在着两个子状态:
      • NM Immediate Transmit State
        在该模式下,ECU的目的是快速唤醒整个网络,同时该节点将会以配置参数T_NM_ImmediateCycleTime的周期发送NM报文,而发送次数则是由配置参数N_ImmediateNM_TIMES来决定,每一次成功发送,该参数就会减1,直至为0,退出该子状态;
      • NM Normal Transmit State
        在该模式下,ECU节点将会以正常报文周期T_NM_MessageCycle的方式来发送NM报文。



  • Normal Operation State(NOS)
    只要ECU节点自身存在网络通信的需要,那么ECU就会一直工作在NOS的状态下。该状态下NM报文的发送将会以T_NM_MessageCycle的周期来发送报文,每次报文的成功发送或接收或者计时器NM-Timeout超时都会重置该计时器NM-Timeout
    在该状态下的NM报文以及应用报文都应该正常收发通信。
  • Ready Sleep State(RSS)
    在该模式下,ECU节点应当停止发送NM报文。每次成功接受到来自网络上的NM报文,计时器T_NM_TIMEROUT 就会重置,一旦T_NM_TIMEROUT 超时,那么就会离开该状态转而进入Prepare Bus-Sleep状态。

Prepare Bus-Sleep Mode

一旦进入该模式,计时器T_WAIT_BUS_SLEEP就会启动。在该模式下禁止网络管理报文的发送,允许接受NM报文。应用报文已经在buffer中的一般允许继续发送,但最终应该是silent bus,该ECU的Controller的状态应当处于operational mode。一旦T_WAIT_BUS_SLEEP超时,就会进入到Bus-Sleep阶段。


Passive Mode

在该模式下只接受NM报文,但不发送任何的NM报文。该模式可以通过配置得到,同时该模式应只存在于开发或者调试过程中,在正式SOP的软件中禁止出现此种模式。


报文发送与接受状态

在测试的过程中,需要针对网络管理每一个状态下的NM报文与APP报文接收与发送进行测试。如下图所示,体现了在不同NM子状态下的报文发送与接受状态。

  • Bus-Sleep阶段,只接收NM报文唤醒,不发送任何报文;
  • Pre-Bus-Sleep阶段,同样仅允许接收NM报文,对于早已在发送Buffer中的APP报文应发送完毕后立刻停止APP报文;
  • Network Mode模式下,除了在Ready Sleep阶段不允许发送NM报文之外,其余阶段APP报文与NM报文正常收发;

图5 NM过程中报文收发状态

状态机时间参数总结

鉴于在网络管理各子状态的切换过程中都依赖于各种计时器,为了便于后续状态机切换的讲述以及后续查表方便,将相关参数总结如下,以供参考。

图6 NM计时器参数表

NM状态机切换

NM状态机是整个网络管理的核心。从上述内容可知NM管理状态机总共分为3种模式:Bus-Sleep、Pre-Bus-Sleep以及Network Mode。

其中Network Mode 又可分为3个子状态:Repeat Message State、Normal Operation State以及Ready Sleep State。

其中Repeat Message State又可分为Immediate Transmit State与Normal Transmit State。

如图7所示,根据以下状态切换路径来一一讲解各个状态的切换。

图7 NM状态机切换

唤醒源一般可分为本地唤醒源与远程唤醒源。

  • 本地唤醒源:主要指的是基于内部计时器、传感器、按钮或者硬线连接或者基于内部状态的自身请求等。
  • 远程唤醒源: 主要指的是来自网络上的NM报文或者其他相关信号,比如点火开关信号等。

在ECU被唤醒前,软件内部状态机应当充分实现唤醒源的可靠性检查,如果检查失败,应当禁止进入Network Mode。

绝大部分情况下,需要支持NM的ECU都始终连接着KL30电。在这种情况下,ECU是否被启动(存在静态电流消耗),则取决于网络上是否存在任意报文或者存在特定的NM报文。需要注意的是特定的NM报文唤醒方式则取决于是否采用支持特定帧唤醒的Transiver。


  • NM_01(系统初始化):
    当系统KL30启动或者接收到来自网络的唤醒源时,则会执行系统初始化,在初始化的过程中,则会执行CanNM_Init来实现NM的初始化。如果唤醒条件不满足,ECU就会一直停留在Bus-Sleep 阶段,直至满足条件休眠或者被正常唤醒。
  • NM_02(Bus-Sleep to RMS):
    当ECU处于Bus-Sleep阶段时,如果接收到有效的NM报文,则会进入到Normal Transmit State。当进入到该阶段后,在T_REPEAT_MESSAGE 超时前,ECU将按照T_NM_MessageCycle周期来传输报文,同时T_MESSAGE_TIMEOUT也会启动。
  • NM_03(Bus-Sleep to RMS):
    当ECU在Bus-Sleep阶段,存在本地唤醒请求时,ECU应当主动激活网络,并进入Immediate Transmit State阶段,同时将发送的NM报文中的Active Wake up bit置为1。
    在该状态下,应当按照N_ImmediateNM_TIMES的次数发送报文周期为T_NM_ImmediateCycleTime的网络管理报文。
  • NM_04:
    N_ImmediateNM_TIMES 等于0之后,NM状态就会从Immediate Transmit State进入到Normal Transmit State。
  • NM_05(RMS to RMS):
    在RMS阶段,如果T_NM_TIMEROUT超时,当前NM状态不会被改变,但是T_NM_TIMEROUT会被重置。当T_MESSAGE_TIMEOUT超时后,则会调用相应的exception函数通知上层进行处理。
  • NM_06(RMS to NOS):
    当处于RMS阶段时,T_REPEAT_MESSAGE超时后,ECU需要继续保持网络通信的需要,即通过调用CanNM_NetworkRequest函数进入到NOS阶段,而ECU则会继续按照T_NM_MessageCycle来发送NM报文。
  • NM_07(NOS to RMS):
    在NOS阶段,有两个RMS子状态可以到达:Immediate Transmit State 与 Normal Transmit State。如果自身节点有repeat message的需要,那么则会进入到Immediate Transmit State。如果接收到的NM中repeat message bit置1,则进入到Normal Transmit State。
  • NM_08(NOS to NOS):
    在NOS阶段,如果T_NM_TIMEROUT超时,当前NM状态不会被改变,但是T_NM_TIMEROUT会被重置。当T_MESSAGE_TIMEOUT超时后,则会调用相应的exception函数通知上层进行处理。
  • NM_09(NOS to RSS):
    当休眠条件满足时,ECU就会通过CanNm_NetworkRelease函数来实现从NOS至RSS状态。在RSS状态下应当停发NM报文。
  • NM_10(RSS to NOS):
    在RSS状态下,如果存在本地唤醒请求,则可以通过CanNm_NetworkRequest函数来切换至NOS状态。
  • NM_11(RSS to RMS):
    在RSS状态下,RMS存在两种子状态可供进入:Immediate Transmit State与 Normal Transmit State。当自身节点存在repeat message请求时,则会进入前者;当接受到外部的NM报文中repeat message bit为1时,则进入后者。
  • NM_12(RMS to RSS):
    当ECU处在RMS状态中的Normal Transmit State状态下,如果T_REPEAT_MESSAGE超时且满足休眠条件时,则会进入RSS状态。
  • NM_13(RSS to Pre-Bus-Sleep):
    在RSS状态下,如果没有本地唤醒请求或者远程唤醒请求,在计时器T_NM_TIMEROUT 超时之后就会进入Pre-Bus-Sleep 阶段,同时T_MESSAGE_TIMEOUT置为0,启动T_WaitBusSleep计时器。
  • NM_14(Network Mode to Network Mode):
    在Network Mode下,当成功接受或者发送NM报文时T_NM_TIMEROUT 就会被重置,重置该定时器的行为就发生在调用函数CanNM_RxIndication或者CanNM_Txconfirmation接口中。
  • NM_15(Pre-Bus-Sleep to RMS):
    在Pre-Bus-Sleep模式下,如果存在远程唤醒请求,则会进入到RMS阶段中的Normal Transimit State。同时启动T_REPEAT_MESSAGE
  • NM_16(Pre-Bus-Sleep to RMS):
    在Pre-Bus-Sleep模式下,如果存在本地唤醒请求,即调用函数接口CanNm_NetworkRequest来进入到RMS中的Immediate Transmit阶段,应当按照N_ImmediateNM_TIMES的次数发送报文周期为T_NM_ImmediateCycleTime的网络管理报文。
  • NM_17(Pre-Bus-Sleep to Bus-Sleep):
    在Pre-Bus-Sleep模式下,如果不存在本地唤醒或者远程唤醒请求,则进入到Bus-Sleep状态。至于何时关闭电源控制,则可以根据自身节点类型来shutdown。

网络管理报文结构

NM报文作为传递自身节点的NM状态的重要载体,有必要仔细研究报文中每一位Bit的含义。

接下来就以CAN NM报文为例,来一同解析其报文总体结构以及各个Bit的相应含义,以便了解个ECU节点的协同唤醒与休眠方式。

NM报文总体结构解析

如下图8所示,根据最新的AutoSAR官方文档的介绍:

​图8 NM报文结构

由图可知,Byte 0表示当前节点的Source ID,比如如何当前节点发送的NM报文ID为0x514,那么该Source ID就为0x14;Byte1则为CBV,该字节中传递着当前节点的网络状态,是非常重要的字节;其余字节作为User Data给到客户自行定义,如定义当前唤醒源有哪些?网络管理状态机切换过程等。

当然上述报文内容定义只是AutoSAR举例说明,Source ID可以被分配至Byte0,Byte1或者没有,而CBV也是可被分配至Byte0,Byte1或者没有。这些字节内容的分配与定义一般均可以在BSW工具链中进行配置。


CBV详解

鉴于CBV的重要性,如下图9所示,讲解每一个Bit在使用中的具体含义:

​ 图9 CBV Byte定义

Bit 0: Repeat Message Request Bit

  • 0: 代表存在Repeat Message Request ;
  • 1:代表不存在Repeat Message Request ;

Bit 1:PN ShutDown Request Bit(PNSR)

  • 0:NM报文中不包含同步局部网络管理休眠请求;
  • 1:NM报文中包含同步局部网络管理休眠请求;

Bit 3:NM Coordinator Sleep Bit

  • 0:未被主协调NM节点请求开始同步休眠;
  • 1:已被主协调NM节点请求开始同步休眠;

Bit 4: Active Wakeup Bit

  • 0:节点没有唤醒过网络,属于被动唤醒;
  • 1:节点唤醒过网络,属于主动唤醒;

Bit 5: PN Learning Bit(PNL)

  • 0: PNC learning被请求
  • 1: PNC learining未被请求

Bit 6 PN Information Bit(PNI)

  • 0: NM报文中包含PN 信息;
  • 1:NM报文中未包含PN 信息;

上述几个Bit中,经常使用到的也就Bit0,Bit3,Bit4, Bit6这4位,需要重点掌握。

常用函数接口

为了更好的使用该模块函数以及遇到问题时方便调试该模块,特将CanNM模块中较为重要的常用函数列举如下图10所示。

原文链接:
https://zhuanlan.zhihu.com/p/363346037

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AUTOSAR基础篇之CanNM 的相关文章

  • UDP广播的实现

    一 广播的概念 广播 xff1a 由一台主机向该主机所在子网内的所有主机发送数据的方式 任何一个网段最后一个地址就是广播的地址 例如 xff1a 192 168 5 103主机发送广播信息 xff0c 那么 xff0c 广播地址为192 1
  • 必备模块知识——继电器

    一 继电器的概念 1 1 什么是继电器 继电器是一种电控制器件 xff0c 是当输入量的变化达到规定要求时 xff0c 在电气输出电路中使被控量发生预定的阶跃变化的一种电器 继电器具有控制系统和被控制系统 xff0c 通常应用于自动化的控制
  • 必备模块知识——超声波传感器

    一 超声波传感器 1 什么是超声波 人们能听到声音是由于物体振动产生的 xff0c 它的频率在20HZ 20KHZ范围内 xff0c 超过20KHZ称为超声波 xff0c 低于20HZ的称为次声波 常用的超声波频率为几十KHZ 几十MHZ
  • typedef的用法——c语言

    一 ypedef 1 1 xff1a typedef的用法 xff08 如上图所示 xff09 typedef 用法一句话总结 把定义的类型改名 举个例子 xff1a 我们熟悉的int类型 定义一个变量 xff0c 如int a xff1b
  • shell的测试语句

    一 shell的条件测试语句 在写shell脚本时 xff0c 经常遇到的问题就是判断字符串是否相等 xff0c 可能还要检查文件状态或进 行数字测试 xff0c 只有这些测试完成才能做下一步动作 1 1 shell脚本中的条件测试如下 x
  • 在miivii域控制器(基于Xavier)上复现Ultra-Fast-Lane-Detection源论文项目

    源项目链接 一 安装 参考源项目安装教程 xff0c 个别步骤有改动 xff1a 1 我没有安装Anaconda xff0c 所以跳过步骤2 2 步骤3中安装pythorch torchvision的血泪史 xff1a 网上看了很多下载py
  • shell的控制语句(3)

    shell脚本与我们所用的c语言控制语句 xff0c 是存在一些差异的 xff0c 因此 xff0c 我们需要重新认识并且学会它们 因此 xff0c 接下来 xff0c 我会介绍常用的流程控制语句 如 xff1a if for while
  • shell的函数

    一 shell函数 有些脚本段间互相重复 xff0c 如果能只写一次代码块而在任何地方都能引用那就提高了代码的可重用性 shell 允许将一组命令集或语句形成一个可用块 xff0c 这些块称为 shell 函数 二 shell函数的格式 2
  • Visual Studio 2015(C#)编写实现TCP调试助手(服务端+客户端一体)-新手

    近期在做项目的时候运用到了WIFI模块 xff0c 想着自己捣鼓捣鼓弄个上位机调试调试 初次接触 xff0c 长达3天的修修改改终于完成 xff0c 实现代码比较杂乱 xff0c 但是可以正常使用 不足之处 xff0c 还望指正 xff01
  • IDEA This is not a valid Java qualified name问题解决

    今天在创建类的时候突然出现这样的一个错误 This is not a valid Java qualified name 出现这个错误的主要原因是因为类名出现了空格 我是在类名前有一个空格
  • 双系统ubuntu18.04如何更新到22.04

    将双系统中的Ubuntu 18 04更新到22 04 xff0c 按照以下步骤操作 xff1a 1 打开终端并更新系统 xff0c 使用以下命令 xff1a span class token function sudo span span
  • 如何查看自己的ubuntu系统的镜像源,并且换源

    1 查看自己的Ubuntu系统当前使用的镜像源 xff1a 1 打开终端 xff1a 按下Ctrl 43 Alt 43 T xff0c 或者在菜单中搜索 终端 2 输入以下命令并按Enter键 xff1a span class token
  • QT项目2048游戏(C++)(附流程图、源码)

    在学校学完C语言后用easyX图形库写了一个2048游戏 xff0c 在大概学完C 43 43 后用QT改进了一下的2048游戏 游戏框图 流程图 开始界面 游戏中的界面 游戏结束界面 改进之处 1 添加了背景音乐 2 添加了结束游戏后重新
  • 用 Saleae Logic 16 示波器测量并分析 I2C、SPI、串口的信号

    文章目录 一 安装Saleae Logic 16软件二 Saleae Logic 16简单介绍1 Saleae Logic 16 逻辑分析仪2 Saleae Logic 16软件 三 三个实例1 I2C信号2 SPI信号3 串口信号 四 总
  • TCP通信—客户端与客户端的双向通信

    功能 xff1a 1 实现客户端与客户端之间的TCP双向通信 xff1b 2 服务器记录客户端实名连接 xff0c 并显示客户端数据记录 xff1b 3 客户端退出 xff0c 服务器和另一客户端显示相应提示 xff1b 服务器代码思路 x
  • xshell登录wsl

    配置ssh server 卸载 span class token function sudo span span class token function apt get span remove openssh server 安装 span
  • 获取form表单中的数据对象集合

    form表单中直接获取所有数据的对象集合 form表单中的数据获取方法 我们在开发中如果出现form表单 xff0c 那么肯定我们是要获取用户在表单中填写的数据 xff0c 当然如果一个个去那大每一个输入框中的数据 xff0c 也是可取的
  • JavaScript中的window.location的使用

    window location对象可以用于获取当前页面地址 xff08 url xff09 并把浏览器重定向到新页面 location对象的属性与对应的属性值 xff1a window location href 返回当前页面的href u
  • js原生实现本地图片转base64上传服务器(js,jq,html)

    这里写自定义目录标题 上传过程 xff1a htmljs 上传过程 xff1a 1 xff0c 使用input xff1a type 61 file读取本地图片 xff1b 2 xff0c 使用new FileReader 将 图片转化为b
  • AJAX异步请求原理与过程;

    AJAX异步请求原理和过程 1 AJAX创建异步对象XMLHttpRequest xff1a AJAX 的要点是 XMLHttpRequest 对象 不同的浏览器创建 XMLHttpRequest 对象的方法是有差异的 IE浏览器使用 Ac

随机推荐

  • vue生命周期图解(带注释)

    vue生命周期图解 xff08 带注释 xff09
  • c++ class和struct的区别是什么?

    c 43 43 class和struct的区别是什么 在c 43 43 中使用struct和class xff0c 定义类的唯一区别就是默认的访问权限 c 43 43 primer第五版 没错 c 43 43 中class和struct几乎
  • 让程序编译更优雅的几个CMake命令

    简介 本文通过一个工程示例介绍了几个让程序编译更优雅的CMake命令 文末有完整下载地址 该工程示例首先生成一个动态库 xff08 libversion dll xff1a 该库主要用于打印版本相关的信息 xff09 xff0c 然后在一个
  • Fast-Planner安装

    Fast Planner安装 Fast Planner是港科大沈老师课题组的项目 xff0c 该项目是为了实现四旋翼无人机能在复杂未知环境下快速飞行 首先到Fast Planner的github网址下 xff0c 查看README xff0
  • Windows程序设计学习笔记——Winsock和udp

    Winsock是处理网络的Windows api 使用前先包含头文件Winsock2 h以及导入静态库Ws2 32 lib include lt Winsock2 h gt pragma comment lib 34 Ws2 32 lib
  • 网络编程04-UDP的广播、组播

    目录 一 UDP广播通信 1 什么是广播 2 特点 3 广播地址 4 实现广播的过程 xff08 一定是使用UDP协议 xff09 广播发送端 广播接收方 练习1 xff1a 把广播通信进行实现 发送端 接收端 二 UDP组播 xff08
  • JSON文件的生成与解析

    参考Json文件的生成和解析
  • C++ 设置double精度

    设置double精度 在这里插入代码片 span class token macro property span class token directive keyword include span span class token str
  • GitLab 出现错误Could not resolve host: xxx-xxx

    错误原因 xff1a 域名解析错误 解决办法找 打开hosts 在最后一行添加 192 30 xxx xxx gitlab
  • TeeChart控件_动态创建

    在安装目录下找到TeeChartxxxxx ocx 以管理员的身份打开cmd 注册TeeChartxxxxx ocx regsvr32 TeeChartxxxxx ocx VS2015 使用TeeChart绘图控件 CRect rect s
  • Nginx

    Nginx 介绍 Nginx是一款轻量级的Web 服务器 反向代理服务器 电子邮件 xff08 IMAP POP3 xff09 代理服务器 xff0c 并在一个BSD like 协议下发行 由俄罗斯的程序设计师Igor Sysoev所开发
  • 上电自动开机

    上电开机启动是指电脑主机在UPS恢复供电时可以自动开机 该功能必须要求电脑主板型号支持 xff0c 进入电脑的BIOS进行设置使用 不同型号的电脑的BIOS设置会有区别 xff0c 以下仅做参考 xff1a 第一步 xff1a 开机进入BI
  • Linux网络编程【TCP】

    文章目录 TCP特点TCP中CS架构TCP状态转换相关操作函数recv函数send函数 TCP特点 TCP是一种面向广域网的通信协议 xff0c 目的是在跨越多个网络通信时 xff0c 为两个通信端点之间提供一条具有下列特点的通信方式 xf
  • 博客资源整理

    文章目录 STLLinux基础命令linux系统编程Linux网络编程Docker容器技术数据库第三方库的使用Linux编程WebQt STL 基础概念 容器 duque stack map set vector 算法 查找算法 排序算法
  • Qt编译Mysql驱动

    1找到源码 2点击编译会看到报错 1解决方案 下载相关文件 也可以私信发给你 2打开配置文件添加下面的信息 相关文件下载 3点击编译 弹出的框直接关掉就行 4在安装qt的根目录下会生成如下目录 5 找到下面的库 6 将上面的库拷贝到如下目录
  • C++中的异常语法

    文章目录 概述异常的关键子自定义异常使用栈解旋异常的接口声明异常变量的生命周期C 43 43 标准异常库 概述 C语言的异常缺陷在于返回值只有一个 xff0c 可能出现二义性 xff0c 没有统一的标准 C 43 43 中的异常必须有处理
  • 处理鼠标连续点击的问题

    处理鼠标连续点击的问题 span class token comment 上次点击时间点 span DWORD m tmClick span class token punctuation span span class token com
  • FLOPS和FLOPs、GFLOPs区别与计算

    参考FLOPS和FLOPs GFLOPs区别与计算
  • VS远程调试

    文章目录 VS远程调试本地和虚拟机调试准备工作 xff1a 需要注意的几个地方 xff1a VS远程调试 在编程中由于环境 版本等各种原因 xff0c 我们需要模拟出来各种环境来跑不同的版本测试 本地和虚拟机调试 准备工作 xff1a 以V
  • AUTOSAR基础篇之CanNM

    前言 首先 xff0c 问大家几个问题 xff0c 你清楚 xff1a 为什么要引入网络管理呢 xff1f 上电同时启动 xff0c 下电同时关闭 xff0c 它不香吗 xff1f 你知道车上的ECU节点可以分为哪几种类型吗 xff1f 汽