
C/C++
文章平均质量分 82
W说编程
物联网、工业互联互行业,分享技术
展开
-
在嵌入式Linux中实现高并发TCP服务器:从select到epoll的演进与实战
本文从传统多进程模型出发,逐步演进到epoll高并发方案,结合嵌入式系统的特性,实现了资源高效利用的TCP服务器。然而,嵌入式系统的资源限制(如内存、CPU性能)与复杂的网络环境(高延迟、低带宽)对网络编程提出了严峻挑战。在物联网(IoT)和工业4.0的推动下,嵌入式设备逐渐从。嵌入式设备内存有限,需避免频繁的malloc/free。将连接分配到多个epoll实例,充分利用多核CPU。为预分配内存块,减少动态内存分配。减少内核态与用户态的数据拷贝。原创 2025-02-24 06:44:41 · 843 阅读 · 1 评论 -
嵌入式Linux系统SPI驱动移植专题详解(3000+字图文实战指南)
本文详细阐述了嵌入式Linux系统下SPI驱动的移植方法与实现原理,涵盖从硬件架构到应用测试的全流程。通过3000+字的深度解析与代码实例演示,帮助开发者快速掌握SPI驱动开发的核心技术要点。建议结合具体硬件平台实践操作,以加深理解。(注:本文所有代码均已在Linux 5.4内核验证通过,硬件平台为i.MX6ULL)原创 2025-02-17 22:01:22 · 1019 阅读 · 0 评论 -
STM32物联网终端实战:从传感器到云端的低功耗设计
STM32物联网终端实战:从传感器到云端的低功耗设计原创 2025-02-16 19:59:42 · 1217 阅读 · 3 评论 -
排序算法详解、应用对比与C语言实现
不同的排序算法各有利弊,理解其核心原理和适用场景比死记代码更重要。不同编程语言的内置排序实现并行排序算法设计海量数据的分治策略优化特殊数据结构的排序优化。原创 2025-02-12 14:40:22 · 441 阅读 · 1 评论 -
Linux任务调度系统详解与C代码实例
任务调度是指操作系统根据一定的策略和算法,决定哪个任务在何时使用CPU资源的过程。Linux作为一个多任务操作系统,允许多个任务并发执行,任务调度系统负责在这些任务之间进行切换,确保每个任务都能公平地获得CPU资源。Linux任务调度系统是操作系统内核的核心组件之一,负责管理任务的执行顺序和资源分配。本文详细介绍了Linux任务调度的原理、应用场景,并通过代码实例展示了如何使用不同的调度策略。理解Linux任务调度系统的工作原理,对于系统性能优化和开发高效的多任务应用程序具有重要意义。原创 2025-02-11 23:05:38 · 615 阅读 · 0 评论 -
最优队列的原理、C语言实现与应用实例
最优队列(Priority Queue) 是一种特殊的队列数据结构,其元素按照优先级顺序出队而非先进先出。在计算机科学中,最优队列广泛应用于任务调度、图算法(如Dijkstra最短路径算法)等领域。本文将深入探讨最优队列的原理、应用场景,并提供C语言代码实现及实际应用案例。原创 2025-02-11 17:12:14 · 445 阅读 · 0 评论 -
Linux文件系统及C语言应用
文件系统是操作系统中用于数据存储、组织和访问的基础架构。在Linux操作系统中,文件系统不仅管理着磁盘空间,还负责维护文件的元数据和访问权限。它以层次化的树状结构组织数据,以根目录(/)为起点,通过目录和子目录的方式管理文件。每个文件系统都有自己的根目录,可以包含文件和子目录。数从文件中读取数据,并确保读取到的字符串以null结尾。6.打印读取到的内容:使用printf函数打印读取到的文件内容。7.关闭文件:再次使用close函数关闭文件描述符。原创 2025-02-10 19:09:29 · 1031 阅读 · 0 评论 -
堆详解及C语言实现
int* arr;// 存储堆元素的数组// 堆容量int size;// 当前元素数量} MaxHeap;最大堆高效维护动态数据集的最大值完全二叉树特性带来优秀的空间利用率在需要频繁获取/删除最大元素的场景优势明显理解堆操作是学习优先队列和堆排序的基础拓展思考:如何实现最小堆?如何处理堆元素的动态扩容?堆在操作系统调度算法中的应用?欢迎在评论区交流讨论,共同进步!总结- 最大堆高效维护动态数据集的最大值- 完全二叉树特性带来优秀的空间利用率。原创 2025-02-09 19:05:28 · 320 阅读 · 0 评论 -
图的进阶:拓扑排序与关键路径算法详解
本文详细介绍了图的两个重要算法:拓扑排序和关键路径算法。拓扑排序用于对有向无环图的顶点进行排序,而关键路径算法则用于找出决定项目最短完成时间的关键活动。通过C语言代码实例,读者可以更好地理解和掌握这两个算法的实现和应用。希望本文能对读者在数据结构的学习和实践中有所帮助。原创 2025-02-09 15:25:24 · 375 阅读 · 0 评论 -
图的基础理论及C语言代码实例
图(Graph)是由顶点集合V和边集合E组成的非线性数据结构,记作G=(V,E)。顶点之间可以形成任意连接关系允许存在环路没有明确的根节点概念。本文讲述图的基础理论及其C语言代码实例原创 2025-02-09 14:41:27 · 702 阅读 · 0 评论 -
哈希表原理详解与C语言实现
哈希表(Hash Table) 是一种通过哈希函数将键映射到存储位置的高效查找数据结构,理想情况下时间复杂度可达 O(1)。本文讲述哈希表原理、应用场景及其C语言实现原创 2025-02-08 17:01:46 · 550 阅读 · 0 评论 -
B+树原理详解及C语言实现
本文介绍B+树原理,应用场景与C代码实现。B+树通过将所有数据集中在叶子节点并连接叶子节点,优化了范围查询和顺序扫描的效率,特别适合数据库索引和文件系统等场景。其C语言实现需要考虑节点分裂、合并等复杂操作,但可以显著提高数据访问效率。原创 2025-02-08 11:20:47 · 1094 阅读 · 0 评论 -
B树详解及其C语言实现
本文讲述B树原理,应用场景及其C语言实现,定义与结构:B树是一种多路搜索树,也被称为平衡多路查找树。与二叉搜索树不同,B树的每个节点可以拥有多个子节点和键值。B树的每个节点包含键值集合、子节点指针集合和一个平衡因子。键值集合按照从小到大的顺序排列,子节点指针集合按照左子节点、右子节点的顺序排列。平衡因子用于衡量节点的平衡性。B树的阶(Order)或分支因子(Branch Factor)通常用字母m表示,它定义了节点可以拥有的最大子节点数(即m个子节点)。因此,一个节点最多可以有m-1个键值。原创 2025-02-08 09:14:48 · 1014 阅读 · 0 评论 -
红黑树原理及C语言实现
本文讲述红黑树原理,应用场景,C语言实现。红黑树是一种自平衡的二叉查找树,满足以下5个核心性质:每个节点是红色或黑色根节点是黑色所有叶子节点(NIL节点)是黑色红色节点的子节点必须是黑色从任一节点到其叶子节点的所有路径包含相同数量的黑色节点原创 2025-02-07 21:28:23 · 311 阅读 · 0 评论 -
AVL树详解及其C语言实现
本文讲述AVL树、应用场景及其C语言实现。AVL树的全称是Adelson-Velsky and Landis Tree,简称AVL树。AVL树是一种自平衡的二叉搜索树,其特点是在每次插入或删除操作之后,都会自动调整树的结构,以确保树的高度保持在尽可能小的状态。这种调整是通过旋转操作来实现的,以保持树的平衡性。在AVL树中,每个节点都维护了一个平衡因子,即其左子树的高度减去右子树的高度。平衡因子的值只能为-1、0或1。原创 2025-02-06 11:42:07 · 522 阅读 · 0 评论 -
二叉查找树BST详解及其C语言实现
二叉查找树(Binary Search Tree),又称二叉排序树(Binary Sort Tree),亦称二叉搜索树。二叉查找树(Binary Search Tree, BST)是具有以下性质的二叉树:左子树所有节点值 < 根节点值;右子树所有节点值 ≥ 根节点值;左右子树也分别为BST;节点结构:每个节点通常包含三部分,即节点的值(key)、指向左孩子的指针(lchild)和指向右孩子的指针(rchild)。部分实现中,节点还可能包含指向父节点的指针(parent)。原创 2025-02-06 09:56:50 · 396 阅读 · 0 评论 -
哈夫曼树原理及其C语言实现
本文讲述哈夫曼树原理及其代码实现,哈夫曼树(Huffman Tree),又称最优二叉树,是一种带权路径长度最短的二叉树,广泛应用于数据压缩领域。所谓树的带权路径长度,是指树中所有的叶结点的权值乘上其到根结点的路径长度(若根结点为第0层,叶结点到根结点的路径长度为叶结点的层数)之和。它的核心思想是:权值越大的节点离根越近,权值越小的节点离根越远,从而最小化整体的带权路径长度(WPL)。原创 2025-02-05 22:15:29 · 934 阅读 · 0 评论 -
Linux下线程间同步实现方式详解
Linux 中线程(Thread)是共享进程内存空间的轻量级执行单元,线程间通信(IPC)主要通过共享内存和同步机制实现。在Linux操作系统中,线程间实现同步通信的方式主要包括互斥锁(Mutex)、条件变量(Condition Variable)、信号量(Semaphore)、读写锁(Read-Write Lock)等。原创 2025-02-05 20:31:22 · 1129 阅读 · 0 评论 -
二叉树原理及其C语言实现
本文讲述二叉树原理,应用场景,及其C语言代码实例。二叉树是一种 非线性数据结构,是数据结构中的核心构造,每个节点最多有两个子节点,通常被称为左子节点(left subtree)和右子节点(right subtree)。原创 2025-02-05 19:05:04 · 1117 阅读 · 0 评论 -
队列Queue原理及其C语言实现
本文介绍队列结构原理,应用场景及其C语言实现。核心特性:先进先出,操作受限(仅队头出队、队尾入队)。时间复杂度:入队、出队、查看队头均为O(1)。适用场景:需按顺序处理任务的场景(如调度、缓冲、BFS)。原创 2025-02-05 13:46:24 · 363 阅读 · 0 评论 -
双向链表原理及其C语言实现
本文介绍双向链表原理及其C语言代码实现,优势:双向遍历、插入/删除高效(无需遍历前驱节点)。代价:每个节点多占用一个指针的内存空间。适用场景:需要频繁双向操作(如历史记录、导航系统)。原创 2025-02-05 13:21:29 · 315 阅读 · 0 评论 -
栈(stack)结构原理及其C语言实现
本文讲述数据结构中栈结构的原理,应用场景,及其C语言代码实现的完整实例原创 2025-02-05 11:13:08 · 1097 阅读 · 0 评论 -
单链表原理及其C语言实现
本文章讲述数据结构中单链表原理,应用场景,以及C语言代码的实现案例原创 2025-02-05 10:41:21 · 240 阅读 · 0 评论 -
环形缓冲区原理与C语言实现ringbuffer
本文章介绍了环形缓冲区的原理,应用场景,并通过C语言代码实现了一个环形缓冲区ringbuffer的示例。原创 2025-02-01 08:51:33 · 998 阅读 · 2 评论 -
C语言指针专题五 -- void和const指针
本文章讲述C语言中void指针和const指针的原理和使用,通过代码编程实例的方式展示如何使用两种类型关键字原创 2025-02-01 08:16:10 · 416 阅读 · 0 评论 -
C语言指针专题四 -- 多级指针
本文章讲述C语言中多级指针原理与编程实例。原创 2025-01-31 23:22:12 · 484 阅读 · 0 评论 -
C语言指针专题三 -- 指针数组
本文章讲述C语言中指针数组的原理和应用。原创 2025-01-31 22:56:14 · 463 阅读 · 0 评论 -
C语言指针专题一 -- 指针基础原理
指针是C语言中非常强大的工具,它允许直接操作内存地址,提供了灵活的数据访问和操作方式。通过指针,可以实现高效的数据处理、动态内存管理以及复杂的数据结构(如链表、树等)。然而,指针的使用也需要谨慎,因为不当的指针操作可能导致程序崩溃或内存泄漏等问题。原创 2025-01-31 20:16:44 · 834 阅读 · 0 评论 -
C语言数组编程实例
C语言数组编程实例原创 2025-01-29 06:50:13 · 1280 阅读 · 0 评论 -
Linux下多线程编程
多线程是指在一个进程中同时运行多个线程,每个线程可以独立执行不同的任务。线程是操作系统调度的最小单位,多个线程共享同一个进程的内存空间和资源,但每个线程有自己的栈和寄存器状态。本文展示Linux下多线程编程实例。原创 2025-01-24 13:40:37 · 1007 阅读 · 0 评论 -
基于STM32的UART驱动实现
UART(Universal Asynchronous Receiver/Transmitter,通用异步收发传输器)是一种常见的串行通信协议,广泛应用于嵌入式系统和计算机外设中,UART通信的原理基于异步串行通信。本文章讲述基于STM32实现UART驱动。原创 2025-01-21 18:14:40 · 864 阅读 · 0 评论 -
基于STM32的SPI驱动实现
在STM32微控制器上实现SPI(SerialPeripheralInterface)驱动,通常需要配置SPI外设、GPIO引脚,并编写数据传输函数。以下是基于STM32的SPI驱动实现的详细步骤和示例代码。通过以上步骤,你可以在STM32上实现SPI驱动,并与外部设备进行通信。原创 2025-01-20 00:52:35 · 991 阅读 · 0 评论 -
Linux下epoll函数使用解析
epoll是Linux下处理高并发I/O的高效机制,特别适合处理大量并发连接的场景。通过epoll_ctl和epoll_wait等系统调用,可以轻松实现事件驱动的I/O模型。原创 2025-01-20 00:34:00 · 566 阅读 · 0 评论 -
Linux下select使用
在Linux中,select是一个经典的IO多路复用函数,用于监控多个文件描述符(filedescriptors)的状态变化(如可读、可写或异常)。它允许程序同时等待多个文件描述符,并在其中任何一个文件描述符就绪时返回。函数原型nfds需要监控的文件描述符的最大值加1。例如,监控的文件描述符是0、1、2,则nfds应为3。readfds指向一个fd_set类型的文件描述符集合,用于监控是否有数据可读。如果为NULL,则表示不监控读事件。writefds指向一个fd_set。原创 2025-01-18 18:04:38 · 845 阅读 · 0 评论 -
Linux下实现I/O多路复用
IO多路复用(I/OMultiplexing)是一种高效的I/O操作技术,允许单个进程或线程同时监控多个文件描述符(如套接字、管道等),并在其中任何一个文件描述符就绪时进行读写操作。这种技术常用于网络编程中,以提高程序的并发处理能力。1.文件描述符(FileDescriptor):在Unix/Linux系统中,文件描述符是一个用于访问文件或I/O资源的抽象标识符(如套接字、管道等)。2.就绪(Ready):当一个文件描述符可以进行非阻塞的读写操作时,称为“就绪”。3.阻塞与非阻塞。原创 2025-01-18 17:01:49 · 734 阅读 · 0 评论 -
PLC梯形图编程与高级语言编程的对比
PLC(可编程逻辑控制器)梯形图编程与高级语言编程各有其特点,适用于不同的应用场景。以下是两者的主要对比。特性PLC梯形图编程高级语言编程编程范式图形化、逻辑控制文本化、通用编程适用场景工业控制、实时控制复杂系统、跨平台开发编程效率简单逻辑高效、复杂逻辑低效复杂逻辑高效可维护性直观易懂,适合现场维护模块化设计,需详细文档性能实时性强,资源占用低依赖硬件和优化开发工具专用软件,硬件依赖通用工具,跨平台支持学习成本低门槛,适合初学者高门槛,需掌握编程语言示例梯形图逻辑控制代码实现复杂逻辑。原创 2025-01-12 22:41:19 · 1044 阅读 · 0 评论 -
Linux下C语言实现TCP socket通信服务端与客户端
TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。本文介绍TCP通信原理,以及通过C语言在linux系统下实现服务端与客户端通信程序。原创 2025-01-12 22:11:33 · 489 阅读 · 0 评论 -
C语言函数指针
在C/C++中,指向函数的指针变量称为函数指针,函数指针用于存放函数的地址,作为函数执行时入口地址。函数名代表函数的入口地址。本质上和定义函数的首部相同,但用指针的形式来定义,函数指针名需要有括号,否则变成了一个返回值是指针的函数声明。函数指针变量定义的一般形式如下。下节讲述如何通过函数指针实现回调函数。原创 2023-11-13 20:34:42 · 142 阅读 · 0 评论 -
指针指向字符串常量不可修改内容
在编译时没有直接显示限定指针指向的区域不可修改,C编译器并没有对此做出检查,所以编译不会报错,但运行时发生了对常量区的修改,所以会出现运行时错误。2. 在实际编程和开发过程中,应保持良好的编程习惯,对常量使用const关键字做显示限定,让程序在编译时能早期发现错误,避免运行时的错误难以定位,运行时错误也会带来段错误、程序异常退出等bug。以上代码编译时并不会报错,但运行时不会按预期在控制台输出信息,会异常退出。原创 2023-04-24 22:58:25 · 420 阅读 · 0 评论 -
C语言数组与指针对比
C语言中数组和指针是不同的原创 2023-03-26 18:54:27 · 132 阅读 · 1 评论