【Ubutun】 在Linux Yocto的基础上去适配4G模块
1)、完整解决流程总结
一. 固定4G模块的网络接口名 usb0
(基于物理路径)
# 创建UDEV规则文件
sudo vi /etc/udev/rules.d/10-4g-rename.rules
添加内容:
SUBSYSTEM=="net", ACTION=="add", ATTRS{busnum}=="2", ATTRS{devpath}=="1.3", NAME="usb0"
生效规则:
sudo udevadm control --reload
sudo udevadm trigger
作用:无论接口MAC如何变化,始终命名为 usb0
。
二、4G模块自动分配ip
1. 隔离 ModemManager 和 NetworkManager 的管理范围
作用:
• ModemManager 管理 ttyUSB0-3
(用于短信/拨号)。
• NetworkManager 管理 usb0
(用于网络通信)。
2. 通过udev设置ModemManager管理权限
# 禁止ModemManager管理网络接口(usb0)
sudo vi /etc/udev/rules.d/77-mm-ignore-usb0.rules
添加内容:
SUBSYSTEM=="net", ACTION=="add", ATTRS{busnum}=="2", ATTRS{devpath}=="1.3", ENV{ID_MM_DEVICE_IGNORE}="1"
# 允许ModemManager管理AT指令端口(ttyUSB0-3)
sudo vi /etc/udev/rules.d/77-mm-manage-ttyUSB.rules
添加内容:
SUBSYSTEM=="tty", ATTRS{idVendor}=="2c7c", ATTRS{idProduct}=="0125", ENV{ID_MM_PORT_IGNORE}="0"
生效规则:
sudo udevadm control --reload
sudo udevadm trigger
3. 通过udev设置 NetworkManager 全局策略
# 修改全局配置文件,强制允许管理usb0接口
sudo vi /usr/lib/NetworkManager/conf.d/10-globally-managed-devices.conf
在这个文件加上在这个文件加上except:interface-name:usb0
修改后内容:
[keyfile]
unmanaged-devices=*,except:type:wifi,except:type:gsm,except:type:cdma,except:type:ethernet,except:interface-name:usb0
重启服务:
sudo systemctl restart NetworkManager
作用:显式允许管理 usb0
(绕过类型识别依赖)。
4. 创建 NetworkManager 连接配置
# 删除旧配置
sudo nmcli con delete "4G-USB"# 创建新配置
sudo nmcli con add type ethernet \con-name "4G-USB" \ifname usb0 \ipv4.method auto \ipv6.method ignore \autoconnect yes# 激活连接
sudo nmcli con up "4G-USB"
**三、 4G模块发短信和打电话
1. 禁止 ModemManager 占用 ttyUSB2
(关键!)**
# 创建UDEV规则,禁止ModemManager管理ttyUSB2
sudo vi /etc/udev/rules.d/78-mm-ignore-ttyUSB2.rules
添加内容:
SUBSYSTEM=="tty", ATTRS{idVendor}=="2c7c", ATTRS{idProduct}=="0125", ATTRS{devpath}=="1.3", ENV{ID_MM_PORT_IGNORE}="1"
生效规则:
sudo udevadm control --reload
sudo udevadm trigger
sudo systemctl restart ModemManager
作用:让 ttyUSB2
仅由用户程序控制,避免 ModemManager 冲突。
四. 验证串口权限
# 确保用户属于dialout组
sudo usermod -aG dialout $USER
# 重启生效
sudo reboot
五、最终验证
1. 网络功能
nmcli dev status # 应显示 usb0 为 connected
ip addr show usb0 # 应显示 IPv4 地址
ping -I usb0 8.8.8.8 # 测试网络连通性
2. 短信功能
# 发送短信
./send_sms /dev/ttyUSB2 192******** "www.tronlong.com"
# 预期输出:AT+CMGF=1 返回 OK
3. 电话功能
# 拨打电话
./phone_call /dev/ttyUSB2 192********
# 预期输出:ATD19200952893; 触发拨号
六、关键问题解释
为什么之前失败?
-
ModemManager 冲突:
ModemManager 默认会接管所有ttyUSB*
设备,导致用户程序无法直接控制ttyUSB2
。
解决:通过ENV{ID_MM_PORT_IGNORE}="1"
显式禁止其管理。 -
NetworkManager 策略限制:
原配置仅允许管理特定类型设备,而usb0
未被正确识别为ethernet
。
解决:通过except:interface-name:usb0
强制放行。
七、总结
配置文件路径 | 作用 |
---|---|
/etc/udev/rules.d/10-4g-rename.rules | 固定接口名为 usb0 |
/etc/udev/rules.d/77-mm-ignore-usb0.rules | 禁止 ModemManager 管理 usb0 |
/etc/udev/rules.d/77-mm-manage-ttyUSB.rules | 允许 ModemManager 管理其他 ttyUSB* 端口 |
/etc/udev/rules.d/78-mm-ignore-ttyUSB2.rules | 禁止 ModemManager 管理 ttyUSB2 (用户程序独占) |
/usr/lib/NetworkManager/conf.d/10-globally-managed-devices.conf | 强制 NetworkManager 管理 usb0 |
按此流程操作后,4G模块的命名修改 + ip自动分配+通信(发短信和打电话)功能均可正常工作。
2)、更为详细的总结
超详细解释与操作指南
一、基础概念解释
1. UDEV 是什么?
• 定义:UDEV 是 Linux 系统中的一个守护进程,负责在 /dev
目录下动态管理设备节点(如 /dev/ttyUSB2
、/dev/usb0
等)。
• 作用:当设备插入或移除时,UDEV 会根据规则文件(位于 /etc/udev/rules.d/
)动态创建设备节点,并设置权限或触发其他操作。
• 规则文件命名:
• 规则文件以数字开头(如 77-mm-...
),数字越小优先级越高。
• 文件名可自定义,但通常用数字表示优先级,例如 10-
开头的规则会在 90-
之前执行。
2. ModemManager 是什么?
• 定义:ModemManager 是 Linux 中管理移动宽带模块(如4G模块)的守护进程,负责处理拨号、短信、网络注册等功能。
• 名字由来:
• Modem:调制解调器(Mobile Broadband Modem)。
• Manager:管理器。
合起来就是“调制解调器管理器”。
• 功能:自动检测模块、管理 SIM 卡状态、发送 AT 指令等。
3. 为什么 ModemManager 的设置与 UDEV 有关?
• 设备管理依赖:ModemManager 需要通过 /dev/ttyUSB*
这样的串口设备与模块通信。
• 冲突问题:如果 ModemManager 和用户程序同时操作同一个串口,会导致资源冲突(例如用户程序无法发送 AT 指令)。
• 解决方式:通过 UDEV 规则控制哪些设备由 ModemManager 管理,哪些由用户程序直接控制。
二、UDEV规则详解
1. 规则文件路径与命名
• 路径:/etc/udev/rules.d/
• 这是 UDEV 规则的标准存放目录,系统会加载此目录下所有 .rules
文件。
• 命名示例:
• 10-4g-rename.rules
:以 10
开头,表示优先级较高。
• 77-mm-ignore-usb0.rules
:以 77
开头,表示优先级中等,mm
表示与 ModemManager 相关。
2. 规则语法解析
(1) 禁止 ModemManager 管理网络接口(usb0)
# 文件:/etc/udev/rules.d/77-mm-ignore-usb0.rules
SUBSYSTEM=="net", ACTION=="add", ATTRS{busnum}=="2", ATTRS{devpath}=="1.3", ENV{ID_MM_DEVICE_IGNORE}="1"
• 逐字段解释:
• SUBSYSTEM=="net"
:匹配设备类型为网络接口(如以太网卡、WiFi)。
• ACTION=="add"
:当设备被添加到系统时触发规则。
• ATTRS{busnum}=="2"
:匹配 USB 总线号为 2 的设备(通过 dmesg
或 udevadm info
可查看)。
• ATTRS{devpath}=="1.3"
:匹配设备在总线上的路径为 1.3
(表示 USB 集线器的第一个端口下的第三个设备)。
• ENV{ID_MM_DEVICE_IGNORE}="1"
:设置环境变量 ID_MM_DEVICE_IGNORE
为 1
,告知 ModemManager 忽略此设备。
• 作用:让 ModemManager 不管理 usb0
接口(避免与 NetworkManager 冲突)。
(2) 允许 ModemManager 管理 AT 指令端口(ttyUSB0-3)
# 文件:/etc/udev/rules.d/77-mm-manage-ttyUSB.rules
SUBSYSTEM=="tty", ATTRS{idVendor}=="2c7c", ATTRS{idProduct}=="0125", ENV{ID_MM_PORT_IGNORE}="0"
• 逐字段解释:
• SUBSYSTEM=="tty"
:匹配设备类型为串口(如 /dev/ttyUSB0
)。
• ATTRS{idVendor}=="2c7c"
:匹配设备的厂商ID为 2c7c
(Quectel 的厂商ID)。
• ATTRS{idProduct}=="0125"
:匹配设备的产品ID为 0125
(例如 Quectel EC25 模块的ID)。
• ENV{ID_MM_PORT_IGNORE}="0"
:设置环境变量 ID_MM_PORT_IGNORE
为 0
,告知 ModemManager 管理此设备。
• 作用:允许 ModemManager 管理所有 Quectel 模块的串口(用于短信、拨号等)。
(3) 禁止 ModemManager 管理特定串口(ttyUSB2)
# 文件:/etc/udev/rules.d/78-mm-ignore-ttyUSB2.rules
SUBSYSTEM=="tty", ATTRS{idVendor}=="2c7c", ATTRS{idProduct}=="0125", ATTRS{devpath}=="1.3", ENV{ID_MM_PORT_IGNORE}="1"
• 逐字段解释:
• ATTRS{devpath}=="1.3"
:精确匹配设备路径为 1.3
(即该模块的 AT 指令端口)。
• ENV{ID_MM_PORT_IGNORE}="1"
:设置环境变量 ID_MM_PORT_IGNORE
为 1
,告知 ModemManager 忽略此端口。
• 作用:让用户程序独占 /dev/ttyUSB2
,避免 ModemManager 冲突。
3. 环境变量 ID_MM_*
的含义
• 命名由来:
• ID_MM
前缀表示这些变量专为 ModemManager 设计。
• PORT_IGNORE
和 DEVICE_IGNORE
是 ModemManager 定义的变量名。
• 作用:
• ID_MM_PORT_IGNORE=1
:让 ModemManager 忽略某个串口。
• ID_MM_DEVICE_IGNORE=1
:让 ModemManager 忽略某个网络设备。
三、操作步骤详解
1. 固定接口名 usb0
• 命令:
sudo vi /etc/udev/rules.d/10-4g-rename.rules
SUBSYSTEM=="net", ACTION=="add", ATTRS{busnum}=="2", ATTRS{devpath}=="1.3", NAME="usb0"
• 作用:无论模块的 MAC 地址如何变化,接口名始终为 usb0
,避免因动态命名(如 enp0s1
)导致配置失效。
2. 隔离 ModemManager 和 NetworkManager
• 禁止 ModemManager 管理网络接口:
sudo vi /etc/udev/rules.d/77-mm-ignore-usb0.rules
SUBSYSTEM=="net", ACTION=="add", ATTRS{busnum}=="2", ATTRS{devpath}=="1.3", ENV{ID_MM_DEVICE_IGNORE}="1"
• 作用:防止 ModemManager 干扰 usb0
的网络功能。
• 允许 ModemManager 管理其他串口:
sudo vi /etc/udev/rules.d/77-mm-manage-ttyUSB.rules
SUBSYSTEM=="tty", ATTRS{idVendor}=="2c7c", ATTRS{idProduct}=="0125", ENV{ID_MM_PORT_IGNORE}="0"
• 作用:允许 ModemManager 管理模块的诊断端口(如 ttyUSB0
),用于获取信号强度、SIM 状态等。
3. 强制 NetworkManager 管理 usb0
• 修改全局策略文件:
sudo vi /usr/lib/NetworkManager/conf.d/10-globally-managed-devices.conf
[keyfile]
unmanaged-devices=*,except:type:wifi,except:type:gsm,except:type:cdma,except:type:ethernet,except:interface-name:usb0
• 作用:覆盖默认策略,强制 NetworkManager 管理 usb0
。
4. 创建网络连接配置
• 命令:
sudo nmcli con add type ethernet con-name "4G-USB" ifname usb0 ipv4.method auto ipv6.method ignore autoconnect yes
• 作用:创建一个名为 4G-USB
的连接,自动通过 DHCP 获取 IPv4 地址。
5. 禁止 ModemManager 占用 ttyUSB2
• 命令:
sudo vi /etc/udev/rules.d/78-mm-ignore-ttyUSB2.rules
SUBSYSTEM=="tty", ATTRS{idVendor}=="2c7c", ATTRS{idProduct}=="0125", ATTRS{devpath}=="1.3", ENV{ID_MM_PORT_IGNORE}="1"
• 作用:让用户程序(如 send_sms
)独占 ttyUSB2
,避免 ModemManager 冲突。
6. 生效规则
• 重新加载 UDEV 规则:
sudo udevadm control --reload
sudo udevadm trigger
• 重启服务:
sudo systemctl restart ModemManager NetworkManager
四、最终效果
• 网络功能:usb0
自动获取 IP,通过 ping -I usb0 8.8.8.8
测试。
• 短信功能:./send_sms /dev/ttyUSB2 19200952893 "Test"
直接控制串口发送短信。
• 电话功能:./phone_call /dev/ttyUSB2 19200952893
直接拨号。
五、总结
• UDEV 规则:通过精确匹配设备属性(如总线号、厂商ID),控制 ModemManager 的管理范围。
• 环境变量:ID_MM_PORT_IGNORE
和 ID_MM_DEVICE_IGNORE
是 ModemManager 的“开关”,1
表示忽略,0
表示管理。
• 命名逻辑:规则文件名中的 mm
表示 ModemManager,ignore
表示忽略设备,manage
表示管理设备。
真实案例——调试过程
1.配置自动分配ip
2.配置发短信、打电话
5G
分步解决方案:解决5G模块问题
1. 确认5G模块的USB信息
# 插入模块后执行
lsusb
• 输出示例:
Bus 002 Device 003: ID 2cb7:0102 Fibocom FG652-CN
记录 idVendor
(如 2cb7
)和 idProduct
(如 0102
)。
2. 更新UDEV规则
# 创建新规则文件
sudo vi /etc/udev/rules.d/80-fg652-cn.rules
添加内容:
# 固定网络接口名为usb0
SUBSYSTEM=="net", ACTION=="add", ATTRS{idVendor}=="2cb7", ATTRS{idProduct}=="0102", NAME="usb0"# 禁止ModemManager管理所有ttyUSB端口
SUBSYSTEM=="tty", ATTRS{idVendor}=="2cb7", ATTRS{idProduct}=="0102", ENV{ID_MM_PORT_IGNORE}="1"
生效规则:
sudo udevadm control --reload
sudo udevadm trigger
3. 强制NetworkManager管理usb0
# 确保策略文件包含usb0
sudo vi /usr/lib/NetworkManager/conf.d/10-globally-managed-devices.conf
修改为:
[keyfile]
unmanaged-devices=*,except:interface-name:usb0
重启服务:
sudo systemctl restart NetworkManager
4. 检查IP分配
# 手动获取IP(如果DHCP失败)
sudo dhclient -v usb0
# 查看IP
ip addr show usb0
• 预期输出:显示有效的IPv4或IPv6地址。
5. 测试网络连通性
# 强制使用IPv4(避免IPv6干扰)
ping -4 www.baidu.com -I usb0
6. 手动测试AT指令
# 安装minicom
sudo apt install minicom
# 测试不同ttyUSB端口
sudo minicom -D /dev/ttyUSB0 -b 115200
sudo minicom -D /dev/ttyUSB1 -b 115200
在minicom中输入:
AT+CPIN? # 检查SIM卡状态
AT+CSQ # 检查信号质量
AT+CMGF=1 # 设置文本模式
• 关键点:
- 确认正确的AT指令端口(如
ttyUSB1
)。 - 确认波特率(可能为
115200
或9600
)。
7. 修改短信/电话脚本
如果AT指令端口或波特率变化,需更新程序中的默认参数:
# 示例:修改send_sms脚本中的默认端口和波特率
sudo vi send_sms
修改代码:
# 原始配置
port = "/dev/ttyUSB2"
baudrate = 9600# 新配置
port = "/dev/ttyUSB1"
baudrate = 115200
8. 验证驱动兼容性
# 检查内核日志
dmesg | grep "Fibocom"
# 预期输出:
usb 2-1.3: New USB device found, idVendor=2cb7, idProduct=0102
cdc_ether 2-1.3:1.4 usb0: register 'cdc_ether' ...
• 若驱动未加载:
需安装模块特定驱动(参考厂商文档)。
关键问题解析
问题 | 原因 | 解决方案 |
---|---|---|
ping卡住且显示警告 | IPv6地址优先或DHCP未完成 | 使用 ping -4 强制IPv4,或检查DHCP配置 |
短信/电话失败 | AT指令端口变化(如从 ttyUSB2 变为 ttyUSB1 ) | 更新脚本中的默认端口 |
5G模块未被识别为usb0 | UDEV规则未匹配新模块的USB ID | 新增规则匹配 idVendor=2cb7 和 idProduct=0102 |
串口通信错误 | 波特率不匹配(如FG652-CN需115200) | 在程序或minicom中显式设置波特率 |
总结
- UDEV规则更新:确保新模块的USB ID和路径被正确匹配。
- 网络调试:优先使用IPv4,确认DHCP/IP分配正常。
- AT指令适配:手动验证端口和波特率,更新程序配置。
- 驱动兼容性:检查内核日志,必要时安装厂商驱动。
按此流程操作后,5G模块的网络和通信功能应恢复正常。若仍有问题,请提供 dmesg
和 journalctl -u NetworkManager
日志。
相关文章:
【Ubutun】 在Linux Yocto的基础上去适配4G模块
1)、完整解决流程总结 一. 固定4G模块的网络接口名 usb0(基于物理路径) # 创建UDEV规则文件 sudo vi /etc/udev/rules.d/10-4g-rename.rules添加内容: SUBSYSTEM"net", ACTION"add", ATTRS{busnum}"2&…...
达梦数据库-学习-15-大内存SQL相关视图介绍
目录 一、环境信息 二、介绍 三、数据字典表 1、V$MEM_POOL 2、V$SQL_STAT 3、V$SQL_STAT_HISTORY 4、V$LARGE_MEM_SQLS 5、V$SYSTEM_LARGE_MEM_SQLS 四、总结 一、环境信息 名称值CPU12th Gen Intel(R) Core(TM) i7-12700H操作系统CentOS Linux release 7.9.2009 (Co…...
分治-归并系列一>翻转对
目录 题目:解析:策略一: 代码:策略二: 代码: 题目: 链接: link 这题和逆序对区别点就是,要找到前一个元素是后一个元素的2倍 先找到目标值再,继续堆排序 解析࿱…...
微服务面试题
五大组件 注册中心/配置中心 nacos 服务注册 服务启动时 将自己的id等信息发送给nacos 完成注册 服务发现 服务需要调用其他服务时 从nacos获取服务列表 交给负载均衡选择 服务监控 临时实例 由服务每隔一段时间注册中心发送信息 表示自己存活 若注册中心超过一定时间没有…...
高级java每日一道面试题-2025年3月31日-微服务篇[Nacos篇]-Nacos集群模式下的部署方案有哪些?
如果有遗漏,评论区告诉我进行补充 面试官: Nacos集群模式下的部署方案有哪些? 我回答: Nacos 集群模式下的部署方案详解 在 Java 高级面试中,Nacos 集群部署是考察候选人对分布式系统高可用性和扩展性理解的重要议题。以下是几种常见的 Nacos 集群部…...
3dmax的python通过普通的摄像头动捕表情
1、安装python 进入cdm,打python要能显示版本号 >>>(进入python提示符模式) import sys sys.path显示python的安装路径, 进入到python.exe的路径 在python目录中安装(ctrlz退出python交互模式) 2、pip install mediapipe…...
vue3+vite Cannot find module ‘@/XXXXXX‘ or its corresponding type declarations
在使用vue3vite 创建新的工程时会出现Connot find module /xxx错误,根本原因是vite 中没有配置跟目录别名导致的,可以在vite.config.ts 中增加如下配置 如果在tsconfig.json中增加 "compilerOptions": {"paths": {"/*": …...
vmware-exporter容器
vmware-exporter干嘛的,需要的都知道,不再赘述,如果你不了解,说明你也用不到,此文可略过。 如果你嫌自行部署比较麻烦,可移步https://download.csdn.net/download/qq_28608175/90595900下载容器打包文件&a…...
异形遮罩之QML中的 `OpacityMask` 实战
文章目录 🌧️ 传统实现的问题👉 效果图 🌈 使用 OpacityMask 的理想方案👉代码如下🎯 最终效果: ✨ 延伸应用🧠 总结 在 UI 设计中,经常希望实现一些“异形区域”拥有统一透明度或颜…...
代码随想录算法训练营Day27 | Leetcode 56. 合并区间、738.单调递增的数字、968.监控二叉树
代码随想录算法训练营Day27 | Leetcode 56.合并区间、738.单调递增的数字、968.监控二叉树 一、合并区间 相关题目:Leetcode56 文档讲解:Leetcode56 视频讲解:Leetcode56 1. Leetcode56. 合并区间 以数组 intervals 表示若干个区间的集合&am…...
【SQL】常见SQL 行列转换的方法汇总 - 精华版
【SQL】常见SQL 行列转换的方法汇总 - 精华版 一、引言二、SQL常见的行列转换对比1. 行转列 Pivoting1.1 CASE WHEN 聚合函数1.2 IF 聚合函数1.3 PIVOT操作符 2.列转行 Unpivoting2.1 UNION ALL2.2 EXPLODE函数(Hive/Spark&#…...
docx文档转为pdf文件响应前端
1、转换文件(docx~pdf) 1.引入pom依赖 <dependency><groupId>com.aspose</groupId><artifactId>aspose-words</artifactId><version>20.12.0</version> </dependency>2.读取docx文档数据-转换 // 初…...
python办公自动化------word转换pdf
需要安装包:docx2pdf 例1:将docx文件转换为pdf文件 from docx2pdf import convertconvert("./dataFile/test_doc.docx", "./dataFile/测试文件转换.pdf") 运行结果:...
cs224w课程学习笔记-第10课
cs224w课程学习笔记-第10课 异构图 前言一、异构图1、异构图定义2、异构图与同构图 二、异构图下的GNN1、GCN扩展至RGCN1.1 RGCN原理1.2 异构图的任务预测特点1.3 异构图任务预测基础案例 2、完整的异构图GCN三、异构图下的Transformer 前言 异构图的定义是节点内部存在类型不…...
leetcode每日一题:查询数组异或美丽值
引言 今天的每日一题原题是2843. 统计对称整数的数目,由于数据量很小,最大只是到10000,所以直接模拟即可,不需要复杂的数位DP,反而执行的更慢。更换成前几天遇到的更有意思的一题来写这个每日一题。 题目 2527. 查询…...
【C#】一种优雅的基于winform的串口通信管理
serialPort.DataReceived、串口优雅管理 完整《C#串口通信系统》功能清单 Part 1 — SerialPortManager.cs —— 串口核心管理类 using System; using System.IO.Ports; using System.Text; using System.Threading; using System.Windows.Forms;/// <summary> /// 专业…...
【Linux】ubuntu环境变量配置以及shell配置文件编写
一、确定配置文件类型 输入命令确定配置文件类型 echo $SHELL输出如果是 /bin/zsh,那就改 .zshrc;如果是 /bin/bash,那就改 .bashrc。 下面以 .bashrc 为例。 二、编辑 ./bashrc 文件 输入命令编辑配置文件。 vim ~/.bashrc在文件末尾添…...
.NET MAUI教程2-利用.NET CommunityToolkit.Maui框架弹Toast
在上一篇博文的基础上继续操作: .NET MAUI教程1-入门并发布apk包安装到真机-CSDN博客 本文内容参考: Toast - .NET MAUI Community Toolkit - Community Toolkits for .NET | Microsoft Learn 1 在NuGet包管理器中安装 MAUI Community Toolkit&…...
Android 16应用适配指南
Android 16版本特性介绍 https://developer.android.com/about/versions/16?hlzh-cn Android 16 所有功能和 API 概览 https://developer.android.com/about/versions/16/features?hlzh-cn#language-switching Android 16 发布时间 Android 16 适配指南 Google开发平台&…...
<C#>在 C# .NET 6 中,使用IWebHostEnvironment获取Web应用程序的运行信息。
在 C# .NET 6 中,IWebHostEnvironment 接口提供了有关应用程序运行环境的信息,例如应用程序的根目录、环境名称等。它在处理文件路径、加载配置文件以及根据不同环境提供不同服务等场景中非常有用。以下是关于 IWebHostEnvironment 的详细用法介绍&#…...
在 STM32 中实现电机测速的方法介绍
在 STM32 中实现电机测速的方法介绍 关键字:M 法测速, T 法测速,编码器 1. 电机测速方法介绍 在电机控制类应用中,经常会需要对电机转速进行检测,测速常用的方式有 M 法测速和 T法测速。 M 法测速是利用在规定时间 …...
第四十六篇 人力资源管理数据仓库架构设计与高阶实践
声明:文章内容仅供参考,需仔细甄别。文中技术名称属相关方商标,仅作技术描述;代码示例为交流学习用途;案例数据已脱敏,技术推荐保持中立;法规解读仅供参考,请以《网络安全法》《数据…...
支持iOS与Android!SciChart开源金融图表库助力高效开发交易应用
如果您想了解更多关于开源财务图表库的iOS和Android应用程序,SciChart高性能的iOS、Android图表库一定不要错过!使用SciChart创建金融、交易呵股票、外汇或加密应用程序变得很容易。 SciChart iOS & macOS是一个功能丰富和强大的OpenGL ES和Metal 2D…...
stack和queue的模拟实现
功能介绍 1.stack stack是栈,它是后进先出,如下图所示: 它是从顶部出数据,从顶部出数据。STL库中提供了几个接口来实现栈。、 它们是: empty判断栈是否为空,返回值是bool。 size是返回栈中的元素个数。…...
【QT】-define (A, B) (quint16)(((A) << 8) | (B)) 分析
不加 quint8 的写法:#define TO_SOURCE(A, B) (quint16)((A << 8) | B) 潜在问题 符号位扩展(如果 A 是负数) 如果 A 是 char 或 int8_t 且为负数(如 0xFF -1),左移 << 8 会导致 符号位扩展&…...
DISTRIBUTED PRIORITIZED EXPERIENCE REPLAY(分布式优先级体验回放)论文阅读
标题:DISTRIBUTED PRIORITIZED EXPERIENCE REPLAY(分布式优先级体验回放) 作者:John Quan, Dan Horgan,David Budden,Gabriel Barth-Maron 单位: DeepMind 发表期刊:Machine Learning 发表时…...
【Qt】QxOrm:下载、安装、使用
1、下载源码 github地址:https://github.com/QxOrm/QxOrm 稳定版本下载:https://github.com/QxOrm/QxOrm/releases/tag/1.5.0 2、编译源码 QxOrm支持cmake编译(CMakeLists.txt)、Qt pro工程编译(QxOrm.pro) 以 QxOrm.pro 为例,编译生成的库,没有在 build-QxOrm-1.5…...
Java I/O 流体系详解与记忆方法
Java I/O 流体系详解与记忆方法 一、I/O 流核心框架 Java I/O 流体系是Java处理输入输出的核心API,主要分为两大阵营: 1. 按数据流向分(输入和输出是相对于内存而言的) 内存:临时存储数据的空间 硬盘:…...
【vLLM 学习】API 客户端
vLLM 是一款专为大语言模型推理加速而设计的框架,实现了 KV 缓存内存几乎零浪费,解决了内存管理瓶颈问题。 更多 vLLM 中文文档及教程可访问 →https://vllm.hyper.ai/ 源代码:vllm-project/vllm """Example Python client…...
CSS学习02 动态列数表格开发,解决多组数据布局与边框重合问题
概要 在前端开发中,表格常用于展示结构化数据。当数据组的字段数量不统一时(如有的行包含 3 组数据,有的行包含 2 组或 1 组),传统固定列数的表格会出现结构错位、边框重合等问题。本文通过 HTML/CSS 规范方法&#x…...
【websocket】使用案例( JSR 356 标准)
目录 一、JSR 356方式:简单示例 1、引入依赖 2、注册端点扫描器 3、编写通过注解处理生命周期和消息 4、细节解读 5、总结 二、聊天室案例 方案流程 1、引入依赖 2、注册端点扫描器 3、编写一个配置类,读取httpsession 4、编写通过注解处理生…...
Tomcat Session 反序列化漏洞(CVE-2025-24813)
1.漏洞描述 Tomcat 是一个开源的、轻量级的 Web 应用服务器 和 Servlet 容器。它由 Apache 软件基金会下的 Jakarta 项目开发,是目前最流行的 Java Web 服务器之一。 该漏洞利用条件较为复杂,需同时满足以下四个条件: 应用程序启用了DefaultS…...
maven导入本地jar示例
1、${project.basedir} 是固定写法 <dependency><groupId>alipay-sdk</groupId><artifactId>alipay-sdk</artifactId><version>1.0</version><scope>system</scope><systemPath>${project.basedir}/src/main/lib…...
哨兵模式下,Redis主从同步原理,新增的Redis从节点如何同步
在Redis哨兵模式下,新增从节点的同步过程遵循全量同步和增量同步相结合的机制,具体原理如下: 一、新增从节点的同步流程 1. 建立连接与初始化请求 新增从节点首次启动时,通过replicaof <master-ip> <master-port>命…...
SpringBoot系列之集成Redisson实现布隆过滤器
基于Spring Boot集成Redisson实现布隆过滤器 在高并发和大数据量的场景下,布隆过滤器是一种非常高效的存储结构,可以用于快速判断一个元素是否存在于集合中。本文将介绍如何在Spring Boot中集成Redisson来实现布隆过滤器,并通过一个订单查询…...
Matlab 非线性阻尼四分之一车体被动和模糊pid控制悬架对比
1、内容简介 Matlab 192-非线性阻尼四分之一车体被动和模糊pid控制悬架对比 可以交流、咨询、答疑 2、内容说明 略 汽车车辆悬架系统的核心元件主要有控制器、导向机构、弹性元件以及减 震器等,该系统是汽车最重要的结构系统之一,主流车辆悬架大致有被…...
JavaWeb 课堂笔记 —— 07 Web 入门、HTTP 协议和Tomcat
本系列为笔者学习JavaWeb的课堂笔记,视频资源为B站黑马程序员出品的《黑马程序员JavaWeb开发教程,实现javaweb企业开发全流程(涵盖SpringMyBatisSpringMVCSpringBoot等)》,章节分布参考视频教程,为同样学习…...
Android学习总结之OKHttp拦截器和缓存
深入理解 OkHttp 拦截器 1. 拦截器接口详解 Interceptor 接口是自定义拦截器的基础,它仅包含一个抽象方法 intercept。以下是对该方法参数和返回值的详细解释: import okhttp3.Interceptor; import okhttp3.Request; import okhttp3.Response; import…...
Activiti(五)- 工作流引擎中流程定义删除机制
1、引言 Activiti作为一款轻量级、开源的工作流和业务流程管理(BPM)平台,在实际运维过程中,随着业务发展会产生大量需要清理的流程定义,不规范的删除操作可能导致数据不一致或系统异常等问题。本文将介绍Activiti中删除流程定义的相关方式及…...
C#里使用MaterialDesign来构造自定义窗口
本例子主要就是创建一个上面的界面, 它是一个采用MaterialDesign开源库来创建的WPF程序。 先要编辑App.xaml文件: <Application x:Class="MDIXWindow.App"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http:/…...
PyTorch 模型转换为 TensorRT 引擎的通用方法
PyTorch 模型转换为 TensorRT 引擎的通用方法 在深度学习模型的部署过程中,提升推理性能是一个重要的目标。将 PyTorch 模型(.pt 文件)转换为 TensorRT 引擎(.engine 文件)是一种常用的优化手段。本文将介绍几种通用的…...
利用Ruby的Typhoeus编写爬虫程序
Typhoeus是一个基于libcurl的HTTP客户端,支持并行请求,适合高效爬取数据。用户可能想要一个简单的例子,或者需要处理更复杂的情况,比如分页、并发请求或者数据解析。 首先,我应该检查用户是否已经安装了Typhoeus。通常…...
Fabric8 Kubernetes使用介绍
Fabric8 Kubernetes Client 是一个强大的 Java 客户端库,用于与 Kubernetes 集群交互。以下是快速上手指南: 1. 添加依赖 Maven 依赖: <dependency><groupId>io.fabric8</groupId><artifactId>kubernetes-client&…...
种田游戏的综合尝试
游戏角色 详细教程 一、准备工作 1、场景重命名为Farm 2、导入资源 (1) 新建文件夹。Import Asset (2) 导入:人物、走、跑、休息 3、设置摄像机 二、制作角色预制体 1、增加角色,命名为Player,设置材质、人类角色 2、设置角色的空闲…...
uniapp解决上架华为应用市场审核要求-监听权限的申请
支持android平台全局监听权限的申请。当申请权限时,会在页面顶部显示申请权限的目的。主要解决上架华为应用市场审核要求:APP在调用终端权限时,应同步告知用户申请该权限的目的。 因为如果不提示,你上架应用市场会被打打回来 Tip…...
【结肠息肉AI论文集】ASPS: Augmented Segment Anything Model for Polyp Segmentation
摘要 息肉分割在结直肠癌诊断中起着关键作用。最近,Segment Anything Model(SAM)的出现为息肉分割带来了前所未有的潜力,其在大规模数据集上的强大预训练能力使其备受关注。然而,由于自然图像和内窥镜图像之间存在领域…...
MHA详解
MHA(Master High Availability)是一个用于 MySQL 数据库的高可用性解决方案。它基于 MySQL 主从复制机制实现,通过自动化的方式进行故障检测和自动故障转移操作,确保在 MySQL 主节点(Master)发生故障时&…...
蓝桥杯单片机刷题——通过按键触发串口传输电压值
设计要求 通过内部ADC完成电位器RB2的输出电压检测,并显示在数码管上; 通过串口向PC端返回当前检测的电压值。 按键“S4”定义为发送按键,按下按键S4,串口向PC端发送当前检测的电压值。 串口发送格式: U:1.25V\r\…...
github fatal Authentication failed for解决
常用的生成令牌方式不多介绍,参考1 得到令牌后替换url 格式为 https://你的令牌github.com/<USERNAME>/<REPO>.git查看仓库url git remote -v假如为 https://github.com/jiang/megatron.git 令牌为CCCC 则将“令牌”插入github之前 使用 git remote …...
计算机网络基础知识
🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/literature?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,…...