- 博客(106)
- 收藏
- 关注
原创 网口通讯涉及到的速率分析
W5500通信速率分析与吞吐量计算报告摘要 报告基于GD32MCU(200MHz)与W5500以太网控制器的SPI通信分析。当前SPI时钟配置为25MHz(8分频),远低于W5500支持的80MHz上限,确保稳定通信。 理论吞吐量:25MHz SPI下,大包(2048字节)效率达99.8%(24.95Mbps),但小包(1字节)效率仅20%(5Mbps)。实际吞吐量受软件轮询延迟影响(约2μs/字节),降至4Mbps左右。 优化建议:启用SPI DMA可减少CPU开销,吞吐量可提升至15-20Mbps;或增
2026-06-21 11:27:43
412
原创 Linux-知识点1-$-POSIX等
摘要:POSIX是IEEE制定的操作系统接口标准,为UNIX系统提供统一的API规范,包含文件操作、进程控制等功能。其进程间通信机制包括消息队列、共享内存等接口。在Bash中,$符号用于变量引用和命令替换。编译时链接库(-lxxx)必须放在目标文件后,因链接器按顺序解析依赖。注意事项包括:POSIX需包含对应头文件,Bash变量赋值无需$符号,动态库链接需正确排列参数。
2026-05-23 23:26:19
224
原创 Linux-实践
本文介绍了一个基于C语言的ECU控制程序实现,包含日志记录、JSON配置和定时器功能。程序通过Makefile构建,使用GCC编译器并链接pthread、数学库等。主程序实现了信号处理、日志初始化、定时器设置等功能,支持周期性3秒定时触发。程序运行时会记录日志到指定路径,并通过信号处理实现优雅退出。Makefile定义了编译规则、源文件列表和清理操作,支持调试输出和并行构建。实验现象验证了定时器的周期性触发功能,程序能够正确处理中断信号并记录运行状态。
2026-05-17 22:36:49
986
1
原创 常见通信协议对比表(串口 / I2C / SPI / CAN / Modbus RTU / Modbus TCP)
通信协议特性对比摘要:UART全双工异步,简单通用但抗扰弱;RS485半双工异步,差分信号抗扰强;I2C半双工同步,多主多从速率低;SPI全双工同步,高速板级通信;CAN半双工异步,多主高可靠;Modbus RTU基于RS485半双工,工业通用;Modbus TCP全双工同步,基于以太网。全双工可同时收发,半双工分时传输;同步协议有时钟线,异步需约定波特率。物理层可能改变协议特性,如UART+RS485变为半双工。
2026-04-12 18:19:18
687
原创 Linux记录过程
Linux 线程:互斥锁 + 条件变量 必须搭配使用的核心原因条件变量本身不具备 “保护共享资源” 的能力,它只负责 “等待 + 唤醒”;互斥锁负责 “保护共享资源”,两者缺一不可。
2026-04-11 21:45:26
74
原创 Vscode/MinGW-64编译
MinGW-64是Windows平台的64位GNU工具链,包含GCC编译器、Binutils工具和运行时库,可直接生成原生Windows程序。GCC作为核心组件支持多语言编译优化。MinGW-64对GCC进行适配,使其无需POSIX层即可运行。安装步骤包括 下载,配置PATH环境变量及验证版本。示例展示了使用VSCode编译C程序生成main.exe的过程。
2026-03-14 13:16:30
323
原创 MobaXterm 成功连接 Ubuntu 虚拟机
摘要:MobaXterm成功通过SSH连接Ubuntu 20.04虚拟机,验证了NAT网络配置正确。连接后可在MobaXterm终端执行所有Ubuntu命令(包括文件管理、软件安装等),效果与本地终端完全一致。主要优势在于集成功能:左侧SFTP面板支持拖拽文件传输,支持X11图形界面显示,提供多标签管理等增强功能。建议将MobaXterm作为主力操作界面,比虚拟机本地终端更高效,仅需在调试网络等问题时切换至Ubuntu本地终端。整个环境已完美配置,可高效实现跨系统工作和文件管理。
2026-03-11 16:23:25
654
原创 AT24C128C EEPROM 内存组织与操作规则
写入操作必须限制在同一页面内,跨页写入需拆分为多次操作。读取操作无页面限制,支持任意地址连续读取。即一次连续写入的数据必须全部位于同一个64字节的页面内。如果待写入数据的首尾地址跨越了页面边界,则必须将其拆分为两次操作。典型电路设计中,WP引脚默认通过上拉电阻接VCC实现写保护状态。您提到的“I2C里面默认使用写保护”通常意味着:在常见的电路设计中,读取操作无此限制,可以连续读取任意地址,不受页面边界约束。该芯片内存被划分为256页,每页大小为64字节。 任何写入操作,芯片进入写保护状态。
2026-03-11 10:23:15
287
原创 如何使用vscod看bin文件/hex
拖入Bin文件/Hex文件即可。需要安装Hex Editor。先拖入Bin文件/Hex文件。输入 >Hex Editor。
2026-03-05 17:03:30
113
原创 ARP协议完整工作流程
本文详细解析了ARP协议的工作流程:1)设备A通过子网判断确认与B同属一个局域网;2)A广播ARP请求查询B的MAC地址;3)B单播回应ARP应答;4)A将IP-MAC映射存入缓存后开始通信。文章包含实用命令手册(Windows/Linux/macOS)、安全防护措施和ARP报文格式详解,强调ARP作为局域网通信基础协议的重要性,其"广播请求-单播响应"机制和缓存特性有效提升了网络效率。理解ARP协议是网络故障排查和优化的关键基础。
2026-01-30 11:11:12
859
原创 ARP 过程详解
若无 192.168.1.20 的 MAC 记录,触发 ARP 请求。交换机收到广播帧后,向所有端口(除接收端口)转发,确保全网设备接收。确认同一子网,直接通信无需网关。
2026-01-30 09:53:10
342
原创 MD5(Message-Digest Algorithm 5)
MD5是一种128位单向哈希算法,用于生成数据的"指纹"。它将任意长度输入转换为32位十六进制字符串,具有固定长度输出、不可逆性、雪崩效应和抗碰撞性等特性。算法步骤包括数据填充、初始化缓冲区、主循环处理和结果输出。MD5常用于数据校验、密码存储和文件去重,但由于存在碰撞漏洞,已不建议用于安全场景。实际应用中可使用OpenSSL等库实现MD5计算,更安全的替代方案是SHA-256或SHA-3算法。
2026-01-22 10:02:01
724
原创 Modbus TCP 数据结构(发送和返回/读/写)
本文详细解析ModbusTCP协议的字节级帧结构,重点说明MBAP头和PDU的精确组成。关键内容包括:各功能码(0x03读保持寄存器、0x04读输入寄存器、0x06写单个寄存器、0x10写多个寄存器)的请求/响应帧格式,错误响应机制,以及字节位置速查表。特别强调长度字段的计算方法(从单元标识符开始到报文结束的总字节数),并提供调试检查清单和常见问题定位指南。通过具体示例演示字节级分析技巧,帮助开发者精确构造帧结构、快速排查通信问题。
2026-01-18 20:23:05
1336
原创 网络通信基础知识
本文总结了IP网络通信的核心知识点:1. IP地址作为设备唯一标识,子网掩码区分网络/主机地址,网关负责跨网络转发数据。2. 网络地址通过IP与掩码按位与计算得出,判断通信是否需经网关。3. 详解子网掩码分类及可用主机数计算(需减去网络/广播地址)。4. 通信决策流程:同网络直接通信,不同网络需经网关。5. 提供三种网络互通方案,推荐修改IP保持同网段的最优方案。6. 注意事项包括掩码与CIDR对应、网关条件、广播地址计算等。7. 给出家庭网络和点对点连接的实际配置建议,强调合理规划子网的重要性。
2026-01-13 13:38:55
661
原创 大端和小端存储
摘要:大端存储将数据的最高有效字节存放在最低内存地址(如0x1234存储为[0x12,0x34]),适用于网络传输和PowerPC等架构;小端存储则相反(存储为[0x34,0x12]),常见于x86架构。示例中0xABCD若按大端存储,地址0x1000存0xAB,0x1001存0xCD
2026-01-13 11:17:45
120
原创 MODBUS 和CAN通信协议的对比
本文对比分析了CAN总线和Modbus协议的核心差异。CAN总线采用多主/对等通信模式,支持非破坏性仲裁和硬件级错误检测,适合高实时性场景;Modbus采用主从模式,单帧数据量大,适合集中监控系统。文章还深入解析了CAN总线的两层确认机制(硬件ACK和应用层回复)以及2.0A与2.0B版本的关键区别(11位vs29位标识符)。最后针对不同应用场景提供了协议选型建议:Modbus适合大数据量系统集成,CAN总线更适用于高实时性控制和分布式智能系统。
2025-12-24 16:25:29
1457
原创 F280025的时钟设置
本文介绍了F280025C芯片的时钟配置和定时器中断设置方法。主要内容包括:1)通过SysCtl_setClock()和SysCtl_setLowSpeedClock()配置主时钟和低速外设时钟;2)如何查看实际时钟频率,包括检查device.h定义、运行时获取和CCS工具查看;3)定时器中断配置,重点分析了ConfigCpuTimer()函数参数与系统时钟(SYSCLK)的关系,强调定时器频率参数必须与DEVICE_SYSCLK_FREQ严格匹配;4)提供了定时器周期计算公式和验证方法。文中还解答了常见问
2025-10-26 22:56:17
1059
原创 TMSF280039C新建工程
本文介绍了基于TMS320F280039/049系列芯片新建CCS工程的详细步骤。首先在workspace下创建工程模板,选择EABI格式;然后建立文件目录结构,包括common、driverlib、headers等SDK文件夹,以及自定义的Application和Drivers目录;接着配置包含路径和编译选项,根据调试/发布模式选择不同的链接文件(flash/ram);最后强调两种模式下都必须正确设置头文件路径。文章重点说明了代码移植时需注意索引路径的绝对地址问题,以及如何通过条件编译实现不同运行环境的配
2025-10-25 10:56:06
832
原创 按键处理函数 短按/长按/长按重复等
本文介绍了按键检测代码的重构方案,主要改进包括:1)将Key_Tick函数从定时器中断中提取,改为基于时间差的方式执行;2)使用Timer_GetMsDif实现20ms周期检测;3)优化变量类型和常量定义;4)重命名函数提高可读性。重构后的代码降低了中断负载,提供更精确的时间控制,具有更好的可移植性和更清晰的代码结构。使用时需在主循环中定期调用Key_Scan(),并通过Key_GetNum()获取按键事件,系统执行频率应高于20ms以保证检测实时性。
2025-10-17 15:21:00
447
原创 GD32F107 CAN回环测试
本文介绍了一个基于GD32F10x的CAN回环测试实现方案。测试代码通过初始化CAN控制器为回环模式(CAN_LOOPBACK_MODE),实现了自发自收功能:1) 使用500Kbps波特率发送预设的测试数据(ID=0x123,8字节);2) 立即接收并验证数据一致性;3) 通过SEGGER RTT输出测试结果。硬件方面,回环模式无需外部连接,信号在控制器内部闭环。文章详细说明了代码结构、测试流程和验证方法,包括波特率配置、数据收发函数实现,以及成功/失败的判断条件,为CAN驱动开发提供了完整的自测试方案。
2025-10-17 13:54:52
788
原创 CAN波特率/CAN总线采样点/CAN位时间(Bit Time)
采样点(Sample Point)是指在一个CAN位时间内,控制器实际读取总线电平状态的时间点。正确的采样点设置对可靠通信至关重要。
2025-10-16 09:07:38
4110
原创 Modbus RTU 数据结构(发送和返回/读/写)
本文介绍了Modbus RTU协议的两种典型操作:读保持寄存器(功能码0x03)和写单个寄存器(功能码0x06)。详细说明了请求帧和响应帧的格式,包括设备地址、功能码、寄存器地址、数据值、CRC校验等字段的字节数和示例值。重点解析了CRC校验计算规则、寄存器地址映射关系、错误响应机制以及大端序的字节顺序特性。通过完整16进制帧示例展示了实际应用场景,并提示了超时处理、并发控制和地址范围等注意事项。该摘要概括了Modbus RTU通信的核心数据结构与实现要点。
2025-10-13 15:34:43
1040
原创 什么是输入寄存器 什么是输出寄存器 什么是写输入寄存器 什么是读保持寄存器
在 Modbus 协议中,寄存器(Registers)是用于存储设备数据的存储单元,主要分为 和 。此外,还有 和 ,但这里我们主要讨论 相关的概念。
2025-10-10 19:03:56
1842
1
原创 ModBus-TCP学习
摘要: ModbusTCP报文头部固定为6字节,包含TransactionID(2字节)、ProtocolID(2字节)和Length(2字节)。Length字段仅统计应用数据单元(从UnitID开始),不包含头部。对于读寄存器响应,Length=寄存器数量×2+3(3来自UnitID、FunctionCode和ByteCount的固定字节)。协议规定多字节数据按大端序传输,不同功能码的Length计算方式可能不同(如写寄存器为固定6字节)。调试时可借助工具(如ModbusPoll)验证报文格式。
2025-10-10 18:51:29
1032
原创 深拷贝(Deep Copy)和浅拷贝(Shallow Copy)
C语言中深拷贝与浅拷贝的区别在于内存处理方式:浅拷贝仅复制指针地址,导致原对象和拷贝对象共享内存,存在数据相互影响和内存管理风险;深拷贝则同时复制指针指向的数据,实现内存独立,更安全但性能较低。深拷贝适用于包含动态内存的结构体,需手动实现复制逻辑,而浅拷贝适合简单结构体或需要共享数据的场景。开发者需根据实际需求选择拷贝方式,确保程序安全性和正确性。
2025-09-30 17:06:08
830
原创 一阶系统/二阶系统
一阶系统是指其输入输出关系可以用一阶线性常微分方程来描述的动态系统。其传递函数的标准形式为:其中:K:系统的增益。代表系统稳态输出与输入的比值。τ(tau):系统的时间常数。这是一阶系统最重要的参数,直接决定了系统的响应速度。s:拉普拉斯算子。特性描述数学模型微分方程:τdtdc(t)+c(t)=Kr(t)传递函数:G(s)=τs+1K核心参数时间常数 τ (决定响应速度)增益 K (决定稳态输出)阶跃响应。
2025-09-30 14:15:37
2329
原创 CT(电流互感器)输出绝对不能悬空
电流互感器(CT)二次侧绝对不能开路,否则会感应出数千伏高压,造成人身伤害和设备损坏。CT工作原理基于磁通平衡,正常工作时二次侧必须闭合形成消磁回路。开路时磁通无法抵消,导致铁芯饱和并产生危险高压。正确操作方法包括:连接采样电阻(1-100Ω)、设置自动短路保护、使用专用接口电路。实际测量中需确保先闭合二次回路再接通一次电流,停用时必须短路接地。这些安全措施源于电磁感应定律,是保障电力系统安全运行的基本要求。
2025-09-28 13:10:17
1405
原创 工业测量数据特性分析:为什么您的数据不服从正态分布
特性原因应对方法不连续ADC分辨率有限,只有离散输出接受离散性,关注主要取值区间不服从正态分布量化产生"台阶式"分布使用离散分布分析,而非连续分布只有几个特定值系统有限的数值选择分析众数、出现频率等统计量呈现离散分布数字系统的本质特性采用适合离散数据的分析方法。
2025-09-28 09:46:41
351
原创 奈奎斯特采样定理
定义: 采样频率 Fs恰好等于信号的基波频率 F0。即 Fs=F0。对于50Hz电网这意味着每秒采样50次,也就是每20毫秒(一个周期)采集一个数据点。
2025-09-28 09:02:26
1138
1
原创 定时器回调函数是什么
特性描述本质由用户编写的、在定时器超时后被系统自动调用的函数。原型关键参数xTimer,用于区分是哪个定时器触发了回调。执行环境定时器守护任务中,属于任务上下文,非中断。行为限制不能长时间阻塞或死循环,以免影响其他定时器。API 调用可以安全使用绝大多数 FreeRTOS 任务 API。模式根据定时器模式(单次/自动重载),决定是一次性还是周期性执行。简单来说,。
2025-09-17 17:33:52
802
原创 在freeRTOS中 软件定时器里面,守护任务是什么
软件定时器守护任务是 FreeRTOS 为管理软件定时器而设计的后台管家。它通过一个命令队列接收来自各处的定时器操作指令,并在任务上下文中统一、安全地处理这些指令和执行超时回调函数。这种设计确保了系统内核的稳定性和简洁性,同时为应用程序提供了安全灵活的定时功能。
2025-09-17 17:24:31
996
原创 单片机的代码到底存在哪里呢?单片机的启动流程大体上是什么样子的呢?
FLASH ROM:存储程序代码和常量(你的程序主要在这里RAM:存储运行时变量和数据(临时工作空间)EEPROM:存储需要保存的配置数据(可选)存储在单片机的FLASH ROM存储器中。这个存储器专门设计为可以长期保存程序代码,即使断电也不会丢失。
2025-09-11 15:53:37
799
原创 FreeRTOS(知识点总结)
FreeRTOS空闲任务在无高优先级任务运行时激活,负责内存回收和低功耗处理。其执行受任务阻塞和中断影响,需合理配置钩子函数避免系统阻塞。开发时应确保任务周期性释放CPU资源,并利用空闲任务计数器监控系统负载。关键配置包括抢占式调度、钩子函数和低功耗模式,需权衡功耗与响应速度。
2025-08-16 10:35:22
437
原创 FreeRTOS(总结)
任务1 Block期间,轮到Idle任务执行:它释放任务2的内存(TCB、栈),时间到后,任务1变为最高优先级的任务继续执行,如此循环。任务2被删除后,任务1的优先级和LED优先级一致,交替执行;main函数中创建任务1,优先级为1。LED的,优先级为1,任务1:任务1的大循环里,创建任务2,然后休眠一段时间。任务1运行时,它创建任务2,任务2的优先级是2。任务2:打印一句话,然后就删除自己。任务2打印一句话后,就删除了自己。任务2的优先级最高,它马上执行。所使用的是江科大的串口;
2025-08-15 18:29:20
552
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅