SOME/IP--协议英文原文讲解3
前言
SOME/IP协议越来越多的用于汽车电子行业中,关于协议详细完全的中文资料却没有,所以我将结合工作经验并对照英文原版协议做一系列的文章。基本分三大块:
1. SOME/IP协议讲解
2. SOME/IP-SD协议讲解
3. python/C++举例调试讲解
Note: This means that the implementer of an ECU can define the Client-IDs as required by his implementation and the provider does not need to know this layout or definitions because he just copies the complete Request-ID in the response.
server不需要关心requestID的布局和内容 ,只需要拷贝回复就行
ClientID可用于区分不同的 ECUs
[PRS_SOMEIP_00702]
Upstream requirements: RS_SOMEIP_00025, RS_SOMEIP_00027
The Client ID is the unique identifier for the calling client inside the ECU. The Client
ID allows an ECU to differentiate calls from multiple clients to the same method.
每个ECU有唯一ClientID , 用来区分对同一方法的请求。一般情况client的IP port 足以区分不同的client,server端不用校验关心clientID。
也意味着每个ECU 如果运行多个SOME/IP-Client(ip/port会不一样)但ClientID必须一样。
[PRS_SOMEIP_00703]
Upstream requirements: RS_SOMEIP_00002, RS_SOMEIP_00025, RS_SOMEIP_00027
The Session ID is a unique identifier that allows to distinguish sequential messages
or requests originating from the same sender from each other.
# 对于server而言clientID 是区分不通ECU,但是同一个ECU发送的连续消息(notify)或请求(method/getter/setter)
就需要通过sessionID来的唯一性来区分了。
两种情况:
1. method/getter/setter --> client在未超时等待回复之前,继续请求 则用sessionID来区分
2. 不区分情况(除了下面的情况)sessionID 只管加1。
另外:
3. notify --> 大消息需要分包发送 --> 在分包发送的所有子包seesionID都一样。
注:一个ECU多个client的情况对于同一请求时sessionID可以相同,i
p/port有做区分了。
[PRS_SOMEIP_00532]
Upstream requirements: RS_SOMEIP_00025, RS_SOMEIP_00027
The Client ID shall also support being unique in the overall vehicle by having a
configurable prefix or fixed value (e.g. the most significant byte of Client ID being the
diagnostics address or a configured Client ID for a given application/SW-C).
# 每个ECU有唯一ClientID , 用来区分对同一方法的请求。又是在车辆中ClientID 又分出来前8位作为前缀来区分车辆(SOMEIP有可能跨车辆通信)
[PRS_SOMEIP_00932]
Upstream requirements: RS_SOMEIP_00027
In case Session Handling is not active, the Session ID shall be set to 0x00.
未激活态(没有请求-回复成对出现的场景)需要设置为0
一问:SOME/IP的offer报文中 sessionID可以设置为0吗?
在 SOME/IP 协议中,sessionID
是用来标识会话的唯一标识符。根据 SOME/IP 协议的定义,sessionID
的设置通常是由服务端生成的,并且它的值应该是唯一的,用于区分不同的会话。
理论上,sessionID
可以设置为 0
,但是通常不推荐这么做。因为 0
作为 sessionID
在一些情况下可能会引起歧义,特别是在会话管理方面,可能导致客户端和服务端无法正确区分不同的会话。
如果没有特定的理由(如系统设计要求),通常 sessionID
应该是一个非零的唯一值,以确保会话的唯一性和稳定性。
二问:sessionID是管理会话的,是用来区分client端同一个ECU连续请求的,那对offer报文而言没有会话的概念啊(因为没有请求-回复成对出现),仅是server端自己的行为。sessionID为啥不推荐设置为0?
你说得对,offer
报文并不涉及请求-回复的配对,因此对于 offer
报文来说,sessionID
并没有管理会话的作用。在 offer
报文中,sessionID
主要用于标识服务端的行为,而不是客户端的请求。
关于是否推荐将 sessionID
设置为 0
,这里的关键是协议和实现中的约定。虽然在 offer
报文中,sessionID
可能没有严格的会话管理功能,但是:
-
一致性:为了与后续的请求/响应报文保持一致,许多实现会选择将
sessionID
设为非零值,避免在后续的报文中使用0
作为有效标识符。这样做是为了避免不必要的混淆或冲突。 -
协议兼容性:某些协议或库可能会对
sessionID = 0
的情况有特殊的处理,或者在某些实现中可能会假设0
表示某种特殊情况(例如,表示没有分配会话标识符)。虽然这种情况不常见,但仍然存在一定的风险。 -
扩展性和可维护性:虽然目前没有会话的概念,未来的协议扩展或实现可能会在
offer
报文中加入会话管理的需求。为了保证协议的可扩展性和兼容性,一些实现会避免使用0
作为sessionID
,以减少后期维护的复杂性。
综上所述,虽然技术上 sessionID = 0
在 offer
报文中是可行的,但为了避免潜在的问题,通常还是推荐使用非零的 sessionID
,即使它并不直接影响 offer
报文的功能。
三问:那什么情况下sessionID需要设置为0?
sessionID = 0
在 SOME/IP 协议中通常是在某些特殊情况下使用的,主要有以下几种情况:
1. 无会话标识的初次请求
在某些情况下,sessionID = 0
可以用来表示没有会话标识的初始请求。这通常发生在:
- 服务发现阶段:当客户端首次发起与服务端的通信时,可能没有一个具体的会话标识符。在这个阶段,
sessionID
可能被设为0
,表示没有关联的会话。 - 服务提供报文:如
offer
报文,它通常没有具体的会话关联,因此可以将sessionID
设置为0
,表示这只是一个服务提供的通知,并不关联某个特定的会话。
2. 没有会话的特定报文
有时 sessionID = 0
可以用来表示没有会话的特殊报文,这些报文不会触发请求-响应的对等操作。例如:
- 心跳报文:一些心跳或生命检查报文可能不需要会话标识符,可以将
sessionID
设置为0
。 - 服务生命周期管理报文:当服务启动、停止或重新初始化时,服务端可能会发送一些不与具体会话相关的通知报文,
sessionID
可以设置为0
。
3. 特殊标识符
在一些自定义的实现中,sessionID = 0
可能用作特殊的标识符,例如:
- 用于表示某些不依赖于会话标识符的全局广播消息。
- 服务端在提供服务时,可能会使用
sessionID = 0
来表示“无会话”的服务或通知,而不是关联到特定的客户端会话。
4. 初始化或配置过程
在系统的初始化或配置阶段,sessionID
可能被设置为 0
,用于表示这不是一个正式的会话请求。这些报文通常用于协商协议、配置服务,或者进行一些系统级别的初始化操作。
总结:
sessionID = 0
主要用于那些不涉及具体会话的报文,通常是在服务发现、初始化、特殊通知或者无会话的情形下使用。对于不依赖会话标识符的报文,这种做法可以简化实现,同时避免与会话管理产生冲突。
如果是在正常的请求-响应流程中,sessionID
通常不应该是 0
,因为它用于区分不同的会话,确保客户端和服务端之间的状态管理。
[PRS_SOMEIP_00933]
Upstream requirements: RS_SOMEIP_00027
In case Session Handling is active, the Session ID shall be set to a value within the range [0x1, 0xFFFF]. --- sessionID的范围
[PRS_SOMEIP_00934]
Upstream requirements: RS_SOMEIP_00027
In case Session Handling is active, the Session ID shall be incremented according to
the respective use case (detailed information about dedicated use cases is contained
in separate specification items (e.g., [PRS_SOMEIP_00533]).
[PRS_SOMEIP_00533]
Upstream requirements: RS_SOMEIP_00012, RS_SOMEIP_00027
Request/Response methods shall use session handling with Session IDs. Session ID
should be incremented after each call.
[PRS_SOMEIP_00521]
Upstream requirements: RS_SOMEIP_00012, RS_SOMEIP_00027
When the Session ID reaches 0xFFFF, it shall wrap around and start again with 0x01
针对于methods的Request/Response 没调用一次sessionID递增1,递增到0xffff后再下一次就变成0x01了。
getter/setter 不用递增。不可设置为0
notify也不用递增。可设置为0
SD报文的sessionID 可以随意设置,client端对于SD报文的回复中的sessionID也不应判断。
[PRS_SOMEIP_00739]
Upstream requirements: RS_SOMEIP_00012, RS_SOMEIP_00027
For request/response methods, a client has to ignore a response if the Session ID of
the response does not match the Session ID of the request
对于client 收到的method回复中的client不是自己期望的sessionID 则忽略这条回复。
[PRS_SOMEIP_00935]
Upstream requirements: RS_SOMEIP_00012, RS_SOMEIP_00027
For notification messages, a receiver shall ignore the Session ID in case Session Handling is not active.
对于notify消息,client不用关心 sessionID (就算是0)
[PRS_SOMEIP_00936]
Upstream requirements: RS_SOMEIP_00012, RS_SOMEIP_00027
For notification messages, a receiver shall treat the Session ID according to the
respective use case (detailed information about dedicated use cases is contained in
separate specification items (e.g., [PRS_SOMEIP_00741]) in case Session Handling
is active.
结合 741 :
notify事件 的sessionID 如果设置为激活态则可以有其它用途:如果是大消息则分包发送,根据sessionID来组包。比如收到1 , 2, 3, 4,1当又收到1时则把前面的4包进行组包。注意:大消息的可搭配message_type: TP_XXX的类型使用(下面讲),也可不搭配。
当然双方标记次消息没有组包功能的话,则可以随便设置sessionID.
扩展:UDP的大消息会在IP层进行分包,接收端IP层重新组包,SOMEIP的UDP大消息发送,如果没有丢包或错帧干扰,则会接收到完整的大消息。
TCP的大消息不会把分包交给IP层 ,会自己在TCP层做好分包。如果SOMEIP的大消息发出,虽然不会丢包但会在server端收到不完整的多包数据,甚至第二包数据开始都没有SOMEIP头。
综上所述:如果像车内这种TTL路由不超过3次的局域网 不怕UDP丢帧可以用UDP发送SOMEIP大消息。否则TCP发送SOMEIP大消息 则需要用到sessionID来进行分包组包。
4.1.2.5 Protocol Version [8 Bit]
The Protocol Version identifies the used SOME/IP Header format (not including the
Payload format). -- 协议版本号仅用于区分header 格式的不通 ,不针对Payload的格式。
[PRS_SOMEIP_00052]
Upstream requirements: RS_SOMEIP_00027, RS_SOMEIP_00041
Protocol Version shall be an 8 Bit field containing the SOME/IP protocol version. -- 占一个字节
[PRS_SOMEIP_00050]
Upstream requirements: RS_SOMEIP_00027, RS_SOMEIP_00041
The Protocol Version shall be increased, for all incompatible changes in the SOME/IP
header. A change is incompatible if a receiver that is based on an older Protocol
Version would not discard the message and process it incorrectly.
如果header的格式和定义有所改变,则版本号需要改变--这是AUTOSAR协议组织干的事。
写程序的人需要根据版本号做兼容解析处理,不能直接丢弃消息---目前就一个版本。
Note:
Message processing and error handling is defined in chapter 4.2.6.3 (error processing
overview) -- 版本不匹配的错误码回复 在后面有讲
Note:
The Protocol Version itself is part of the SOME/IP Header, therefore the position of the
protocol version in the header shall not be changed.
为什么要强调版本号在SOMEIP头第15个字节的位置不可改变:因为后面如果SOMEIP的版本迭代,其它字段的位置可能会被改变,但是第15个字节必须还是版本号,因为要依赖识别版本迭代。
Note:
The Protocol Version shall not be increased for changes that only affect the Payload
payload的格式变化 不能引起协议版本号的增加。
format.
[PRS_SOMEIP_00051]
Upstream requirements: RS_SOMEIP_00027, RS_SOMEIP_00041
The Protocol Version shall be 1.
这份协议文档 对应的SOMEIP版本号 为1
4.1.2.6 Interface Version [8 Bit]
[PRS_SOMEIP_00053]
Upstream requirements: RS_SOMEIP_00003, RS_SOMEIP_00027
Interface Version shall be an 8 Bit field that contains the Major Version of the Service
Interface. -- 占一个字节
内部版本号的内部什么意思?
内部是用户自己对服务的定义的意思,client端需要和server端针对此服务进行版本号对齐。
比如服务的某个method的参数发生了变化,导致双方通信错误。
server和client可能有多个服务,每次一个服务做了修改,升级这个服务的内部版本号还是所有服务的版本号都跟着升级 需要使用者自己考虑。
4.1.2.7 Message Type [8 Bit]
TP_XXX --->是大消息分包的意思。
[PRS_SOMEIP_00701]
Upstream requirements: RS_SOMEIP_00008, RS_SOMEIP_00027
Regular request (message type 0x00) shall be answered by a response (message
type 0x80), when no error occurred. If errors occur an error message (message type
0x81) shall be sent. -- 容易理解 自己看
It is also possible to send a request that does not have a response message (message
type 0x01). -- Fire&Forget消息 简称 F&F消息 -- 不用回复的消息
For updating values through notification a callback interface exists
(message type 0x02).
[PRS_SOMEIP_00367]
Upstream requirements: RS_SOMEIP_00027, RS_SOMEIP_00051
The 3rd highest bit of the Message Type (=0x20) shall be called TP-Flag and shall be
set to 1 to signal that the current SOME/IP message is a segment. The other bits of
the Message Type are set as specified in this Section.
第三个最高位0x20是TP标志 表示传输协议,表示大消息传输 可用于文件传输等,需要搭配sessionID 使用
Note:
Segments of the Message Type Request (0x00) have the Message Type (0x20), segments
of the Message Type Response (0x80) have the Message Type (0xa0), and so
on. For details see (Chapter 4.2.1.4)
0x20是分段的0x00, 0x0a是分段的0x80
容易理解 自己看
4.1.2.9 Payload [variable size]
In the payload field the parameters are carried. The serialization of the parameters will
be specified in the following section. -- 序列化在下面的章节讲
The size of the SOME/IP payload field depends on the transport protocol used.
payload的大小 受它使用TCP/UDP传输协议决定
[PRS_SOMEIP_00382] SOME/IP payload size using UDP
Upstream requirements: RS_SOMEIP_00006, RS_SOMEIP_00010
With UDP the SOME/IP payload size should be between 0 and 1400 Bytes. Payload
sizes greater than 1400 Bytes should be supported with TCP and segmentation of
payload (see also [PRS_SOMEIP_00730]).
低于1400个字节 可以用UDP传输,否则应该用TCP传输 或是 UDP分包传输。
Note:
The recommendation to 1400 Bytes improves change compatibility on the protocol
stack (e.g. changing to IPv6 or adding security means).
Payload might consists of data elements for events or parameters for methods.
https://github.com/0voice
相关文章:
SOME/IP--协议英文原文讲解3
前言 SOME/IP协议越来越多的用于汽车电子行业中,关于协议详细完全的中文资料却没有,所以我将结合工作经验并对照英文原版协议做一系列的文章。基本分三大块: 1. SOME/IP协议讲解 2. SOME/IP-SD协议讲解 3. python/C举例调试讲解 Note: Thi…...
计算机网络之计算机网络主要性能
一、速率与带宽 速率: 定义:数据的传送速率,也称数据率或比特率,表示单位时间内传输的比特数。 单位:比特/秒(bit/s),常用单位有千比特/秒(kb/s)、兆比特/秒…...
家居 EDI:Haverty‘s EDI 需求分析
Havertys 成立于 1885 年,是一家历史悠久的美国家具零售商。公司致力于为客户提供高品质的家具和家居饰品,其产品线涵盖客厅、卧室、餐厅及办公家具等多个领域。 电子数据交换(EDI)是一种通过标准化电子格式在商业伙伴之间进行数据…...
JavaScript - Web APIs(上)
Web API 介绍 严格意义上讲,我们在 JavaScript 阶段学习的知识绝大部分属于 ECMAScript 的知识体系,ECMAScript 简称 ES 它提供了一套语言标准规范,如变量、数据类型、表达式、语句、函数等语法规则都是由 ECMAScript 规定的。浏览器将 ECM…...
【漫话机器学习系列】068.网格搜索(GridSearch)
网格搜索(Grid Search) 网格搜索(Grid Search)是一种用于优化机器学习模型超参数的技术。它通过系统地遍历给定的参数组合,找出使模型性能达到最优的参数配置。 网格搜索的核心思想 定义参数网格 创建一个包含超参数值…...
MySQL 的索引类型【图文并茂】
基本分类 文本生成MindMap:https://app.pollyoyo.com/planttext <style> mindmapDiagram {node {BackgroundColor yellow}:depth(0) {BackGroundColor SkyBlue}:depth(1) {BackGroundColor lightGreen} } </style> * MySQL 索引** 数据结构角度 *** B树索引*** 哈…...
OSCP:发送钓鱼电子邮件执行客户端攻击
概述 在渗透测试领域,钓鱼攻击是一种有效的客户端攻击手段,尤其在目标用户缺乏安全意识或系统存在未修复漏洞时,成功率较高。针对Windows平台,滥用Windows库文件(.Library-ms)是一种技术性较强但易于实施的…...
Oracle 普通用户连接hang住处理方法
一、现象说明 $ sqlplus / as sysdbaSQL*Plus: Release 19.0.0.0.0 - Production on Wed Dec 18 16:49:19 2024 Version 19.11.0.0.0Copyright (c) 1982, 2020, Oracle. All rights reserved.Connected to: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Pro…...
C++ ——— 学习并使用 priority_queue 类
目录 何为 priority_queue 类 学习并使用 priority_queue 类 实例化一个 priority_queue 类对象 插入数据 遍历堆(默认是大堆) 通过改变实例化的模板参数修改为小堆 何为 priority_queue 类 priority_queue 类为 优先级队列,其本质就是…...
JVM--类加载器
概念 类加载器:只参与加载过程中的字节码获取并加载到内存中的部分;java虚拟机提供给应用程序去实现获取类和接口字节码数据的一种技术,也就是说java虚拟机是允许程序员写代码去获取字节码信息 类加载是加载的第一步,主要有以下三…...
【C++】类与对象初级应用篇:打造自定义日期类与日期计算器(2w5k字长文附源码)
文章目录 一、日期类的实现1. 日期类的默认成员函数的分析与实现构造函数其它默认成员函数 2. 各种逻辑比较运算符重载3. 日期加与减天数日期加天数系列日期减天数系列日期加减天数的最后修定和- -系列 4. 日期减日期方法一方法二 5. 流插入与流提取重载流插入重载流提取重载(含…...
ROS应用之SwarmSim在ROS 中的协同路径规划
SwarmSim 在 ROS 中的协同路径规划 前言 在多机器人系统(Multi-Robot Systems, MRS)中,SwarmSim 是一个常用的模拟工具,可以对多机器人进行仿真以实现复杂任务的协同。除了任务分配逻辑以外,SwarmSim 在协同路径规划方…...
Shell特殊位置变量以及常用内置变量总结
目录 1. 特殊的状态变量 1.1 $?(上一个命令的退出状态) 1.2 $$(当前进程的 PID) 1.3 $!(后台进程的 PID) 1.4 $_(上一条命令的最后一个参数) 2.常用shell内置变量 2.1 echo&…...
【ollama通过命令行启动后如何在网页端查看运行】
ollama通过命令行启动后如何在网页端查看运行 http://localhost:11434/...
【MySQL】初始MySQL、库与表的操作
目录 基本使用 使用案例 SQL分类 存储引擎 库的操作 字符集和校验规则 查看系统默认字符集和校验规则 查看数据库支持的字符集 查看数据库支持的字符集校验规则 指定编码常见数据库 校验规则对数据库的影响 操纵数据库 库的备份与恢复 表的操作 创建表 查看表 …...
信息学奥赛一本通 1342:【例4-1】最短路径问题
【题目描述】 平面上有n个点(n<100),每个点的坐标均在-10000~10000之间。其中的一些点之间有连线。 若有连线,则表示可从一个点到达另一个点,即两点间有通路,通路的距离为两点间的直线距离。现在的任务是…...
芯片AI深度实战:基础篇之langchain
基于ollama, langchain,可以构建一个自己的知识库,比如这个 Build Your Own RAG App: A Step-by-Step Guide to Setup LLM locally using Ollama, Python, and ChromaDB | HackerNoon 这是因为: 以上范例就实现了这样一个流程: 系列文章&…...
Autogen_core 测试代码:test_cache_store.py
目录 原始代码测试代码代码中用到的typing注解 原始代码 from typing import Dict, Generic, Optional, Protocol, TypeVarT TypeVar("T")class CacheStore(Protocol, Generic[T]):"""This protocol defines the basic interface for store/cache o…...
AI大模型开发原理篇-1:语言模型雏形之N-Gram模型
N-Gram模型概念 N-Gram模型是一种基于统计的语言模型,用于预测文本中某个词语的出现概率。它通过分析一个词语序列中前面N-1个词的出现频率来预测下一个词的出现。具体来说,N-Gram模型通过将文本切分为长度为N的词序列来进行建模。 注意:这…...
Haproxy入门学习二
一、Haproxy的算法 1.haproxy通过固定参数balance指明对后端服务器的调度算法,其中balance参数可以配置在listen或backend选项中 2.haproxy的调度算法分为静态和动态调度算法,其中有些算法可以根据参数在静态和动态算法中相互转换 3.静态算法:…...
【C++题解】1014. 编程求1+1/2+1/3+...+1/n
问题:1014. 编程求11/21/3…1/n 类型:简单循环 题目描述: 编程求 11/21/3⋯1/n 。 输入: 输入一行,只有一个整数 n(1≤n≤200) 。 输出: 输出只有一行(这意味着末尾有一个回车符号&#x…...
Java基础知识-第14章-Java注解
1、注解(Annotation)概述 从JDK5.0开始,Java增加了对元数据(MetaData) 的支持,也就是Annotation(注解)Annotation其实就是代码里的特殊标记,这些标记可以在编译,类加载,运行时被读取,并执行相应的处理。通…...
python算法和数据结构刷题[1]:数组、矩阵、字符串
一画图二伪代码三写代码 LeetCode必刷100题:一份来自面试官的算法地图(题解持续更新中)-CSDN博客 算法通关手册(LeetCode) | 算法通关手册(LeetCode) (itcharge.cn) 面试经典 150 题 - 学习计…...
【javaweb项目idea版】蛋糕商城(可复用成其他商城项目)
该项目虽然是蛋糕商城项目,但是可以复用成其他商城项目或者购物车项目 想要源码的uu可点赞后私聊 技术栈 主要为:javawebservletmvcc3p0idea运行 功能模块 主要分为用户模块和后台管理员模块 具有商城购物的完整功能 基础模块 登录注册个人信息编辑…...
人格分裂(交互问答)-小白想懂Elasticsearch
通过交互式追问了解一个中间件 ? 啥是Elasticsearch ! 分布式搜索和分析引擎 ? 为啥是分布式搜索,单体难道用不了吗 ? 实际上是说这个东西可以分布式部署 ! 单机可用但扩展性差,分布式通过分片、副本和负载均衡实现海量数据存储与高并发处理 ? 提…...
独立开发者日刊 | Deepseek 统一多模态 AI Janus 开源 |语音秒变文章 | 免费 AI 视频答案引擎
独立开发者产品日刊,每日汇集 ProductHunt 热榜产品介绍,⚡️ 1句Slogan榨干产品灵魂,⚡️ 3秒 get 全球独立开发者的爆款灵感。关注小前,每日捕获全球产品灵感。 Jotform for Canva 标语:为 Canva 创建强大表单类别&a…...
1999-2020年 全国各地区-财政状况分析-一般预算收入-各项税收-个人所得税
1999-2020年 全国各地区-财政状况分析-一般预算收入-各项税收-个人所得税https://download.csdn.net/download/2401_84585615/89575946 https://download.csdn.net/download/2401_84585615/89575946 一般预算收入是指各级政府按照预算法规定,将预计取得的各项收入纳…...
基础项目实战——3D赛车(c++)
目录 前言一、渲染引擎二、关闭事件三、梯形绘制四、轨道绘制五、边缘绘制六、草坪绘制七、前后移动八、左右移动九、曲线轨道十、课山坡轨道十一、循环轨道十二、背景展示十三、引入速度十四、物品绘制十五、课数字路障十六、分数展示十七、重新生成十八、…...
AboutDialog组件的功能和用法
文章目录 1 概念介绍2 使用方法3 示例代码 我们在上一章回中介绍了AlertDialog Widget相关的内容,本章回中将介绍AboutDialog Widget.闲话休提,让我们一起Talk Flutter吧。 1 概念介绍 我们在这里说的AboutDialog是一种弹出式窗口,和上一章回中介绍的Al…...
hdfs之读写流程
写入流程: 客户端Client想将文件a.txt上传至hdfs,首先向Namenode发送请求进行权限校验,Namenode通过后会计算出来三个节点,并将这三个节点告知客户端,客户端将输入进行切割成块,一个一个的块进行传输&…...
链表的介绍
目录 引言优缺点与链表相似的数据结构注意事项单向链表的实现基础实现创建类创建成员变量创建特殊方法 增加数据push_back方法insert方法 删除数据del_back方法del_index方法 clear方法查询数据at方法与重载的中括号运算符toArray方法indexOf方法 修改数据获取链表大小测试方法…...
背着开发板回家过年~
大家好,我是bug菌~ 小明,过年了, 别再死磕什么STM32底层驱动、linux平台总线驱动框架、嵌入式实时操作系统源码这些了。 你背着电脑和开发板回家,压根没一点实际用处。 发小们潇洒地出入各种娱乐场所,唱着歌࿰…...
Kafka 日志存储 — 磁盘存储
Kafka 依赖与磁盘来存储和缓存消息,采用文件追加的方式来写入消息。顺序写盘的速度快于随机写内存。 1 磁盘存储 除顺序写入外,Kafka中大量使用了页缓存、零拷贝等技术来进一步提升吞吐性能。 1.1 页缓存 页缓存是操作系统实现的一种磁盘缓存&#x…...
【机器学习】自定义数据集 使用tensorflow框架实现逻辑回归并保存模型,然后保存模型后再加载模型进行预测
一、使用tensorflow框架实现逻辑回归 1. 数据部分: 首先自定义了一个简单的数据集,特征 X 是 100 个随机样本,每个样本一个特征,目标值 y 基于线性关系并添加了噪声。tensorflow框架不需要numpy 数组转换为相应的张量࿰…...
RK3568中使用QT opencv(显示基础图像)
文章目录 一、查看对应的开发环境是否有opencv的库二、QT使用opencv 一、查看对应的开发环境是否有opencv的库 在开发板中的/usr/lib目录下查看是否有opencv的库: 这里使用的是正点原子的ubuntu虚拟机,在他的虚拟机里面已经安装好了opencv的库。 二、…...
Brave132 编译指南 Windows 篇:获取源码(六)
1. 引言 在 Brave 浏览器 132 版本的编译过程中,获取源代码是至关重要的第一步。源代码包含了 Brave 浏览器的所有核心功能、特性和组件的实现细节,是深入理解、定制和优化 Brave 的基础。通过获取和管理源代码,开发者能够深入探索 Brave 的…...
解决 pip install 出现 error: subprocess-exited-with-error 错误的方法
解决 pip install 出现 error: subprocess-exited-with-error 错误的方法_pip安装报错 subprocess-CSDN博客文章浏览阅读10w次,点赞62次,收藏86次。通过上述步骤,我们成功解决了 pip install 时出现的 error: subprocess-exited-with-error 错…...
网络安全攻防实战:从基础防护到高级对抗
📝个人主页🌹:一ge科研小菜鸡-CSDN博客 🌹🌹期待您的关注 🌹🌹 引言 在信息化时代,网络安全已经成为企业、政府和个人必须重视的问题。从数据泄露到勒索软件攻击,每一次…...
DeepSeek大模型技术解析:从架构到应用的全面探索
一、引言 在人工智能领域,大模型的发展日新月异,其中DeepSeek大模型凭借其卓越的性能和广泛的应用场景,迅速成为业界的焦点。本文旨在深入剖析DeepSeek大模型的技术细节,从架构到应用进行全面探索,以期为读者提供一个…...
Deepseek的api调用报错乱码问题
最近的deepseek也是很火,但是在调用api的过程中也会出现一些大大小小的问题,所以这里也给出一种问题和他的解决方案,报错的类型如下图所示 API Streaming Failed Command failed with exit code 1: powershell (Get-CimInstance -ClassName W…...
.NET Core 中依赖注入的使用
ASP.NET Core中服务注入的地方 在ASP.NET Core项目中一般不需要自己创建ServiceCollection、IServiceProvider。在Program.cs的builder.Build()之前向builder.Services中注入。在Controller中可以通过构造方法注入服务。 低使用频率的服务 把Action用到的服务通过Action的参…...
Mysql Resultset 解析记录
Mysql Resultset 解析记录 结果集消息头字段定义结果数据完整spicy文件 结果集消息头 消息头由消息体长度消息序列号消息体组成;消息头长度为3字节,消息序列号长度为1字节。 结果集的消息头消息体内容为结果集的列数。 结果集消息头的spicy1格式如下&a…...
ThinkPhp伪静态设置后,访问静态资源也提示找不到Controller
ThinkPhp没有配置伪静态时,除了默认的IndexController能访问,其他路由Controller都访问不到,提示404错误。配置了伪静态后就解决了这个问题。 但是当我的ThinkPhp后台项目中有静态资源放在public目录(或子目录)中需要…...
【回溯+剪枝】找出所有子集的异或总和再求和 全排列Ⅱ
文章目录 1863. 找出所有子集的异或总和再求和解题思路:子集问题解法(回溯 剪枝)47. 全排列 II解题思路:排序 回溯 剪枝 1863. 找出所有子集的异或总和再求和 1863. 找出所有子集的异或总和再求和 一个数组的 异或总和 定义为…...
单细胞-第五节 多样本数据分析,打分R包AUCell
文件在单细胞\5_GC_py\1_single_cell\3.AUCell.Rmd 1.基因 rm(list = ls()) load("g.Rdata")2.AUCell https://www.ncbi.nlm.nih.gov/pmc/articles/PMC9897923 IF: NA NA NA用这个文章里的方法,将单细胞亚群的marker基因与ros相关基因取交集,用作AUCell的基因集…...
锁升级过程与优化操作
前文我们学习了CAS自旋锁知道CAS对应的就是一条指令操作,属于一种轻量级锁,那么有轻必有重,从无锁到轻量级锁到重量级锁是一个升级过程,此文我们对锁升级的过程以及一些优化锁的操作一探究竟。 1. 锁升级 从前文 《程序员不可能不…...
android主题设置为..DarkActionBar.Bridge时自定义DatePicker选中日期颜色
安卓自定义DatePicker选中日期颜色 背景:解决方案:方案一:方案二:实践效果: 背景: 最近在尝试用原生安卓实现仿element-ui表单校验功能,其中的的选择日期涉及到安卓DatePicker组件的使用&#…...
Kafka常见问题之 `javax.management.InstanceAlreadyExistsException`
文章目录 Kafka常见问题之 javax.management.InstanceAlreadyExistsException1. 概述2. 常见原因3. 具体异常示例4. 解决方案4.1 确保单一 Kafka Producer 实例4.2 配置 Kafka Broker 和 Producer 使用唯一的 JMX 名称(对于Producer重点检查 client.id)4…...
数据分析系列--③RapidMiner算子说明及数据预处理
一、算子说明 1.新建过程 2.算子状态灯 状态灯说明: (1)状态指示灯: 红色:指示灯说明有参数未被设置或输入端口未被连接等问题; 黄色:指示灯说明还未执行算子,不管配置是否基本齐全; 绿色:指示灯说明一切正常,已成功执行算子。 (2)三角…...
Gradle配置指南:深入解析settings.gradle.kts(Kotlin DSL版)
文章目录 Gradle配置指南:深入解析settings.gradle.kts(Kotlin DSL版)settings.gradle.kts 基础配置选项单项目配置多项目配置 高级配置选项插件管理(Plugin Management)基础配置模板案例:Android项目标准配…...