Linux驱动开发基础(can)
目录
1.can的介绍
2.can的硬件连接
2.1 CPU自带can控制器
2.2 CPU没有can控制器
3.电气属性
4.can的特点
5.can协议
5.1 can的种类
5.2 数据帧
5.2.1 标准数据帧格式
5.3.1 扩展数据帧格式
5.3 遥控帧
5.4 错误帧
5.5 过载帧
5.6 帧间隔
5.7 位填充
5.8 位时间
编辑
5.9 硬同步和再同步
5.10 仲裁
1.can的介绍
CAN是Controller Area Network 的缩写(以下称为CAN),是ISO国际标准化的串行通信协议。
在当前的汽车产业中,出于对安全性、舒适性、方便性、低公害、低成本的要求,各种各样的电子控制系统被开发了出来。由于这些系统之间通信所用的数据类型及对可靠性的要求不尽相同,由多条总线构成的情况很多,线束的数量也随之增加。为了减少线束的数量的需要,且能让不同的ECU模块(汽车电子中的最小控制模块)可以相互通信,1986年德国电气商博世公司开发出面向汽车的CAN通信协议。此后,CAN通过ISO11898及ISO11519进行了标准化,现在在欧洲已是汽车网络的标准协议。
现在,CAN的高性能和可靠性已被认同,并被广泛地应用于工业自动化、船舶、医疗设备、工业设备等方面。
CAN等通信协议的开发,使多种LAN通过网关进行数据交换得以实现。如图是车载网络的构想示意图。
2.can的硬件连接
2.1 CPU自带can控制器
2.2 CPU没有can控制器
can总线两端1200欧姆为终端电阻,作用是消除总线上的信号反射。
3.电气属性
高速CAN:当 CANH 和 CANL 电压相同时为逻辑“1”(隐性状态),CANH 和 CANL 电压相差2V时为逻辑“0”(显性状态)
can使用差分信号来传输数据,并且物理连接上一般使用双绞线,抗干扰能力更强。
注意:干扰信号对双绞线的干扰是等幅值,等相位,等频率的,所以双绞线抗干扰能力更高
所以 can 总线速率最快可达到1Mbps,此时传输距离最远可达40m。
4.can的特点
(1) 多主控制
在总线空闲时,所有的单元都可开始发送消息(多主控制)。
最先访问总线的单元可获得发送权(CSMA/CA方式*1)。
多个单元同时开始发送时,发送高优先级ID消息的单元可获得发送权。
(2) 消息的发送
在CAN协议中,所有的消息都以固定的格式发送。总线空闲时,所有与总线相连的单元都可以开始发送新消息。两个以上的单元同时开始发送消息时,根据标识符(Identifier 以下称为 ID)决定优先级。ID并不是表示发送的目的地址,而是表示访问总线的消息的优先级。两个以上的单元同时开始发送消息时,对各消息ID的每个位进行逐个仲裁比较。仲裁获胜(被判定为优先级最高)的单元可继续发送消息,仲裁失利的单元则立刻停止发送而进行接收工作。
(3) 系统的柔软性
与总线相连的单元没有类似于“地址”的信息。因此在总线上增加单元时,连接在总线上的其它单元的软硬件及应用层都不需要改变。
(4) 通信速度
根据整个网络的规模,可设定适合的通信速度。
在同一网络中,所有单元必须设定成统一的通信速度。即使有一个单元的通信速度与其它的不一样,此单元也会输出错误信号,妨碍整个网络的通信。不同网络间则可以有不同的通信速度。
(5) 远程数据请求
可通过发送“遥控帧” 请求其他单元发送数据。
(6) 错误检测功能·错误通知功能·错误恢复功能
所有的单元都可以检测错误(错误检测功能)。 检测出错误的单元会立即同时通知其他所有单元(错误通知功能)。 正在发送消息的单元一旦检测出错误,会强制结束当前的发送。强制结束发送的单元会不断反复地重新发送此消息直到成功发送为止(错误恢复功能)。
(7) 故障封闭
CAN可以判断出错误的类型是总线上暂时的数据错误(如外部噪声等)还是持续的数据错误(如单元内部故障、驱动器故障、断线等)。由此功能,当总线上发生持续数据错误时,可将引起此故障的单元从总线上隔离出去。
(8) 连接
CAN总线是可同时连接多个单元的总线。可连接的单元总数理论上是没有限制的。但实际上可连接的单元数受总线上的时间延迟及电气负载的限制。降低通信速度,可连接的单元数增加;提高通信速度,则可连接的单元数减少。
5.can协议
5.1 can的种类
通信是通过以下5种类型的帧进行的。
• 数据帧
• 遥控帧
• 错误帧
• 过载帧
• 帧间隔
另外,数据帧和遥控帧有标准格式和扩展格式两种格式。
标准格式有11个位的标识符(Identifier: 以下称ID), 扩展格式有29个位的ID。 各种帧的用途如表所示。
5.2 数据帧
can通信是通过数据帧进行发送数据的。数据帧会携带数据从发送设备到接收设备。数据帧分为标准数据帧和扩展数据帧两种。
5.2.1 标准数据帧格式
标准数据帧由 7 个不同的位场组成,分别是帧起始,仲裁(字段)场,控制(字段)场,数
据(字段)场,CRC(字段)场,应答(字段)场,帧结尾。
帧起始 | 仲裁字段 | 控制字段 | 数据字段 | CRC 字段 | ACK 字段 | 帧结束 |
标准数据帧格式分析:
(1)帧起始和帧结束
帧起始和帧结束表示一帧数据的起始和结束,帧起始由 1 个显性位组成,帧结束由 7 个连续的隐形位组成。
(2)仲裁字段
仲裁字段包括 11 位 ID 位,1 位 RTR 位,共 12 位。ID 位可以用来区分数据帧的功能(不同功能的报数据帧,ID 是不同的),也可以用来区分优先级。根据仲裁规则,ID 小的数据帧优先发送。禁止高 7 位都为隐性(禁止设定:ID=1111111XXXX)。
RTR 是远程请求标志位,用于区分数据帧还是遥控帧。数据帧 RTR 位必须为显性 0,遥控帧必须位隐性 1。(相同 ID 的数据帧和遥控帧,数据帧的优先级大于遥控帧)。
(3)控制字段
控制字段由 1 位 IDE 位,1 位 R0 保留位,4 位 DLC 共 6 位组成。
IDE位表示数据帧是标准数据帧还是扩展数组帧,标准格式固定为显示0,扩展格式固定为隐性1。
R0 保留位,固定为显示 0。
DLC 位表示数据字段的数据字节数(数据段的长度)。
(4)数据字段
可以承载 0 到 64 位数据。
(5) CRC 校验字段
CRC 校验字段由 15 位校验位和 1 位 CRC 界定字符组成,前 15 位用于 CRC 校验。CRC 界定符必须为隐性 1。
(6)ACK 字段
ACK 字段由确定间隙位和确认界定符组成,确认界定符必须是隐性 1。
5.3.1 扩展数据帧格式
当标准格式的 11 位 ID 位不够用时,就需要扩展 ID 位 ,这时就产生了扩展数据帧。
扩展数据帧在保留前面 11 位 ID 的基础上,额外增加 18 位 ID,能提供更多的标识选择,以满足更复杂的通信需求。同时,扩展数据帧还需要考虑对标准数据帧的兼容,这样可以保证在不同的应用场景和设备之间,通信能够正常进行。如下图所示。
SRR 位:替代原来的 RTR 位,没有使用,必须是隐性电平 1
5.3 遥控帧
遥控帧用于接收设备主动请求数据。发送方通过广播的形式发送数据,数据帧中通过 ID 区分不同功能的数据帧,如果发送方没有广播这个数据,接收方可以广播发送一个遥控帧,有接收方想要的数据的发送方就会广播这个数据出来。接收方就可以接收到这个数据了。
数据帧去掉数据段就是遥控帧(在有的资料中,遥控帧也要远程帧)。所以遥控帧也分为俩种(标准遥控帧和扩展遥控帧),都包含 6 个部分,分别是帧起始,仲裁(字段)场,控制(字段)场,CRC(字段)场,应答(字段)场,帧结尾。如图所示。
5.4 错误帧
在发送或者接收时,总线上的设备发生错误的时候,可以通过发送错误帧的方式告知其他节点发生了错误。
错误帧由两个部分组成,分别是错误标志和错误界定符。
错误标志:
主动错误标志:6 个连续显性位
被动错误标志:6 个连续隐性位
错误界定符:8 个连续隐性位
5.5 过载帧
当某个接收节点没有做好接收下一帧数据的准备时,接收方将发送过载帧通知发送节点。
节点最多可产生两条连续的过载帧来延迟一下次发送。
过载标志的构成与主动错误标志的构成相同,过载界定符的构成与错误界定符的构成相同。
5.6 帧间隔
帧间隔是用于分隔数据帧和遥控帧的帧。数据帧和遥控帧可通过插入帧间隔将本帧与前面的任何帧(数据帧、 遥控帧、错误帧、过载帧)分开。
过载帧和错误帧前不能插入帧间隔。
(1) 间隔
3 个位的隐性位。
(2) 总线空闲
隐性电平,无长度限制(0亦可)。 本状态下,可视为总线空闲,要发送的单元可开始访问总线。
(3) 延迟传送(发送暂时停止)
8 个位的隐性位。 只在处于被动错误状态的单元刚发送一个消息后的帧间隔中包含的段。
5.7 位填充
位填充是为防止突发错误而设定的功能。当同样的电平持续5位时则添加一个位的反型数据。
因为错误帧的错误标志是由六位连续的显隐帧组成,当发送连续的数据时就很可能会被误判为错误帧,所以需要位填充来规避这种情况。
填充范围:从帧起始到 CRC 字段。
填充规则:在相同极性的 5 个连续位之后使用位填充。填充位与其前面的位极性相反。
第一种填充情况:
发送 | 110000011 |
实际发送 | 1100000111 |
实际接收 | 1100000111 |
移除填充位 | 110000011 |
第二种填充情况:
发送 | 0111111 |
实际发送 | 01111101 |
实际接收 | 01111101 |
移除填充位 | 0111111 |
第三种填充情况:
发送 | 1000001111 |
实际发送 | 100000111110 |
实际接收 | 100000111110 |
移除填充位 | 1000001111 |
(1) 发送单元的工作
在发送数据帧和遥控帧时,SOF~CRC段间的数据,相同电平如果持续5位,在下一个位(第6个位)则 要插入1位与前5位反型的电平。
(2) 接收单元的工作
在接收数据帧和遥控帧时,SOF~CRC段间的数据,相同电平如果持续5位,需要删除下一个位(第6个 位)再接收。如果这个第6个位的电平与前5位相同,将被视为错误并发送错误帧。
5.8 位时间
位时间就是指一个(二进制)位在总线传输所需要的时间,一个位时间分为 4 段,这些段又
由称为 Time Quantum (以下称为 Tq) 的最小时间单位构成
波特率 = 1 / 位时间
位时间的作用:CAN 是异步通讯,没有时钟信号线,连接在同一个总线网络中的各个节点会使用约定好的波特率进行通讯。在 CAN 还会使用同步的方式对抗干扰、降低误差,保证对总线电平信号进行正确的采样,确保通讯正常。
各段的作用如表所示:
同步可通过调整以下三个段的时间去调整采样点的位置。
5.9 硬同步和再同步
1. 硬同步
接收单元在总线空闲状态检测出帧起始时进行的同步调整。 在检测出边沿的地方不考虑SJW的值而认为是SS段。
2. 再同步
在接收过程中检测出总线上的电平变化时进行的同步调整。
每当检测出边沿时,根据SJW值通过加长PBS1段,或缩短PBS2段,以调整同步。但如果发生了超出SJW 值的误差时,最大调整量不能超过SJW值。
3. 调整同步规则
(1) 1 个位中只进行一次同步调整。
(2) 只有当上次采样点的总线值和边沿后的总线值不同时,该边沿才能用于调整同步。
(3) 在总线空闲且存在隐性电平到显性电平的边沿时,则一定要进行硬件同步。
(4) 在总线非空闲时检测到的隐性电平到显性电平的边沿如果满足条件(1)和(2),将进行再同步。但还要满足下面条件。
(5) 发送单元观测到自身输出的显性电平有延迟时不进行再同步。
(6) 发送单元在帧起始到仲裁段有多个单元同时发送的情况下,对延迟边沿不进行再同步。
5.10 仲裁
can 总线上可以挂载多个通信结点,但是总线只有一条,同一时刻只能传输一个数据。那如何保证总线上的数据可以有序高效的传输呢。
主要通过以下方法:
- 非破坏性仲裁:显性优先,即显性优先级大于隐性优先级(线与机制:只有所有节点都发送隐性 1 时,总线才为 1,只要有一个节点发送显性 0,则总线就是显性 0)
- 载波侦听:总线上各个节点在发送数据前要侦听总线的状态,只有在总线是空闲状态时,才允许发送。
- 回读:节点在发送数据时要不停的检测要发送的数据。通过非破坏性仲裁判断是否与其他节点的数据发生冲突。
在总线空闲态,最先开始发送消息的单元获得发送权。
多个单元同时开始发送时,各发送单元从仲裁段的第一位开始进行仲裁。连续输出显性电平最多的单元可继续发送。
相关文章:
Linux驱动开发基础(can)
目录 1.can的介绍 2.can的硬件连接 2.1 CPU自带can控制器 2.2 CPU没有can控制器 3.电气属性 4.can的特点 5.can协议 5.1 can的种类 5.2 数据帧 5.2.1 标准数据帧格式 5.3.1 扩展数据帧格式 5.3 遥控帧 5.4 错误帧 5.5 过载帧 5.6 帧间隔 5.7 位填充 5.8 位时…...
Linux 命令行整理(完善中)
文件类 查看文件类 cat 用于连接文件并打印到标准输出设备上,可用于查看文件内容.(短文件) use:cat example.txtmore 分页的形式显示文件内容,适合查看较长的文件(长) use: more example.txtless 也是分页查看文件内容ÿ…...
回调方法传值汇总
<template v-slot"scope"><el-switch v-model"scope.row.open" change"(p1) > changeOpen(p1, scope.row)"></el-switch></template>公域流量 多选 selection-change“val > multipleSelection val”...
分享一个精灵图生成和拆分的实现
概述 精灵图(Sprite)是一种将多个小图像合并到单个图像文件中的技术,广泛应用于网页开发、游戏开发和UI设计中。在MapboxGL中,跟之配套的还有一个json文件用来记录图标的大小和位置。本文分享基于Node和sharp库实现精灵图的合并与…...
python中的min函数的key的用法 - abs绝对值
前言 继续上一章节提及的 Python 中 min() 函数的用法,包括其基本语法、处理列表、接收多个参数 这个章节将补充一些新的知识点例如: min函数中key的另一种用法abs绝对值 min(iterable, *iterables, keyNone, defaultNone) 知识点 key 参数 key 是一个可选参数…...
我开发的PDF转WORD免费工具
ZhouShengHuan 欢迎小伙伴使用~...
kubernetes高级实战
一、模拟企业环境进行一个实战部署 [rootmaster node]# kubectl apply -f pod-tomcat.yaml pod/tomcat-test created [rootmaster node]# kubectl get pods NAME READY STATUS RESTARTS AGE tomcat-test 2/2 Running 0 2s [rootmaster node]…...
IntelliJ 配置文件plugin.xml
在 IntelliJ IDEA 插件开发中,plugin.xml 是插件的配置文件,它包含了关于插件的所有基本信息、扩展点、依赖关系等。该文件使用 XML 格式进行定义。以下是 plugin.xml 中常见的元素及其用途: <idea-plugin><!-- 插件的基本信息 --&…...
《心理学与生活》2025最新网课答案
《心理学与生活》2025最新网课答案 文章目录 《心理学与生活》2025最新网课答案发展与教育单元测试情绪与情感单元测验人格与动机单元测试感知与记忆单元测试文化与社会单元测试 发展与教育单元测试 题数 20 棉花糖实验中哪些小孩长大后的表现更好()。 …...
11 python 数据容器-字符串
一、什么是数据容器 举个例子,一个办公室里有一群牛马,他们都有自己的名字,如果没有容器的概念,那么我们用变量来存放他们的名字,比如: name1 "翠花" name2 "玛丽" name3 "二…...
2025.3.20总结
阅读:《时间贫穷》第二章,里面讲到,运动,多行善事,体验自然,都会增强自我效能感,是对抗时间焦虑的强有力的方式。 花时间运动是值得的,公司每周三都是运动周,把运动视作…...
鸿蒙NEXT开发问题大全(不断更新中.....)
目录 问题1:鸿蒙NEXT获取华为手机的udid 问题2:[Fail]ExecuteCommand need connect-key? 问题3:测试时如何安装app包 问题1:鸿蒙NEXT开发获取华为手机的udid hdc -t "设备的序列号" shell bm get --udid 问题2&…...
【北京迅为】iTOP-RK3568开发板OpenHarmony系统南向驱动开发UART接口运作机制
瑞芯微RK3568芯片是一款定位中高端的通用型SOC,采用22nm制程工艺,搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码,支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU,可用于轻量级人工…...
大模型在冠心病风险预测及临床方案制定中的应用研究
目录 一、引言 1.1 研究背景与目的 1.2 国内外研究现状 1.3 研究方法与创新点 二、大模型预测冠心病风险原理与方法 2.1 数据收集与预处理 2.1.1 数据来源 2.1.2 数据清洗与整理 2.2 特征工程 2.2.1 特征提取 2.2.2 特征选择与优化 2.3 模型选择与训练 2.3.1 常用…...
【从零开始:如何用Vue3打造响应式个人博客网站】
前言 在前端开发领域,Vue.js 是一个非常流行且强大的框架。本文将详细介绍如何使用 Vue3 构建一个完整的响应式个人博客网站。无论你是初学者还是有一定经验的开发者,本文都将为你提供详细的步骤和代码示例。 1. 环境搭建 首先,确保你已经安…...
【vulhub/wordpress靶场】------获取webshell
1.进入靶场环境: 输入:cd / vulhub / wordpress / pwnscriptum 修改版本号: vim docker-compose.yml version: 3 保存退出 开启靶场环境: docker - compose up - d 开启成功,docker ps查看端口 靶场环境80…...
ngx_http_conf_ctx_t
定义在 src/http/ngx_http_config.h typedef struct {void **main_conf;void **srv_conf;void **loc_conf; } ngx_http_conf_ctx_t; ngx_http_conf_ctx_t 是 Nginx 中用于管理 HTTP 配置上下文的核心结构体,其设计体现了 Nginx 多级配置&…...
大模型+知识图谱:赋能知识智能新升级
在大模型(Large Language Model, LLM)飞速发展的今天,如何把传统行业中沉淀多年的大量结构化与非结构化数据真正“用起来”,正成为推动智能化转型的关键一步。 找得到,看得懂,为何很难? 以制造…...
python学智能算法(八)|决策树
【1】引言 前序学习进程中,已经对KNN邻近算法有了探索,相关文章链接为: python学智能算法(七)|KNN邻近算法-CSDN博客 但KNN邻近算法有一个特点是:它在分类的时候,不能知晓每个类别内事物的具…...
压力测试实战指南:JMeter 5.x深度解析与QPS/TPS性能优化
一、压力测试基础概念 1.1 什么是压力测试? 定义:模拟极端负载场景验证系统性能极限 目的:发现性能瓶颈、评估系统可靠性、验证容错能力 常见类型:负载测试、压力测试、稳定性测试、峰值测试 1.2 核心性能指标解析 1.2.1 QP…...
鸿蒙NEXT项目实战-百得知识库04
代码仓地址,大家记得点个star IbestKnowTeach: 百得知识库基于鸿蒙NEXT稳定版实现的一款企业级开发项目案例。 本案例涉及到多个鸿蒙相关技术知识点: 1、布局 2、配置文件 3、组件的封装和使用 4、路由的使用 5、请求响应拦截器的封装 6、位置服务 7、三…...
Spring Boot Actuator 自定义健康检查(附Demo)
目录 前言1. Demo2. 拓展 前言 🤟 找工作,来万码优才:👉 #小程序://万码优才/r6rqmzDaXpYkJZF Spring Boot 的 actuator 提供了应用监控的功能,其中健康检查(Health Check)是一个重要的部分&…...
Flutter小白零基础入门到高级项目实战全集
Flutter零基础入门到高级项目实战全集内容如下: Dart入门基础教程16讲、Null safety 、late 关键字、空类型声明符?、非空断言!、required 、Flutter入门基础、Flutter瀑布流布局、Flutter动画、Flutter异步流、GlobalKey 、Flutter国际化、…...
TCP 协议
文章目录 TCP 协议简介数据包格式TCP的特性连接机制确认与重传缓冲机制全双工通信流量控制差错控制拥塞控制 端口号三次握手数据传输四次挥手抓包参考 本文为笔者学习以太网对网上资料归纳整理所做的笔记,文末均附有参考链接,如侵权,请联系删…...
NO.51十六届蓝桥杯备战|堆算法题|第k小|除2|最小函数值|序列合并|舞蹈课(C++)
P3378 【模板】堆 - 洛谷 #include <bits/stdc.h> using namespace std;const int N 1e6 10; int n; int heap[N];void up(int child) {int parent child / 2;while (parent > 1 && heap[child] < heap[parent]){swap(heap[child], heap[parent]);chil…...
【QA】观察者模式在QT有哪些应用?
1. 信号与槽机制 Qt的**信号与槽(Signals & Slots)**是观察者模式的典型实现,通过元对象系统(Meta-Object System)实现松耦合通信。 核心特点: 类型安全:编译时检查参数匹配跨线程支持&…...
coze ai assistant Task5
没想到coze的组队学习这么快就过去了,我也从一个不懂coze的小白变成了一个能简单尝试小程序的懵懂小白。虽然几次学习并不能掌握很多的技能,但也让我知道coze的无限可能,组队结束后我会继续努力学习,做更多使自己偷懒的小工具~ 需…...
MATLAB神经网络优化1000个案例算法汇总
【2025最新版】MATLAB神经网络优化1000个案例算法汇总(长期更新版) 本文聚焦神经网络、优化算法,神经网络改进,优化算法改进,优化算法优化神经网络权重、超参数等,现在只需订阅即可拥有,简直是人工智能初学者的天堂。…...
Android Coil3 Fetcher preload批量Bitmap拼接扁平宽图,Kotlin
Android Coil3 Fetcher preload批量Bitmap拼接扁平宽图,Kotlin 在这一篇文章基础上改进: Android Coil3阶梯preload批量Bitmap拼接扁平宽图,Kotlin-CSDN博客文章浏览阅读854次,点赞18次,收藏5次。遗留问题,…...
Ubuntu 24 常用命令方法
文章目录 环境说明1、账号管理1.1、启用 root 2、包管理工具 apt & dpkg2.1、apt 简介 & 阿里源配置2.2、dpkg 简介2.3、apt 和 dpkg 两者之间的关系2.4、常用命令 3、启用 ssh 服务4、防火墙5、开启远程登录6、关闭交换分区7、build-essential(编译和开发软…...
uniapp自身bug | uniapp+vue3打包后 index.html无法直接运行
前提: 已经修改了基础路径 打开打包文件,双击运行index.html报错,无法访问页面 uniappvue2项目是可以正常运行的 vue3修改publicPath: ./后,也是可以正常访问打包文件中的index.html 点进控制台提供的链接:https:/…...
go~协程阻塞分析
错误示例 type chanData struct {result stringerror error }func Biz1() {t := time.NewTimer(time.Second * 10)ctx := context.Background()ch := make(chan chanData)go doChan(ctx, ch)fmt.Println("Biz1 begin")for {select {case <-t.C:fmt.Println(&quo…...
【机器学习】什么是逻辑回归
什么是逻辑回归 一、摘要二、逻辑回归算法简介三、sigmoid函数实现四、思考题 一、摘要 本文主要讲述了逻辑回归算法的基本原理和应用。首先介绍了逻辑回归在机器学习领域的重要地位,然后解释了其名称的由来和如何利用样本特征和概率之间的关系进行分类。通过与线性…...
postman小白教程(从入门到实战,详细教学)
目录 1. postman介绍 2. 下载地址 3. 安装流程 4. 注册postman账号 ① 打开postman,点击【创建账号】或【登录】,会跳转到浏览器 ② 若已有账号可以直接登录;若无账号,则创建新账号 ③ 若登录成功会弹出提示框,…...
4.1-4 SadTalker数字人 语音和嘴唇对应的方案
前言: SadTalker是一个强大的数字人相关的RA/SD插件。它本身是一个非常独立的产品。你只需要提供一段视频,一段文字,简单的配置,在RA/SD中简单的生成即可。 视频中人物的嘴唇很好的应对了你要发声的文字内容。效果很赞。仔细学习…...
Linux CentOS7 安装 ffmpeg教程
官网:FFmpeg 操作 先用uname -a 查看内核版本,如果是 3.2.0或者以上就可以按照此办法来安装 cd /tmp wget https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-amd64-static.tar.xz# 2. 解压 tar xvf ffmpeg-release-amd64-static.tar.xz# 3. 将…...
docker desktop 集成WSL Ubuntu22.04
Windows docker desktop 设置WSL ubuntu 22.04启用与其他发行版的集成 Windows docker desktop 安装参考 wsl ubuntu 22.04 查看我宿主机的docker desktop 容器全部的信息 wsl -d Ubuntu-22.04 -u root...
【AI】AI编程助手:Cursor、Codeium、GitHub Copilot、Roo Cline、Tabnine
文章目录 一、基本特性对比二、收费标准三、私有部署能力1、Tabnine2、Roo Code 三、代码补全与自然语言生成代码四、安装独立的IDE安装插件安装 五、基本使用(一)Cursor(二)GitHub Copilot1、获取代码建议2.聊天1)上下…...
Android audio(8)-native音频服务的启动与协作(audiopolicyservice和audioflinger)
音频策略的构建 1、概述 2、AudiopolicyService 2.1 任务 2.2 启动流程 2.2.1 加载audio_policy.conf(xml)配置文件 2.2.2 初始化各种音频流对应的音量调节点 2.2.3 加载audio policy硬件抽象库 2.2.4设置输出设备 ps:audiopatch流程简介 2.2.5打开输出设…...
光纤通道 VS iSCSI:存储架构选型的关键抉择
光纤通道 VS iSCSI:存储架构选型的关键抉择 在企业运维中,存储网络的选择可以说是至关重要的一环。尤其是光纤通道(Fibre Channel,简称FC)和iSCSI存储,这两种主流解决方案各有千秋,常常让运维工程师在选型时感到纠结。为了帮大家理清头绪,我们今天就从架构、性能、成本…...
HarmonyOS Next中的弹出框使用
HarmonyOS Next弹出框概述及分类 弹出框是一种模态窗口,通常用于在保持当前上下文环境的同时,临时展示用户需关注的信息或待处理的操作。用户需在模态弹出框内完成相关交互任务之后,才能退出模态模式。弹出框可以不与任何组件绑定࿰…...
Binder机制源码分析
Binder机制源码分析 一、前言 Binder是Android系统中最重要的进程间通信机制,它不仅是应用程序和系统服务通信的基础,也是Android系统安全机制的重要组成部分。本文将深入分析Binder机制的实现原理,帮助读者理解Android系统的核心通信机制。…...
第5课 树莓派的Python IDE—Thonny
1. Thonny的特点 Thonny是一款面向初学者的Python IDE。它由爱沙尼亚的 Tartu 大学开发,其调试器是专为学习和教学编程而设计的。Thonny具有如下特点 易于上手。Thonny 内置了 Python 3.7,因此只需要一个简单的安装程序,你就可以开始学习编程了(如有必要,您还可以使用单独…...
位运算题目:或运算的最小翻转次数
文章目录 题目标题和出处难度题目描述要求示例数据范围 解法思路和算法代码复杂度分析 题目 标题和出处 标题:或运算的最小翻转次数 出处:1318. 或运算的最小翻转次数 难度 4 级 题目描述 要求 给定三个正整数 a \texttt{a} a、 b \texttt{b} b…...
Java 实现排序算法 TopK 问题
1. 低级排序 (1)冒泡排序(Bubble Sort) 思路: 每次从左到右冒泡,把最大的数推到最后。 public class BubbleSort {public static void bubbleSort(int[] arr) {int n arr.length;for (int i 0; i <…...
【JavaEE】网络编程socket
1.❤️❤️前言~🥳🎉🎉🎉 Hello, Hello~ 亲爱的朋友们👋👋,这里是E绵绵呀✍️✍️。 如果你喜欢这篇文章,请别吝啬你的点赞❤️❤️和收藏📖📖。如果你对我的…...
第J3周:DenseNet121算法实现01(Pytorch版)
🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 目标 具体实现 (一)环境 语言环境:Python 3.10 编 译 器: PyCharm 框 架: Pytorch (二)具体步骤…...
在Ubuntu20.04上交叉编译能在Windows上运行的Qt5应用
参考链接: https://blog.csdn.net/Interview_TC/article/details/146050419 https://bugreports.qt.io/browse/QTBUG-82592 重要设置 sudo update-alternatives --config x86_64-w64-mingw32-g 选择后缀带posix的,(/usr/bin/x86_64-w64-min…...
C语言中,memmove和memcpy的区别?
文章目录 1. 内存重叠处理memcpy:memmove: 2. 性能差异总结 在C语言中,memmove和memcpy均用于内存块的复制,但关键区别在于对内存重叠的处理: 1. 内存重叠处理 memcpy: 假设源(src࿰…...
小程序API —— 54 路由与通信 - 编程式导航
在小程序中实现页面的跳转,有两种方式: 声明式导航:navigator 组件编程式导航:使用小程序提供的 API 编程式导航 API 提供了五个常用的 API 方法: wx.navigateTo():保留当前页面,跳转到应用内…...