- 博客(36)
- 收藏
- 关注
原创 计算机硬件组成与运行原理,、单片机介绍(51和stm32)
本文摘要:计算机硬件系统由输入设备、输出设备、运算器、控制器和存储器组成。存储器分为内存(ROM/RAM)和外存,内存包括寄存器、缓存和主存,外存主要指硬盘等存储设备。总线系统包括数据总线、地址总线和控制总线,分别负责数据传输、寻址和控制信号传递。CPU通过编译程序执行指令,单片机(如STM32)是集成处理器核心的微型计算机系统。文章还介绍了ARM处理器架构分类、二极管/三极管特性以及MOS管工作原理等硬件基础知识,为理解计算机系统运行原理提供了全面概述。(150字)
2025-12-27 11:55:36
786
原创 ModbusRTU,Modbus库,HTTP协议解析
本文主要介绍了Modbus RTU与TCP协议的区别及应用场景。Modbus RTU基于串行通信(RS232/485),采用主机问答模式,报文包含地址码、功能码、数据和CRC校验码,而Modbus TCP基于网络协议无需CRC校验。文章详细说明了RTU协议格式(如03功能码示例)、参数配置要求(9600波特率、8位数据位等),并介绍了使用Modbus模拟器(ModbusPoll/Slave)和虚拟串口工具进行协议测试的方法。此外还提供了Linux环境下Modbus库的安装配置流程和常用函数接口说明,以及HT
2025-12-24 12:40:49
1181
原创 Modbus协议:工业通信的基石
Modbus是一种广泛应用于工业领域的通信协议,由Modicon公司于1979年开发。主要包含Modbus RTU、ASCII和TCP三种变体,其中Modbus TCP基于以太网传输。该协议采用主从问答式通信,具有免费、简单、易用的特点。协议格式包含报文头、功能码和数据三部分,支持四种寄存器类型:离散量输入、线圈、输入和保持寄存器,分别用于控制IO设备和存储数据值。常用工具包括Modbus Slave/Poll软件和网络调试助手。Modbus TCP默认端口号为502,最大数据帧长度为260字节,在PLC、
2025-12-20 16:01:42
1110
原创 网络调试与SQLite数据库实战指南,三次握手,四次挥手
本文介绍了网络调试和数据库编程的核心知识点。网络部分包括ping/netstat命令使用、协议头分析、Wireshark抓包工具操作,以及TCP三次握手/四次挥手流程及其可靠性机制。数据库部分阐述了SQLite数据库特性、安装方法、基础SQL语句和API接口,重点讲解了sqlite3_open/close/exec/get_table等关键函数的使用方法,并提供了完整的C语言操作示例代码。文章涵盖了从网络协议分析到数据库编程的实用技术要点,适合开发人员快速掌握相关技能。
2025-12-19 13:15:17
777
原创 setsockopt套接字属性设置,广播,组播,并发服务器
摘要:本文介绍了网络编程中的广播和组播通信机制,以及常见的服务器模型。主要内容包括:1) 广播通信的实现流程,通过setsockopt设置SO_BROADCAST选项;2) 组播通信的实现方式,使用D类IP地址和多播组管理;3) 三种服务器模型:循环服务器、多进程并发服务器、多线程并发服务器和IO多路复用模型。重点分析了多线程模型和IO多路复用模型在并发处理客户端请求时的实现方法和优势。文中提供了详细的代码示例,展示了如何创建UDP套接字、设置选项、发送接收数据以及处理多客户端连接。
2025-12-19 12:45:54
936
原创 揭秘IP地址:网络通信的服务端和客户端核心密码
本文介绍了IP地址的基本概念和网络编程相关知识。主要内容包括:IP地址的表示形式(点分十进制)、分类(网络号+主机号)和特殊地址(网络地址、广播地址);子网掩码的作用;TCP/IP网络模型及各层协议;TCP和UDP协议的区别与适用场景;Socket编程接口及TCP编程流程,包括socket、bind、listen、accept、connect等关键函数的使用方法,并提供了简单的客户端/服务器端代码示例。文章全面涵盖了从IP基础到网络编程实践的核心知识点。
2025-12-16 12:51:45
948
原创 线程并发编程,同步与互斥机制
本文介绍了线程的基本概念及其与进程的区别,重点阐述了线程同步与互斥的实现机制。线程作为轻量级进程,共享进程资源但拥有独立堆栈等私有资源。文章详细讲解了线程创建、退出、资源回收的函数接口,并通过示例演示线程间通信。在同步机制方面,介绍了信号量的初始化、P/V操作;在互斥机制方面,讲解了互斥锁的使用方法及死锁产生的四个必要条件。最后通过输入输出案例展示了线程协作的实现方式,为多线程编程提供了实用指导。
2025-12-12 21:59:19
743
原创 进程间通信方式(无名、有名管道,信号,共享内存,消息队列)
本文介绍了进程间通信(IPC)的主要方式及其特点。早期IPC包括无名管道(仅限亲缘进程)、有名管道(任意进程)和信号(异步通信)。SystemV IPC提供共享内存(高效直接读写)、信号灯集(同步机制)和消息队列(类型区分消息)。BSD套接字支持网络通信。重点阐述了无名管道和有名管道的创建与使用、信号的种类和处理方式、共享内存的操作步骤,以及信号灯集和消息队列的实现方法。每种通信方式都配有相应的函数接口说明和操作命令,为开发者提供了全面的IPC技术参考。
2025-12-11 20:20:12
1210
原创 进程奥秘:从创建到消亡全解析,进程函数
本文摘要: 进程是程序的一次执行过程,具有动态性。Linux系统中,进程包含数据段、正文段和堆栈段,可分为交互式、批处理和守护进程三类。进程状态包括运行态、睡眠态、暂停态、死亡态和僵尸态。关键进程函数包括:fork()创建子进程,wait()/waitpid()回收资源,exit()/_exit()结束进程,getpid()/getppid()获取进程号。特别要注意避免僵尸进程的产生,可通过wait系列函数及时回收子进程资源。父子进程拥有独立地址空间,对变量的修改互不影响,但会共享fork前打开的文件描述符
2025-12-10 20:27:30
1030
原创 Linux IO模型:阻塞与非阻塞对比,IO多路复用
本文介绍了Linux中的五种I/O模型:阻塞I/O、非阻塞I/O、信号驱动I/O、I/O多路复用(select/poll/epoll)和异步I/O。重点分析了各模型的特点和实现方式:阻塞I/O最简单但效率低;非阻塞I/O通过轮询耗费CPU;信号驱动I/O采用异步通知机制;I/O多路复用中select有1024限制且效率低,poll优化了限制但仍有轮询开销,epoll通过回调机制最高效且无描述符数量限制。文章详细说明了各模型的关键函数接口和编程步骤,为开发者选择适合场景的I/O模型提供了技术参考。
2025-12-09 19:04:42
1069
原创 深入理解文件IO:系统调用的核心机制
摘要:文件IO是操作系统提供的系统调用接口,围绕文件描述符进行无缓冲操作,效率较低。主要函数包括open(打开)、close(关闭)、read/write(读写)和lseek(定位)。库分为静态库(.a)和动态库(.so),前者编译时嵌入程序体积大但独立,后者运行时加载体积小但依赖环境。静态库通过ar命令制作,动态库需用gcc的-shared选项生成并解决路径问题。两者各有优劣:静态库运行快但升级麻烦,动态库升级方便但移植性差。
2025-12-08 20:14:59
818
原创 揭秘标准IO:高效文件操作的核心机制
标准IO是C语言库中用于高效输入输出操作的一组函数,通过缓冲机制减少系统调用次数。它围绕流(FILE*)进行操作,提供三种默认流(stdin/stdout/stderr)。主要函数包括fopen/fclose(文件操作)、fgets/fputs/fread/fwrite(读写操作)以及rewind/fseek/ftell(定位操作)。缓冲区分为全缓冲、行缓冲和不缓冲三种模式,数据会在满足条件(如缓冲区满、遇到换行符或程序结束)时自动刷新。特别地,标准错误流通常不缓冲。这些函数配合使用可以实现文件内容的读取、
2025-12-08 11:15:54
466
原创 揭秘二叉树:数据结构中的关键概念
本文摘要:树是由节点组成的层次结构,包含根节点和子树。二叉树是每个节点最多有两个子节点的树结构,严格区分左右子树。文章详细介绍了树的术语(如度数、层次)、二叉树的性质(如节点数量计算)、存储结构(顺序存储)以及三种遍历方式(前序、中序、后序)。特别说明了满二叉树和完全二叉树的区别,以及如何通过数组实现二叉树的顺序存储。最后通过示例展示了不同遍历顺序的输出结果。
2025-12-04 18:47:03
564
原创 双向链表高效操作指南
本文介绍了双向链表的实现方法。双向链表是一种线性数据结构,具有前驱和后继指针,支持双向遍历。文章详细讲解了双向链表的数据结构定义,包括节点结构体和链表管理结构体。重点阐述了创建空链表、插入节点(区分尾插和中间插入)、遍历(正向和反向)、删除节点(尾删和中间删除)等核心操作的实现逻辑。代码实现中特别处理了插入和删除时的位置判断,根据位置选择从前或从后遍历以提高效率。该实现封装了链表长度、头尾指针等信息,便于链表管理,体现了双向链表在增删操作上的灵活性优势。
2025-12-03 18:02:22
549
原创 链式队列实现与操作指南
摘要:本文介绍了链式队列的实现方法。链式队列采用线性逻辑结构和链式存储,通过两个结构体实现:链表节点结构体存储数据和指针,队列结构体封装头尾指针。操作包括创建空队列(使用带头链表)、入列(尾插法)、出列(释放头节点并返回下一节点数据)以及判空功能。代码实现提供了链式队列的基本操作接口定义,包括创建队列、入列、出列、判空和求长度等函数。该实现通过维护头尾指针来高效管理队列操作。
2025-12-03 17:58:43
689
原创 队列Queue:先进先出的数据结构
队列是一种FIFO(先进先出)的线性表,仅允许在队尾插入(入列)、队头删除(出队)。分为顺序队列(含循环队列)和链式队列。循环队列通过数组实现,使用front和rear指针标记队头和队尾。基本操作包括创建空队列、判空、判满、入列、出队及求长度。代码示例展示了循环队列的结构定义(含数组data[N]和front/rear下标)及基本操作函数原型,如createEmptySequeue()、isFullSequeue()等。循环队列能有效利用存储空间,避免假溢出问题。
2025-12-02 22:19:58
646
原创 揭秘栈:数据结构中的FILO奥秘
本文介绍了栈的基本概念和顺序栈的实现。栈是一种先进后出(FILO/LIFO)的线性表,只能在一端(栈顶)进行插入和删除操作。顺序栈采用顺序存储结构,主要操作包括创建、入栈、出栈、判空和判满。文中提供了C语言实现代码,详细展示了如何创建空栈、判断栈状态以及执行入栈和出栈操作。关键函数包括:createEmptySeqStack()初始化栈空间,isFullSeqStack()和isEmptySeqStack()检查栈状态,pushStack()和popSeqStack()实现数据存取。这些操作通过维护top指
2025-12-01 22:06:29
964
原创 链表基础:高效存储与遍历技巧
摘要:链表是一种链式存储结构,通过指针连接分散存储的数据元素。相比顺序表,链表解决了长度固定和插入删除繁琐的问题。单向链表分为有头和无头两种形式,其中头节点数据域无效。本文介绍了链表的基本概念、存储特性,并给出节点结构体定义。重点说明如何用尾插法创建有头单向链表:动态分配内存创建节点,将输入的学生成绩存入新节点并链接到链表尾部,直到输入-1终止。实现过程包括malloc申请头节点空间和将新节点追加至链表末端。
2025-11-29 18:44:45
283
原创 数据结构入门:线性表全解析(增删改查)
本文介绍了线性表这一基本数据结构,包括其定义、分类和特点。线性表是n个相同特性数据元素的有限序列,包含顺序表、链表、栈和队列等多种形式,具有一对一的前驱后继关系。重点阐述了顺序表的实现方式,通过数组将数据连续存储在内存中,并详细说明了其操作(增删改查)和实现要点,包括结构体封装、全局变量last的使用以及函数命名规范等。顺序表作为线性表的顺序存储实现,具有内存连续的特性。
2025-11-29 16:39:31
364
原创 数据结构与算法入门指南
本文介绍了数据结构与算法的基础知识。数据结构方面,阐述了数据、数据元素和数据项的概念,以及线性、树形和图形三种逻辑结构,并说明了顺序、链式、索引和散列四种存储结构的特点。算法部分则定义了算法的基本特性(有穷性、确定性、可行性)和评价标准(正确性、易读性、健壮性、高效性),重点讲解了时间复杂度的计算方法,包括如何通过大O表示法简化时间规模函数,并提供了具体的计算步骤示例。这些基础知识为程序设计和算法优化奠定了重要理论基础。
2025-11-27 22:13:49
598
原创 Make工具:自动化编译管理利器
摘要:make工具是一个工程管理器,通过读取Makefile文件自动检测文件更新并执行编译命令。Makefile包含目标、依赖和命令三要素,格式为"目标:依赖 [TAB]命令"。可使用变量简化编写,包括自定义变量和预定义变量(如CC、RM)。特殊语法包括伪目标(.PHONY)、自动变量($@、$^等)和通配符(%.c)。典型流程是将.c文件编译为.o再链接,通过make clean清除中间文件。该工具能有效管理多文件项目的编译过程。
2025-11-27 09:20:33
311
原创 深入解析函数指针与条件编译
本文介绍了指针的高级应用,包括函数指针和函数指针数组的概念与用法。函数指针是指向函数的指针,定义格式为数据类型(*指针名)(形参列表);函数指针数组则是存放函数指针的数组。文章还列举了各种指针定义的练习示例,如指向整型的指针、指向指针的指针等。最后讲解了条件编译的预处理指令,包括#ifdef和#if的用法,以及防止头文件重复包含的方法。这些内容涵盖了指针在函数调用、数组存储以及条件编译中的高级应用场景。
2025-11-26 10:11:57
432
原创 C语言结构体与共用体详解
本文摘要: C语言结构体与共用体总结: 结构体定义与typedef重命名两种方式 结构体内存对齐原则:按最大成员类型与系统位数较小值对齐,通过成员排序优化空间 共用体特性:成员共享内存,仅保留最后赋值,大小为最大成员尺寸 枚举类型自动编号特性及static/extern存储类型说明 注意事项:结构体需逐成员访问,共用体存在值覆盖,static延长生命周期,extern支持跨文件引用 (150字)
2025-11-26 10:09:44
284
原创 结构体数组与指针详解
摘要:本文介绍了结构体数组和结构体指针的基本概念。结构体数组由相同类型的结构体变量组成,可通过定义时初始化或后续赋值,使用for循环遍历输入输出。结构体指针指向结构体变量,通过"->"访问成员,其大小在64位系统为8字节,32位系统为4字节。文章还说明了结构体数组大小的计算方法:sizeof(结构体数组名)等于结构体类型大小乘以元素个数。
2025-11-24 15:26:02
358
原创 结构体编程:自定义数据类型的艺术
本文介绍了C语言结构体的基本概念和使用方法。结构体是一种用户自定义的数据类型,可以包含多个不同类型的成员变量。文章详细说明了结构体的三种定义方式:先定义后声明、定义时声明以及缺省结构体名声明。同时讲解了结构体变量的赋值方法(大括号初始化和点等法)和成员访问方式(通过点运算符)。最后给出了结构体变量输入输出的示例代码,展示了如何使用scanf和printf函数对结构体成员进行读写操作。
2025-11-24 15:23:22
173
原创 Linux硬链接与软连接,解压与压缩,gdb的调试
本文介绍了Linux系统中的硬链接和软连接特性:硬链接通过inode号创建副本文件,修改任一文件会同步变更;软连接类似快捷方式,通过路径建立。同时讲解了常用压缩工具(gzip/bzip2/xz/zip)的特点及使用命令,以及tar命令的归档压缩选项组合。最后概述了分文件编程中头文件引用方式及gdb调试流程,包括生成可调试文件、设置断点和单步执行等基本调试方法。
2025-11-21 10:30:14
423
原创 轻松掌握Linux命令行技巧
本文摘要介绍了Linux系统的基本操作与配置方法。主要内容包括:系统版本与内核查看命令(如uname、lsb_release等);系统架构分层(应用层、内核层、硬件层);关机重启命令(shutdown、reboot);虚拟机网络模式(桥接、NAT、仅主机);软件包管理工具(dpkg/apt);Shell命令解析器功能及环境变量设置;特殊字符用法(通配符*、?、[]等匹配规则;管道符|的输入重定向功能)。这些基础命令和概念是Linux系统管理与日常操作的核心内容。
2025-11-19 07:54:02
379
原创 C语言字符串函数全解析
摘要:本文介绍了C语言string.h库中常用的字符串处理函数,包括strcpy/strncpy(字符串复制)、strcat/strncat(字符串拼接)和strcmp/strncmp(字符串比较),详细说明了各函数的参数、功能和返回值。同时简要解释了递归函数的定义和执行过程,分为递归阶段(从未知到已知)和回归阶段(逆向求解)两个阶段。这些函数和概念是C语言编程中处理字符串和实现递归算法的基础工具。
2025-11-18 08:22:10
296
原创 深入解析指针与数组:const修饰与内存访问
写返回值,定义函数时,函数名前编写返回值的类型,函数内部需要写return。返回值:成功:返回对应开辟的空间的首地址 失败:返回NULL。形参:书写在函数定义时小括号内的参数,用于接收实参传递的数据。实参:书写在函数调用时小阔号内的参数,用于给形参传递数据。单向传递(实参--->形参),后期修改形参不会影响实参。不写参数,1. 小阔号内不写内容 2. 写void。栈是连续的空间,而堆是不连续的空间是随机分配的。函数的参数,定义函数位置按照定义变量编写参数。概念:本质是数组,数组内存放的都是指针。
2025-11-17 17:35:41
300
原创 指针运算详解与应用实战
摘要:指针运算包括加减(+-)和自增自减(++ --)操作,可以移动指针地址。p+n/p-n移动地址但不改变指向,p++/p--则改变指针指向。*(p++)先取值后移动,(p)++对内容加1,++p先移动后取值。指针大小由系统位数决定,变量地址不固定但内存地址固定。使用指针时需注意类型匹配,避免野指针和内存泄漏导致的段错误。可通过指针实现字符串到整型的转换。
2025-11-17 17:30:03
284
原创 C语言指针进阶:从const到数组指针全解析
本文主要讲解了指针相关的重要概念:1. const修饰指针的规则,说明其"只读"特性;2. void指针的使用方法;3. 大小端模式的内存存储区别;4. 二级指针的定义与使用;5. 指针与数组的关系,包括一维和二维数组的不同访问方式(直接/间接访问);6. 数组指针的概念及其在二维数组遍历中的应用。重点阐述了指针与数组的对应关系,以及通过指针访问数组元素的多种语法形式。
2025-11-13 21:35:39
243
原创 指针运算解密:++与*的巧妙结合
本文介绍了指针运算的基本概念,重点讲解了指针的算术运算(+、-、++、--)及其与解引用操作符()的组合使用规则,包括p++、(p)++、++p等常见表达式的执行顺序和效果。同时说明了指针大小由操作系统位数决定、变量地址不固定等特性。文章还指出段错误的两种常见原因(野指针和内存泄漏),最后提出用指针实现字符串转整数的练习。
2025-11-13 14:07:58
206
原创 字符串操作与排序算法精解
本文介绍了字符串长度计算和排序算法。计算字符串长度可通过循环遍历字符数组直到遇到'\0',或使用strlen函数。sizeof和strlen的区别在于sizeof计算数组内存大小(包含'\0'),而strlen计算实际字符数(不含'\0')。排序算法部分详细说明了冒泡排序和选择排序的原理:冒泡排序通过相邻元素两两比较进行交换,每轮减少比较次数;选择排序通过寻找最小值并与对应位置交换。两种排序算法的时间复杂度均为O(n²),其中冒泡排序平均需要n(n-1)/2次比较,选择排序需要(n-1)+(n-2)+...
2025-11-11 21:03:19
366
原创 数组从入门到精通:全面解析
本文总结了数组的基本概念和定义格式,重点介绍了数组的访问方式、初始化方法及注意事项(如数组越界问题)。详细说明了一维数组的遍历方式和大小计算方法,并特别阐述了字符数组的定义形式、输入输出方法及常用函数(puts/gets)。最后提及了针对混合字符串统计各类字符数量的例题,为数组操作提供了实践示例。全文系统梳理了数组的核心知识点,为编程学习提供了基础指导。
2025-11-10 20:32:24
592
原创 for循环实现正三角,倒三角
本文介绍了使用for循环打印正三角形和倒三角形的方法。通过控制循环的行数和列数,可以精确输出所需数量的号。正三角形从顶部到底部逐行增加号数量,倒三角形则从底部到顶部逐行减少。这种方法展示了循环结构在图形输出中的应用。
2025-11-09 12:04:29
162
原创 c语言编程实现打印水仙花数
摘要:水仙花数是指一个三位数等于其各位数字立方和的数,如153=1³+5³+3³。程序需要遍历100-999间的所有三位数,判断是否满足该条件并输出所有水仙花数。(49字)
2025-11-09 10:06:39
84
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅