当前位置: 首页 > news >正文

嵌入式开发通讯协议大全(在写中)

目录

modbus RTU通讯协议:

pmbus通讯协议:


modbus RTU通讯协议:

主要应用功能:

规范了软件变量,访问功能码,给不同工程师开发的不同产品有统一的通讯标准

帧结构简单,占用带宽少,编程简单,通讯响应速度快,可以适配别家公司通讯上位机。

一主机多从机(可达247),有crc校验功能,对工业控制领域有着极好的适应性。

传输异常从设备会告知主设备

参考资料:

变量类型:

线圈(Coils)用于表示设备的开/关状态,通常控制输出(如电机启停、灯开关等)1 位读/写(可读和可写)读取:0x01
写入:0x05, 0x0F
离散输入(Discrete Inputs)用于表示设备的输入状态(如传感器、按钮等),只读1 位只读读取:0x02
保持寄存器(Holding Registers)用于存储设备的控制参数、配置数据或实时数据(如温度、湿度、速度等)16 位(2 字节)读/写(可读和可写)读取:0x03
写入:0x06, 0x10
输入寄存器(Input Registers)用于存储设备的输入数据(如传感器测量值),只读16 位(2 字节)只读读取:0x04

功能码:

0x01读取线圈(Read Coils)读取指定范围内的线圈状态(0 或 1)只读二进制数据(线圈)
0x02读取离散输入(Read Discrete Inputs)读取指定范围内的离散输入状态(0 或 1)只读二进制数据(离散输入)
0x03读取保持寄存器(Read Holding Registers)读取指定范围内的保持寄存器数据(16位寄存器的值)只读16位数据(保持寄存器)
0x04读取输入寄存器(Read Input Registers)读取指定范围内的输入寄存器数据(16位寄存器的值)只读16位数据(输入寄存器)
0x05写单个线圈(Write Single Coil)写入单个线圈的状态(0 或 1)读/写二进制数据(线圈)
0x06写单个保持寄存器(Write Single Register)写入单个保持寄存器的值(16位数据)读/写16位数据(保持寄存器)
0x0F写多个线圈(Write Multiple Coils)写入多个线圈的状态(多个 0 或 1)读/写二进制数据(线圈)
0x10写多个保持寄存器(Write Multiple Registers)写入多个保持寄存器的值(多个 16位数据)读/写16位数据(保持寄存器)

物理接口规范

  • Modbus RTU通信通常基于RS-232或RS-485串行通信标准,这些标准决定了数据传输的电气特性。为保证设备间正确的物理连接和数据传输,必须清楚接口规范。

  • RS-232:适用于短距离通信,通常用于单一设备通信。

  • RS-485:适用于长距离、高噪声环境,并且支持多从机的通信。Modbus RTU协议常用RS-485进行设备间通信。

注意点:

地址空间设计

  • 合理规划地址:Modbus协议有不同的地址空间(线圈、离散输入、保持寄存器、输入寄存器),每个设备的每种类型数据都有其特定的地址范围。需要根据项目需求合理规划每个变量的地址,避免地址冲突。

    • 线圈(Coils):地址范围 0x0000 - 0x07FF
    • 离散输入(Discrete Inputs):地址范围 0x1000 - 0x17FF
    • 保持寄存器(Holding Registers):地址范围 0x4000 - 0x47FF
    • 输入寄存器(Input Registers):地址范围 0x3000 - 0x37FF
  • 设备地址唯一性:每个从设备都应该有唯一的地址(通常为1-247),主设备通过该地址来区分不同的从设备。

通信速率和超时设置

  • 波特率设置:确保通信中主机和从机的波特率(例如9600、19200等)一致,以保证数据的稳定传输。
  • 超时设置:Modbus是一个实时协议,主机和从机之间的通信应该考虑适当的超时时间。过短的超时时间可能导致通信失败,而过长的超时时间会影响系统的响应性。
  • 重试机制:在网络不稳定时,可能会出现通讯中断,设计时要有重试机制,以防止丢失重要数据。

错误检测与处理

  • CRC校验:Modbus RTU 使用 CRC(循环冗余校验) 来检查数据传输过程中是否发生错误。确保在开发中正确实现CRC算法。
  • 错误码:Modbus协议会返回错误码,主机需要根据返回的错误码进行相应的处理。常见错误码包括:
    • 0x01:非法功能码
    • 0x02:非法数据地址
    • 0x03:非法数据值
    • 0x04:设备故障
    在编程时要确保主机能够正确识别并处理这些错误码。

数据类型和格式

  • 数据类型的转换:Modbus协议传输的数据是以16位寄存器为单位的,对于不同的应用场景,可能需要对数据进行字节顺序转换(如大端/小端)和数据类型转换(如浮点数、整型数等)。
    • 大端/小端问题:注意Modbus采用大端格式(高字节在前),但在某些平台或语言环境下,可能需要转换为小端格式(低字节在前)。例如,如果从机传输浮点数,需要将两个寄存器的数据合并为一个32位浮点数。

并发与多从机支持

  • 一主机多从机:Modbus协议支持一主机与多从机的通信,最大支持247个从机。如果项目需要同时控制多个从设备,需要特别注意:
    • 每个从设备的地址应唯一。
    • 主机需要按照一定的顺序与从设备通信,以防止总线冲突。
    • 考虑到从设备响应时间可能不同,要在程序中设置合理的延时,以确保稳定的通信。

干扰和噪声

  • 噪声干扰:Modbus RTU通常在串口上工作,可能会受到电磁干扰(EMI)。确保使用的串口线缆和连接器能够有效屏蔽干扰,同时合理布置通信线路,避免长距离传输。
  • 信号衰减:如果通信距离较长(特别是RS-485),需要考虑信号衰减的问题,可能需要使用信号增强设备(如RS-485信号放大器)。

系统可靠性

  • 冗余设计:对于重要的控制系统,考虑冗余设计。例如,在主机或从机故障时,系统能够自动切换到备用系统,保证项目的高可用性。
  • 通信丢失处理:设计通信丢失或数据丢失后的恢复机制,例如超时重试或自动重启功能,以确保设备在通讯中断后能尽快恢复正常。

pmbus通讯协议:

主要应用功能:

专门用于电源管理系统中的电源设备之间的数字化通信,如电源模块、监控芯片和电池管理系统等

基于iic硬件外设通讯,一主多从,100k~3.4mbps,可多主机(需引入仲裁机制,无优先级)

参考资料:

帧格式:

读:

START(起始条件)1起始信号,表示通信开始(SDA拉低,SCL保持高电平)。
从设备地址17位设备地址 + 1位读标志(1表示读操作)。
命令字节1主设备指定的命令字节,表示需要执行的读取操作(例如读取电压)。
ACK1发送命令字节后,接收方发送ACK应答,表示命令字节已正确接收。
数据字节N从设备返回的数据字节,通常是多个字节(例如电压、温度等)。
NACK1数据接收完毕后,主设备发送NACK,告诉从设备停止数据传输。
STOP(停止条件)1停止信号,表示通信结束,SDA从低电平跳到高电平,SCL保持高电平。

写:

START(起始条件)1起始信号,表示通信开始(SDA拉低,SCL保持高电平)。
从设备地址17位设备地址 + 1位写标志(0表示写操作)。
命令字节1主设备指定的命令字节,表示需要执行的操作(例如设置电压)。
数据字节N根据命令,传输1到多个字节的数据(例如设置输出电压)。
ACKN每个字节传输后,接收方发送ACK应答,表示该字节已正确接收。
STOP(停止条件)1停止信号,表示数据传输完毕,SDA从低电平跳到高电平,SCL保持高电平。

常见变量定义表格

变量名称作用命令字节内存大小单位说明
VOUT (输出电压)电源模块的输出电压0x212毫伏(mV)包含低字节和高字节,用于设置或读取电源的输出电压。
IOUT (输出电流)电源模块的输出电流0x222毫安(mA)包含低字节和高字节,用于设置或读取电源的输出电流。
VIN (输入电压)电源模块的输入电压0x232毫伏(mV)包含低字节和高字节,用于设置或读取电源的输入电压。
POUT (输出功率)电源模块的输出功率0x242毫瓦(mW)包含低字节和高字节,用于读取电源的输出功率。
TEMP (温度)电源模块的温度0x862摄氏度(℃)包含低字节和高字节,表示电源的当前温度值。
FAULT_STATUS (故障状态)电源模块的故障状态0x781无单位一个字节的状态字,表示电源模块的当前故障状态。
STATUS_WORD (状态字)电源模块的综合状态,包括过流、过压、欠压等故障信息0x032无单位包含低字节和高字节,表示电源的状态(包括故障标志)。
CONTROL (控制)电源的控制命令,开启、关闭或重启电源等操作0x011无单位一个字节,表示电源的控制命令,如启动、关闭电源等操作。
TON_DELAY (开机延迟)电源的开机延迟时间0x312毫秒(ms)包含低字节和高字节,表示开机延迟的时间,单位为毫秒。
TOFF_DELAY (关机延迟)电源的关机延迟时间0x322毫秒(ms)包含低字节和高字节,表示关机延迟的时间,单位为毫秒。
VOUT_OV_FAULT_LIMIT (输出电压过压保护限制)设置输出电压的过压保护阈值0x452毫伏(mV)包含低字节和高字节,用于设置输出电压的过压保护阈值。
VOUT_UV_FAULT_LIMIT (输出电压欠压保护限制)设置输出电压的欠压保护阈值0x462毫伏(mV)包含低字节和高字节,用于设置输出电压的欠压保护阈值。
IOUT_OC_FAULT_LIMIT (输出电流过流保护限制)设置输出电流的过流保护阈值0x472毫安(mA)包含低字节和高字节,用于设置输出电流的过流保护阈值。
IOUT_UC_FAULT_LIMIT (输出电流欠流保护限制)设置输出电流的欠流保护阈值0x482毫安(mA)包含低字节和高字节,用于设置输出电流的欠流保护阈值。
VIN_OV_FAULT_LIMIT (输入电压过压保护限制)设置输入电压的过压保护阈值0x492毫伏(mV)包含低字节和高字节,用于设置输入电压的过压保护阈值。
VIN_UV_FAULT_LIMIT (输入电压欠压保护限制)设置输入电压的欠压保护阈值0x4A2毫伏(mV)包含低字节和高字节,用于设置输入电压的欠压保护阈值。
VOUT_OV_WARN_LIMIT (输出电压过压警告阈值)设置输出电压的过压警告阈值0x592毫伏(mV)包含低字节和高字节,用于设置输出电压的过压警告阈值。
VOUT_UV_WARN_LIMIT (输出电压欠压警告阈值)设置输出电压的欠压警告阈值0x5A2毫伏(mV)包含低字节和高字节,用于设置输出电压的欠压警告阈值。
IOUT_OC_WARN_LIMIT (输出电流过流警告阈值)设置输出电流的过流警告阈值0x5B2毫安(mA)包含低字节和高字节,用于设置输出电流的过流警告阈值。
IOUT_UC_WARN_LIMIT (输出电流欠流警告阈值)设置输出电流的欠流警告阈值0x5C2毫安(mA)包含低字节和高字节,用于设置输出电流的欠流警告阈值。
MFR_TEMP (制造商温度)读取设备的温度,通常与故障或状态有关0x862摄氏度(℃)包含低字节和高字节,用于查询设备的温度。
MFR_VIN (制造商输入电压)读取设备的输入电压值0x872毫伏(mV)包含低字节和高字节,用于查询设备的输入电压。
MFR_VOUT (制造商输出电压)读取设备的输出电压值0x882毫伏(mV)包含低字节和高字节,用于查询设备的输出电压。
MFR_IOUT (制造商输出电流)读取设备的输出电流值0x892毫安(mA)包含低字节和高字节,用于查询设备的输出电流。
MFR_POWER (制造商功率)读取设备的输出功率值0x8B2毫瓦(mW)包含低字节和高字节,用于查询设备的输出功率。

仲裁机制:

在iic多主机通信时,因为总线同一时间内只能有一个设备在发数据,这个时候就需要引入仲裁机制,在多设备同时通讯时,最后只留下1个设备,其余设备下次再竞争。简单来说,假设有AB两个设备同时往数据线SDA上发送数据,它们都会实时监控线路上的电平,来确保数据是否发送正确,当A设备发送1,B设备发送0,这时SDA上就会是0(因为低电平有更强的驱动能力),此时A设备就会知道数据线有其他设备在用,将不再发送数据,等待下一次数据线空闲,即使有n多个设备在竞争,都是从头一个一个位开始竞争,谁出0时,其他出1的都自动退出竞争(等待下一次),直到只剩一个设备在发数据。

仲裁的详细步骤如下:

  1. 数据传输的启动

    • 在I²C总线上的多个主设备同时尝试发送数据时,它们都会生成时钟信号(SCL)并开始通过SDA线发送数据位(bit)。
  2. 总线监控

    • 每个主设备都会在每一位数据发送时实时监控SDA线的电平,确保它发送的数据与总线上实际的电平一致。
    • SDA线的电平是由主设备驱动的。当主设备向总线发送数据时,它会拉低(0)或拉高(1)SDA线。
  3. 发生冲突时的检测

    • 如果一个主设备试图向总线发送1(拉高SDA),而另一个主设备却试图发送0(拉低SDA),就发生了冲突。
    • 监测到冲突:在这个过程中,每个主设备都会监听到SDA线上的实际状态。如果它发送的数据与SDA线的状态不一致,说明有其他主设备正在控制总线,因此发生了冲突。
  4. 决定仲裁优先级

    • SDA线上的状态决定优先级:在I²C协议中,低电平(0)具有更高的优先级,原因是SDA线由主设备拉低时,电流驱动较强。
    • 如果一个主设备发现SDA线上的电平与自己预期的不同,它就会停止数据传输,放弃对总线的控制,并让其他主设备继续控制总线。
  5. 放弃与重试

    • 当发生冲突时,失败的主设备会立刻停止传输,退出当前的总线控制,并等待一段随机时间后重新尝试访问总线。
    • 胜出的主设备将继续占用总线,完成其数据传输。

iic通讯原理:

I²C通信基于主从(Master-Slave)模型,通信过程中包含两个主要角色:

  • 主设备(Master):发起通信、控制时钟和数据流的设备。
  • 从设备(Slave):响应主设备请求的设备。

I²C的时序

I²C的数据传输是基于时钟(SCL)控制的同步通信。数据(SDA)在时钟的控制下同步传输,时钟由主设备提供。具体的数据传输过程如下:

  1. 起始条件(START)

    • 主设备拉低 SDA 线,在 SCL 高电平时发出起始信号。
    • 起始条件标志着通信的开始。
  2. 从设备地址和读/写操作

    • 主设备会发送一个包含从设备地址和读/写标志位的数据。设备地址通常是7位或10位(通常是7位)。
    • 读/写标志位(R/W):0 表示写操作,1 表示读操作。
  3. 数据传输

    • 数据按字节(8位)进行传输,SDASCL 的上升沿采样,每传输一个字节时都要保证 SDA 在时钟的上升沿之前保持稳定。
  4. 应答信号(ACK/NACK)

    • 每次发送一个字节后,接收方(无论是主设备还是从设备)必须发送一个应答信号 ACKNACK,表示数据是否成功接收。
  5. 停止条件(STOP)

    • 主设备通过拉高 SDA 线,在 SCL 高电平时发出停止信号,表示通信结束。

什么是ACK和NACK

ACK(Acknowledge)和 NACK(No Acknowledge)是I²C通信中至关重要的信号,它们在每个字节传输后,接收方(无论是主设备还是从设备)都会对接收到的字节进行确认。

ACK(应答信号)

ACK 是接收方对发送的字节的确认,表示数据字节已成功接收。具体来说:

  • ACK信号 是通过 SDA 线在 SCL 时钟上升沿时传递的。
  • 在接收到数据字节后,接收方会将 SDA 拉低(0),表示已正确接收数据。

过程:

  • 主设备或从设备发送完一个字节的数据后,接收方(无论是主设备还是从设备)必须发送 ACK 信号。
  • 如果接收方已经接收到数据并准备好接收下一个字节,SDA 被拉低。

例子:

  • 主设备发送设备地址后,从设备返回 ACK,表示设备地址已接收并准备好与主设备通信。
  • 主设备发送数据字节后,从设备返回 ACK,表示数据字节已成功接收。

NACK(不应答信号)

NACK 是接收方对数据传输的否定响应,表示接收到的字节没有被正确接收,或者接收方已经不再准备接收更多数据。通常,NACK 用来标识通信结束或数据传输失败。

过程:

  • 接收方在接收到字节后,拉高 SDA(1)表示 NACK,表明不再接收数据。
  • 在读取数据时,主设备通过发送 NACK 信号来结束数据接收,指示接收过程已经完成。

例子:

  • 主设备在读取数据时,读取完所有期望的字节后,会发送 NACK,表示不再继续读取。
  • 如果从设备出现错误或无法接收数据,可能会发送 NACK

详细时序示例:如何理解ACK/NACK

我们通过具体的时序图来理解 ACKNACK 的工作原理。以下是数据传输的时序图:

ACK的时序

假设主设备向从设备发送数据字节,接收方(从设备)通过 ACK 确认接收到数据字节。

SCL: ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑

SDA: → → → → → ← ← → 数据字节 ACK

  • SCL:时钟线(每个上升沿同步采样数据)。
  • SDA:数据线。
  • 数据字节:主设备或从设备发送的8位数据。
  • ACK:接收方通过将 SDA 拉低来发送 ACK(表示字节已正确接收)。

NACK的时序

如果主设备或从设备不再需要接收更多数据,它会通过 NACK 来终止数据传输。

SCL: ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑

SDA: → → → → → → → ↑ 数据字节 NACK

  • NACK:接收方通过将 SDA 拉高来发送 NACK(表示不再接收数据)。

典型读写操作

在主设备读取数据的情况下,主设备会在最后一个数据字节后发送 NACK,然后发送 STOP 信号,结束通信。

主设备读取数据的过程:

  1. 发送命令字节(例如设备地址),接收方发送 ACK
  2. 读取数据字节,接收方发送 ACK,表示继续传输数据。
  3. 读取完最后一个字节,接收方发送 NACK,表示结束读取。
  4. 主设备发送 STOP 信号,表示通信结束。

注意点:

1. 协议的兼容性和设备选择

  • 设备兼容性:首先确保所选的PMBus设备支持所需的命令和功能。不同的电源管理设备可能实现了不同的PMBus命令集或具有不同的功能扩展。
  • 地址设置:PMBus设备通常通过硬件配置(如跳线或拨码开关)或软件配置来设置设备地址。确保主设备能够正确识别从设备的地址。
  • 支持的PMBus版本:PMBus协议有多个版本(如1.1、1.2、2.0等),不同版本的设备支持的命令集和功能可能有所不同。确保你的主设备和从设备兼容同一版本。

2. 通信速率和时序

  • 时钟频率(SCL):PMBus通常基于I²C通信协议,因此时钟频率需要考虑通信速率的要求。I²C的标准频率为100 kHz(标准模式),快速模式为400 kHz。如果设备支持高速通信,可能需要选择合适的速率。
  • 时序和响应时间:PMBus的通信帧可能需要一定的时间来处理和响应。在进行通信时,需要考虑每个命令的处理时间以及从设备的响应时间,尤其是在高速传输时,确保每个数据字节都能被正确读取。

3. 电源噪声和信号完整性

  • 电源噪声:PMBus设备通常涉及电源管理功能,电源噪声可能会干扰信号传输,尤其是在传输较长距离或存在较强电磁干扰的环境中。确保系统设计考虑到电源去耦和滤波,以避免噪声影响通信。
  • 信号完整性:在高频率下,I²C信号可能受到串扰或衰减的影响,特别是长线缆传输时。可以采用合理的布线和信号调节(例如使用终端电阻)来保证信号质量,避免通信错误。

4. 数据完整性和错误处理

  • 数据校验:PMBus协议支持使用校验和来确保数据的完整性。在发送命令或数据时,检查从设备是否返回ACK应答,以确保数据传输没有丢失或损坏。
  • 错误处理:在实际应用中,可能会遇到通信失败、设备无响应等情况。需要在代码中实现错误检测和重试机制,确保设备在发生通信异常时能够恢复正常工作。
  • 超时和重试机制:在通信中,如果没有及时收到ACK,或者设备无响应,可以设计超时和重试机制,避免系统因设备故障或信号丢失导致功能丧失。

5. PMBus命令和数据格式

  • 命令集:确保使用的PMBus命令集符合所选设备的需求。不同的设备可能会支持不同的命令集,常见的如读取电压、设置电流、读取温度等。检查设备文档,了解每个命令的格式和数据长度。
  • 数据字节的解释:PMBus中的每个命令可能会返回多个字节的数据(如电压、电流、功率等),每个数据字节通常采用二进制编码形式。需要理解如何解析这些数据,并将其转换为物理量(例如电压、功率等)。

6. 通信协议细节

  • I²C与PMBus的关系:PMBus是基于I²C协议实现的,因此你需要理解I²C的基本通信原理,尤其是ACK/NACK的处理机制、起始/停止信号等。在处理PMBus命令时,I²C的时序和数据传输规则同样适用。
  • 设备地址和读/写操作:PMBus使用7位设备地址(加上读/写标志位)。确保在发送命令时正确指定目标设备的地址,并且在读取数据时使用正确的读/写操作标志。
  • 多设备支持:如果系统中有多个PMBus设备,需要确保每个设备的地址唯一且正确设置。并且在使用多个设备时要注意避免数据冲突。

7. 电源管理和效率

  • 功率管理:PMBus设备通常涉及功率转换和管理,在设计时需要确保每个设备的电源输入稳定。设计中还需要考虑如何通过PMBus命令优化功率效率,例如调整电压、电流等参数。
  • 状态监控和报警:许多PMBus设备具备状态监控和报警功能,如温度、过流、过压等。可以通过PMBus命令读取设备的状态信息,获取设备的健康状况,并进行相应的调节或报警处理。

8. 主设备与从设备的同步

  • 主设备同步:作为主设备,你需要控制整个PMBus通信的时序和数据流。在通信过程中要确保每个命令的发送顺序和数据的读取都按照协议规范进行。
  • 从设备响应:从设备需要在接收到命令后及时返回正确的响应。如果从设备响应错误或没有返回,可能需要进行重试或错误处理。

9. 调试和测试

  • 使用调试工具:在PMBus通信过程中,调试工具如逻辑分析仪、示波器等非常重要。通过这些工具可以监控I²C总线的通信时序,检查数据传输的正确性和信号质量。
  • 模拟和测试:在开发过程中,使用模拟器来模拟PMBus设备和主设备之间的通信,可以更容易地进行开发和调试。通过模拟可以确保不同命令的执行和响应符合预期。

10. 文档和规格说明书

  • 设备手册:确保阅读设备的规格说明书,理解设备支持的命令集、数据格式、寄存器地址等。每个PMBus设备的操作可能有所不同,文档提供了命令执行和数据解析的详细信息。
  • 协议版本:检查所用设备支持的PMBus协议版本(如1.2、2.0等),不同版本之间可能有不同的功能和兼容性要求。

相关文章:

嵌入式开发通讯协议大全(在写中)

目录 modbus RTU通讯协议: pmbus通讯协议: modbus RTU通讯协议: 主要应用功能: 规范了软件变量,访问功能码,给不同工程师开发的不同产品有统一的通讯标准 帧结构简单,占用带宽少&#xff0c…...

webpack 4 升级 webpack 5

升级至最新的 webpack 和 webpack-cli npm run build 报错, unknown option -p 解决方案: 改成 --mode production npm run build 报错 unknown option --hide-modules 解决方案:直接移除 npm run build 报错:TypeError: Cannot a…...

oneplus3t-lineageos-16.1编译-android9, oneplus3t-lineage-14编译-android7

oneplus3t-lineage-14编译-android7 1 清华linageos镜像 x lineage-14.1-20180223-nightly-oneplus3-signed.zip ntfs分区挂载为普通用户目录 , ext4分区挂载为普通用户目录 bfsu/lineageOS镜像 ts/lingeageOS镜像 oneplus3/lineage-build-simple-manual.md, manifest-p…...

HTML中最基本的东西

本文内容的标签,将是看懂HTML的最基本之基本 ,是跟您在写文章时候一样内容。一般想掌握极其容易,但是也要懂得如何使用,过目不忘,为手熟尔。才是我们学习的最终目的。其实边看边敲都行,或者是边看边复制粘贴…...

<OS 有关>Ubuntu 24 安装 openssh-server, tailscale+ssh 慢增加

更新日志: Created on 14Jan.2025 by Dave , added openssh-server, tailescape Updated on 15Jan.2025, added "tailescape - tailscape ssh" 前期准备: 1. 更新可用软件包的数据库 2. 升级系统中所有已安装的软件包到最新版本 3. 安装 cur…...

神经网络常见操作(卷积)输入输出

卷积 dimd的tensor可以进行torch.nn.Convnd(in_channels,out_channels),其中nd-1,d-2对于torch.nn.Convnd(in_channels,out_channels),改变的是tensor的倒数n1维的大小 全连接 使用torch.nn.Linear(in_features,out_features,bias)实现YXWT b,其中X 的形状为 (ba…...

25/1/16 嵌入式笔记 STM32F108

输入捕获 TIM_TimeBaseInitTypeDef TIM_TimeBaseStruct; TIM_TimeBaseStruct.TIM_Period 0xFFFF; // 自动重装载值 TIM_TimeBaseStruct.TIM_Prescaler 71; // 预分频值 TIM_TimeBaseStruct.TIM_ClockDivision 0; TIM_TimeBaseStruct.TIM_CounterMode TIM_CounterMode_Up…...

mac 安装 node

brew versions node // 安装 node brew versions node14 // 安装指定版本 卸载node: sudo npm uninstall npm -g sudo rm -rf /usr/local/lib/node /usr/local/lib/node_modules /var/db/receipts/org.nodejs.* sudo rm -rf /usr/local/include/node /Users/$USER/.npm su…...

mysql常用运维命令

mysql常用运维命令 查看当前所有连接 -- 查看当前所有连接 SHOW FULL PROCESSLIST;说明: 关注State状态列,是否有锁。如果大量状态是waiting for handler commit检查磁盘是否占满关注Time耗时列,是否有慢查询关注Command列,如果…...

正则表达式学习网站

网上亲测好用的网站: Regexlearn 这个网站可以从0开始教会正则表达式的使用。 mklab 包含常用表达式,车次,超链接,号码等提取。...

gradle,adb命令行编译备忘

追踪依赖(为了解决duplicateClass…错误) gradlew.bat app:dependencies > dep-tree.txt # 分析dep-tree.txt的依赖结构,找到对应的包,可能需要做exclude控制,或者查看库issueverbose编译(我一直需要verbose) gradlew.bat assembleDebug -Dhttps.pr…...

C++:工具VSCode的编译和调试文件内容:

ubuntu24.04, vscode 配置文件 C 的环境 下载的gcc,使用命令为 sudo aptitude update sudo aptitude install build-essential -f- sudo: 以超级用户权限运行命令。 - aptitude: 包管理工具,用于安装、更新和删除软件包。 - install: 安装指…...

SpringMVC Idea 搭建 部署war

1.创建 Idea项目 使用Maven模板 创建 webApp模板项目 2.导入依赖 <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 http://ma…...

YOLOv10-1.1部分代码阅读笔记-loaders.py

loaders.py ultralytics\data\loaders.py 目录 loaders.py 1.所需的库和模块 2.class SourceTypes: 3.class LoadStreams: 4.class LoadScreenshots: 5.class LoadImagesAndVideos: 6.class LoadPilAndNumpy: 7.class LoadTensor: 8.def autocast_list(source…...

Windows的Redis查看自己设置的密码并更改设置密码

查看密码 由于我的Redis安装很久了&#xff0c;所以忘记是否有设置密码&#xff0c;查看步骤如下&#xff1a; 启动redis&#xff0c;启动流程可以看这篇文章&#xff1a;https://blog.csdn.net/changyana/article/details/127679871 在redis安装目录下打开redis-cli.exe&…...

【Linux】sed编辑器二

一、处理多行命令 sed编辑器有3种可用于处理多行文本的特殊命令。 N&#xff1a;加入数据流中的下一行&#xff0c;创建一个多行组进行处理&#xff1b;D&#xff1a;删除多行组中的一行&#xff1b;P&#xff1a;打印多行组中的一行。 1、next命令&#xff1a;N 单行next命…...

docker 部署 Kafka 单机和集群

一、准备工作 安装 Docker 确保本机已安装 Docker。可以通过以下命令检查 Docker 是否已安装&#xff1a;docker --version如果未安装&#xff0c;可以访问 Docker 官网下载并安装 Docker Desktop&#xff08;Windows 和 Mac&#xff09;或使用包管理器安装&#xff08;Linux&…...

PHP语言的软件开发工具

PHP语言的软件开发工具 在当今数字化的时代&#xff0c;软件开发已经成为一种常见的职业。无论是企业级应用、网站开发还是移动应用&#xff0c;开发者们都需要用到各种各样的工具。PHP作为一种广泛使用的服务器端脚本语言&#xff0c;因其简单、灵活与强大的功能&#xff0c;…...

前端【3】--CSS布局,CSS实现横向布局,盒子模型

盒子分类 1、块级盒子 2、内联级盒子 3、内联块级盒子 4、弹性盒子 5、盒子内部分区 方法一&#xff1a;使用 float 普通盒子实现横向布局 方法二&#xff1a;使用 display: inline-block 内联块级元素实现横向布局 方法三&#xff1a;使用弹性盒子 flexbox&#xff0…...

SQL语句IN和OR的区别

在SQL中&#xff0c;IN和OR都用于筛选条件&#xff0c;但它们的用途和性能上有一些区别。以下是两者的对比&#xff1a; 1. 语法 IN SELECT * FROM table_name WHERE column_name IN (value1, value2, value3);IN用于检查某列的值是否在一个给定的值列表中。 OR SELECT * FRO…...

OCP使用中的常见问题与解决方法

OCP的常见问题 页面卡顿&#xff1a; 遇到页面卡顿的问题时&#xff0c;首先需要区分是全局性的卡顿&#xff0c;即所有页面都出现延迟或响应缓慢&#xff0c;还是仅限于特定的监控页面。 监控数据看不到: 需要明确是全部数据都无法查看&#xff0c;还是仅限于特定集群的数…...

Git 版本控制:.gitignore 文件完全指南

.gitignore 文件是 Git 版本控制系统中的一个重要配置文件&#xff0c;用于告诉 Git 哪些文件和目录应该被忽略&#xff0c;不需要纳入版本控制。以下是关于 .gitignore 的完整笔记。 基本概念 .gitignore 文件可以放在项目的任何目录下&#xff0c;其作用范围包括所在目录及…...

STM32 FreeRTOS 介绍

目录 什么是裸机开发 什么是操作系统 通用操作系统 实时操作系统 FreeRTOS简介 FreeRTOS发展历史 FreeRTOS优势 FreeRTOS特点 什么是裸机开发 裸机开发指的是在没有操作系统&#xff08;OS&#xff09;或者其他高级软件支持的情况下&#xff0c;直接在裸机硬件上进行软…...

在 Azure 100 学生订阅中新建 Ubuntu VPS 并部署 Mastodon 服务器

今天想和大家分享一下如何在 Azure 的 100 学生订阅中&#xff0c;创建一台 Ubuntu VPS&#xff0c;并通过 Docker 部署 Mastodon 服务器。Mastodon 是一个开源的社交网络平台&#xff0c;允许用户创建自己的实例&#xff0c;类似于 Twitter&#xff0c;但更加去中心化。Docker…...

【Linux网络编程】序列化与反序列化

目录 一&#xff0c;序列化和反序列化的说明 二&#xff0c;Jsoncpp库的介绍 三&#xff0c;Jsoncpp库的使用 3-1&#xff0c;Json::Value类 3-2&#xff0c;Json::StreamWriter类 3-3&#xff0c;Json::CharReader类 一&#xff0c;序列化和反序列化的说明 序列化与反…...

Spring Boot中的自动配置原理是什么

Spring Boot 自动配置原理 Spring Boot 的自动配置机制基于 条件化配置&#xff0c;通过 EnableAutoConfiguration 注解来启用。自动配置的核心原理是 基于类路径和环境条件来推断所需要的配置&#xff0c;Spring Boot 会根据项目中引入的依赖和当前环境来自动装配相关的配置项…...

大模型相关资料、基础技术和排行榜

大模型排行榜 测试集CEval中文多个学科测试集排名MMLU大规模多任务语言理解英文排名&#xff0c;介绍斯坦福排行榜Math-VMath-VistaOpen LLMs LeaderboardCMMLU 大模型数据集 标题简介19个大模型常用的评估数据集和训练数据集汇总19个大模型常用的评估数据集和训练数据集汇总最…...

如何安装cnpm

今天尝试用npm install安装一个项目的依赖&#xff0c;但是无论如何都不能完成&#xff0c;等待时间非常久&#xff0c;所以同事推荐了cnpm&#xff0c;确实非常好用&#xff0c;所以推荐了出来&#xff0c;希望能给大家带来帮助。 cnpm 是中国淘宝团队提供的一个 npm 镜像工具…...

正则表达式 匹配特定字符后的所有字符

在处理文本数据时&#xff0c;正则表达式&#xff08;RegularExpressions&#xff0c;简称Regex&#xff09;是一种非常强大的工具&#xff0c;它可以用来搜索、匹配和替换文本中符合特定模式的字符串。 首先&#xff0c;明确我们的目标是匹配完整的URL&#xff0c;并获取它之…...

计算机网络 (44)电子邮件

一、概述 电子邮件&#xff08;Electronic Mail&#xff0c;简称E-mail&#xff09;是因特网上最早流行的应用之一&#xff0c;并且至今仍然是因特网上最重要、最实用的应用之一。它利用计算机技术和互联网&#xff0c;实现了信息的快速、便捷传递。与传统的邮政系统相比&#…...