- 博客(41)
- 收藏
- 关注
原创 嵌入式--线程邮箱
线程邮箱是一种高效的线程通信机制,通过模拟邮件收发方式避免线程直接竞争共享资源。其核心结构包括邮箱系统(MBS)、线程节点(MSB_NODE)和数据类型(datatype)。MBS包含互斥锁和链表头,MSB_NODE存储线程信息和消息队列。主要功能包括创建邮箱系统、注册线程、发送/接收消息等。使用时先创建MBS并注册线程,线程通过检查自己"邮箱"获取消息而非主动争抢资源。这种机制减少了加锁解锁操作,有效降低系统资源消耗,提高多线程程序的执行效率。
2025-10-08 09:40:49
277
原创 汇编基础2
本文介绍了ARM汇编中的函数调用、指针操作和异常处理机制。函数调用通过BL指令实现,参数通过R0-R3传递,超过4个参数需压栈处理。指针操作使用LDR/STR指令进行内存读写。异常处理部分详细说明了ARM的异常向量表结构,包括复位、未定义指令、SWI中断等8种异常类型及其处理流程,重点展示了通过修改CPSR寄存器实现模式切换的方法。文中还提供了完整的启动代码示例,包含堆栈初始化、模式设置和异常处理框架的实现。
2025-09-09 18:11:57
792
原创 汇编基础1
本文介绍了ARM汇编中的伪操作和常用指令。伪操作如area用于定义代码段,code32/thumb指定指令集。核心指令包括MOV(数据传送)、ADD/SUB(算术运算)、LDR(数据加载)、MVN(按位取反)、BIC(位清除)等。文章还讲解了循环实现方法,通过B指令配合条件判断(如CMP)实现分支跳转,并给出了1加到100的循环示例。这些内容涵盖了ARM汇编编程的基本要素,包括段定义、数据处理和程序控制结构。
2025-09-08 18:53:09
726
原创 51单片机基础day3
UART是一种全双工串行通信协议,使用TXD和RXD两根信号线实现双向数据传输。其特点包括:LSB优先的8位数据格式、可选的奇偶校验、起始位/停止位机制。UART属于异步通信,通过波特率(如9600bps)实现同步。硬件配置涉及定时器1、SCON/PCON寄存器设置,支持中断处理。相比单工/半双工模式,全双工UART通信效率更高,但需注意奇偶校验的局限性(无法检测偶数位错误)。典型应用场景包括MCU与主机通信,其中一个串口常用于ISP程序下载。
2025-09-04 17:29:51
1055
原创 单片机day2
本文介绍了51单片机的基本功能模块及其工作原理。主要包括GPIO输入输出模式、按键检测、中断系统(包含5个中断源及其中断优先级、嵌套和处理流程)、定时器(16位自增型定时器配置)以及PWM和蜂鸣器原理。重点阐述了中断系统的工作机制,包括IE和TCON寄存器的配置方法,并详细说明了定时器初值计算和16位工作模式的设置流程。最后介绍了PWM方波生成原理和蜂鸣器的两种类型(有源/无源)及其发声机制。这些内容为51单片机的基础功能实现提供了技术指导。
2025-09-03 17:57:12
1146
原创 单片机day1
该文章摘要介绍了计算机硬件相关概念,包括不同类型处理器(CPU、MCU、MPU、GPU、NPU、FPU、SOC)的特点和用途,以及内存(RAM、ROM)和外存的区别。还阐述了单片机内部结构、三大总线(地址、数据、控制)的功能特点,最后讲解了LED模块(共阳极/共阴极)和数码管(位选/段选)的工作原理。这些内容涵盖了计算机硬件基础知识和嵌入式系统常用组件。
2025-09-02 17:29:06
582
原创 Linux学习——sqlite3
本文介绍了SQLite3数据库的基本操作和C语言接口使用方法。主要内容包括:1. SQLite3命令行操作:创建表、增删改查数据、表结构修改等基础SQL语法;2. C语言接口函数:sqlite3_open()打开数据库、sqlite3_exec()执行SQL语句(含回调函数说明)、sqlite3_close()关闭数据库;3. 示例演示了自动增长列、时间信息插入等特殊用法。全文重点阐述了SQLite3数据库的完整操作流程,从命令行交互到程序化操作,并详细说明了各API函数参数及返回值含义。
2025-08-29 18:48:42
878
原创 IO多路复用
摘要:文章介绍了三种IO多路复用技术:select、poll和epoll。select通过fd_set管理文件描述符,但存在1024限制和性能问题;poll使用pollfd结构体,解决了select的部分限制但仍需遍历所有fd;epoll采用事件驱动机制,通过epoll_create、epoll_ctl和epoll_wait实现高效监控,解决了前两者的性能瓶颈。epoll在连接数多时表现更优,是Linux下高性能IO的首选方案。
2025-08-28 17:52:18
482
原创 网络编程-并发模型
本文介绍了三种服务器模型及IO处理方式:单循环服务器效率低,只能串行处理请求;并发服务器通过多进程/线程实现并行处理,其中多线程效率更高;多路IO复用技术(select/poll/epoll)可单进程管理多个连接,提高并发能力。文章还分析了四种IO模型:阻塞IO会等待数据就绪;非阻塞IO立即返回结果;通过fcntl可设置文件描述符为非阻塞模式;信号驱动IO利用SIGIO信号通知数据就绪,但处理能力有限。这些技术为构建高性能服务器提供了不同层级的解决方案。
2025-08-27 17:40:56
528
原创 Linux学习-网络编程2
TCP粘包问题可通过消息边界解决,常用方法包括:结束标志(如\r\n)、固定长度或协议结构体。recv()和send()函数用于TCP通信,分别实现数据接收和发送,需指定socket、缓冲区及标志参数。UDP编程采用C/S模型,客户端主动通信,服务器端被动响应。关键函数sendto()和recvfrom()需指定目标/源地址及长度参数,实现无连接的数据收发。两种协议的主要区别在于TCP面向连接需处理粘包,而UDP无连接直接处理数据报。
2025-08-22 20:44:46
430
原创 Linux学习-网络编程1
网络通信基础与TCP/IP编程模型 摘要:本文介绍了网络通信的基本概念,包括进程间通信、OSI模型、网络参数(IP地址、子网掩码、网关、DNS)等。重点解析了Socket编程接口,详细说明了TCP/UDP协议的特性及适用场景,并对比了C/S、B/S、P2P通信模式。针对TCP协议,分别阐述了客户端(主动连接)和服务端(被动监听)的实现流程,包括关键函数(socket、bind、connect、listen、accept)的使用方法及参数说明。
2025-08-22 08:51:02
1003
原创 Linux学习-软件编程(进程间通信2)
本文介绍了三种进程间通信(IPC)机制:消息队列、共享内存和信号灯。消息队列通过ftok、msgget等函数实现消息的创建、发送和接收;共享内存通过shmget、shmat等函数实现高效的数据共享;信号灯则通过semget、semop等函数实现进程同步。三种机制都使用IPC对象作为通信载体,具有相似的操作流程:创建对象、进行通信、删除对象。其中消息队列适合异步通信,共享内存效率最高,信号灯主要用于同步控制。每种机制都详细说明了相关函数接口及其参数用法。
2025-08-19 19:03:50
717
原创 Linux学习-软件编程(进程间通信1)
本文介绍了Linux系统中进程间通信的几种方式。首先阐述了进程的独立性及其资源分配特性,重点分析了三种主要的通信机制:管道(包括无名管道和有名管道)、信号(如SIGINT、SIGKILL等)以及System V IPC(消息队列、共享内存等)。其中详细说明了无名管道的创建原理(pipe函数)和操作特性,以及有名管道(mkfifo函数)与无名管道的区别。在信号部分,系统介绍了信号类型(kill -l查看)、处理方式(缺省/忽略/捕捉)及相关函数接口(signal/alarm/kill)。
2025-08-18 17:46:15
504
原创 Linux学习-软件编程(线程与进程2)
本文介绍了多线程编程中的参数传递、属性设置和线程通信机制。通过pthread_create实现线程传参,使用结构体封装线程参数;线程属性可分为需要手动回收的加入属性和自动回收的分离属性。重点阐述了线程间通信的三种方式:全局变量、互斥锁和信号量。互斥锁用于解决资源竞争问题,文章详细说明了其使用方法和死锁避免策略;信号量则通过初始化、申请和释放操作实现资源同步。文中还提供了相关函数接口的原型和使用说明。
2025-08-16 17:17:49
895
原创 Linux学习-软件编程(进程与线程)
本文介绍了进程管理和线程编程的核心概念。进程部分重点讲解了wait和waitpid函数用于子进程回收,包括阻塞/非阻塞模式和状态获取方法;详细解析了exec函数族的使用场景和参数传递方式,以及主函数传参机制。线程部分阐述了线程与进程的关系和区别,对比了多线程和多进程的优劣势,包括效率、通信、竞争和安全性等方面;提供了线程创建(pthread_create)、终止(pthread_exit)和回收(pthread_join)等关键API的使用说明。
2025-08-15 18:52:53
936
原创 Linux学习-进程线程(进程)
本文摘要:文章系统介绍了进程的基本概念和操作。进程是程序的动态执行过程,具有独立的虚拟内存空间(0-4G),包含用户空间和内核空间。重点讲解了多进程存储机制(虚拟地址共享、物理地址独立)、调度算法(如时间片轮转)和进程状态(就绪态、僵尸态等)。提供了常用进程管理命令(top、ps、kill等)和关键函数接口(fork、wait等)。特别分析了孤儿进程和僵尸进程的产生机制及避免方法,强调父进程通过wait回收子进程空间的重要性。全文涵盖了进程从创建到消亡的全生命周期管理技术。
2025-08-14 19:05:50
1244
原创 Linux学习-软件编程(标准IO)
本文介绍了C语言中文件操作的核心函数。在标准I/O部分,详细讲解了fwrite和fread函数的使用方法、参数说明及返回值;在流的定位部分,阐述了fseek、ftell和rewind三个函数的原型、功能及使用场景;在文件I/O部分,对比了标准I/O与文件I/O的区别,并重点介绍了open、close、write等系统调用的使用方法,包括参数说明、返回值处理等。此外,还提供了标准I/O与文件I/O函数接口的对应关系表,以及文件描述符的特点和使用注意事项。全文从实际应用角度出发,为文件操作提供了清晰的指导。
2025-08-12 18:32:53
668
原创 Linux学习—软件编程(IO)
摘要:本文介绍了Linux系统中的IO操作概念,重点讲解了标准IO的相关知识。主要内容包括:1)文件类型分类(普通文件、块/字符设备文件等);2)标准IO的操作步骤和常用接口(fopen/fclose、读写函数等);3)文件的打开模式说明;4)标准IO缓存机制(全缓存、行缓存、不缓存三种类型)。文章详细说明了标准IO函数的使用方法、参数说明和注意事项,并解释了与终端相关的三种特殊流(stdin/stdout/stderr)及其缓存特性。
2025-08-11 18:50:21
1134
原创 Linux学习--软件编程(shell命令)
本文总结了Linux系统Shell编程的核心内容,包括常用命令、脚本编写和编程结构。常用命令涵盖文件操作(ls/cd/cp等)、查看命令(cat/head/tail)、通配符、查找命令(find/whereis)、管道和重定向等操作。Shell脚本部分详细介绍了脚本编写步骤、变量类型(环境/位置/自定义变量)、分支结构(if/case)、循环结构(while/until/for)以及数组和函数的使用方法。文章还对比了编译型与解释型语言的特点,并提供了文件压缩、用户管理等实用命令。这些内容为Linux系统管理
2025-08-09 17:09:42
750
原创 Linux学习-数据结构(哈希表)
本文摘要: 哈希表部分介绍了哈希算法原理(将数据映射为键值实现O(1)查找)、哈希碰撞概念及实现方法(以0-100数据为例,用个位数作为键值)。详细说明了哈希表的四种操作:插入(按键值排序插入链表)、遍历(按索引顺序输出)、查找(通过键值定位)、销毁(释放内存)。排序查找部分对比了五种算法:冒泡排序(相邻比较)、选择排序(找最小值)、插入排序(元素插入有序序列)、希尔排序(分步长插入)、快速排序(递归分治),时间复杂度从O(n²)到O(nlogn)不等。最后介绍了折半查找的递归实现方法。全文通过代码示例展示
2025-08-08 18:32:29
724
原创 Linux学习-数据结构(二叉树)
摘要:本文系统介绍了树形数据结构的基本概念和操作。主要内容包括:1)树形结构的基本术语(节点、层、高度、深度、度等);2)二叉树的定义与分类(满二叉树、完全二叉树);3)二叉树的遍历方式(前序、中序、后序的深度优先遍历和层序遍历);4)完全二叉树的C语言实现,包括创建、遍历(递归实现)和销毁等操作。文章重点讲解了二叉树的性质及其在程序中的实现方法,为理解和应用树形数据结构提供了理论基础和编程实践指导。
2025-08-07 18:34:19
617
原创 Linux学习-数据结构(栈和队列)
本文介绍了栈和队列两种线性数据结构的概念及实现。栈遵循"先进后出"原则,包含顺序栈(空增栈、空减栈、满增栈、满减栈)和链式栈两种实现方式,详细展示了创建、销毁、判断空/满、入栈/出栈等操作的代码实现。队列遵循"先进先出"原则,分为顺序队列(含循环队列处理)和链式队列,同样提供了创建、销毁、入队/出队等操作的完整代码示例。两种数据结构在实现上都考虑了空间管理和边界条件处理,如循环队列通过牺牲一个单元解决队满判断问题。
2025-08-06 17:31:09
636
原创 Linux学习-数据结构(链表)
本文介绍了三种链表结构的实现方法:双向链表、循环链表和内核链表。双向链表部分详细说明了空链表创建、头插/尾插法、遍历、查询、修改、删除和销毁等操作;循环链表部分在双向链表基础上增加了首尾相连特性,实现了类似操作;内核链表部分则介绍了一种Linux内核特有的链表结构,其特点是将链表节点嵌入数据结构中。全文通过C语言代码展示了各种链表操作的具体实现,包括节点定义、内存分配和指针操作等关键技术点,为链表数据结构的学习提供了实用参考。
2025-08-05 18:36:51
418
原创 Linux学习—数据结构(链表2)
本文介绍了单向链表和双向链表的基本操作。主要内容包括:单向链表的查找、修改、尾插法插入、销毁、查找中间节点、查找倒数第k个节点、删除中间节点、倒置以及冒泡排序和选择排序的实现方法;双向链表的创建空链表操作。重点讲解了各操作的实现思路和关键代码片段,如通过快慢指针查找中间节点和判断环的存在,以及链表的倒置和排序算法实现。这些操作为理解链表数据结构的核心概念和实际应用提供了基础。
2025-08-04 20:06:14
940
原创 Linux学习--数据结构
摘要:本文介绍了数据结构的基本概念和链表操作。数据结构包括逻辑结构(线性/非线性)和存储结构(顺序/链式/散列),重点分析了时间复杂度和空间复杂度的衡量标准。详细讲解了链表的特点、分类(单向/双向/循环)及实现方法,包括节点定义、头插法、遍历和删除等操作。最后简要介绍了Makefile工程管理工具的基本使用规则和编译语法。文章内容涵盖数据结构基础知识和链表的具体实现,为程序设计提供了理论基础和实践指导。
2025-08-02 18:18:49
1132
原创 Linux学习--C语言(构造数据类型、位运算符、内存管理)
本文介绍了C语言中构造数据类型和内存管理的核心概念。主要内容包括:1.结构体的定义、初始化、成员访问、存储方式及传参方法;2.共用体的定义及其在判断内存大小端中的应用;3.枚举类型的定义和使用;4.位运算符的使用和优先级;5.内存管理中栈区、数据区和堆区的特点及malloc/free函数的使用。通过多个示例代码演示了结构体数组操作、内存大小端判断、枚举常量应用等实际场景,并提供了包含学生成绩处理功能的完整作业代码。
2025-07-30 18:27:05
966
原创 Linux学习--C语言(指针4、结构体)
本文摘要: 二维数组与指针数组传参方式:二维数组使用数组指针(int(*)[3]),指针数组使用二级指针(char**) void*指针特性:可隐式转换为其他指针类型,常用于通用参数传递 结构体详解: 定义方式及嵌套结构体 成员访问方法(.和->操作符) 内存对齐规则(按最大成员类型对齐) 传参建议(优先传地址提高效率) 实践案例: 日期结构体处理(闰年判断/天数计算) 字符串单词逆序算法实现 代码示例包含结构体初始化、成员访问、函数封装等完整实现。
2025-07-29 20:02:43
750
原创 Linux学习--C语言(指针3)
本文摘要:文章系统讲解了C语言中的指针和数组相关概念,包括指针函数(返回指针的函数,不能返回局部变量地址)和函数指针(指向函数的指针变量,用于实现函数回调)。详细介绍了二级指针的定义和使用场景(如修改外部指针变量、指针数组传参)。深入分析了指针数组(元素为指针的数组)和数组指针(指向数组的指针)的区别与应用,包括操作二维数组字符串的排序实现。最后提供了三个编程作业:字符串转整型、字符串操作函数实现(strlen/strcpy/strcat/strcmp)以及字符串数组排序。文中通过代码示例展示了关键概念的实
2025-07-28 18:42:47
600
原创 Linux学习--C语言(指针2)
本文主要讲解了C语言中指针与数组的关系及其应用。首先说明数组名是指向首元素的指针常量,介绍了数组访问的等价形式a[n]和*(a+n),以及数组作为函数参数的三种传参方式。其次详细解析了const指针的四种形式及其特性,包括指针可变性与指向空间的可修改性。最后区分了指针函数(返回指针的函数)和函数指针(指向函数的指针),并给出了字符串处理函数(如strlen、strcpy等)的实现示例。文章还包含一个计算特殊数列和的函数实现,通过循环累加构建数字并求和。
2025-07-26 18:26:37
557
原创 Linux学习--C语言(指针)
本文介绍了指针的基本概念、特点及其在C语言中的应用。主要内容包括:1)指针的特点与优势;2)指针与地址的关系;3)指针变量的定义与使用注意事项;4)指针的算术运算规则;5)指针作为函数参数的两种传递方式。此外还提供了两个编程实例:1)日期处理函数,实现闰年判断和天数计算;2)数字各位求和函数。文章系统性地讲解了指针的核心概念和常见操作,为理解和应用指针提供了基础指导。
2025-07-25 18:05:43
1007
原创 Linux学习--C语言(函数、预处理命令)
本文摘要:文章主要介绍了C语言中的extern关键字和函数参数传递机制。extern用于声明外部变量或函数,实现多文件共享;函数参数传递分为值传递和数组传递(整型/字符型)。预处理命令包括宏定义(带参/不带参)、头文件包含和条件编译。最后提供了字符串处理函数(strlen、strcpy等)和素数判断函数的实现代码,展示了实际应用场景。
2025-07-24 18:08:48
736
原创 Linux学习--C语言(函数)
文章介绍了函数的基本概念和使用方法,包括函数的定义、调用和声明三种形式,详细讲解了变量作用域、生存周期和存储类型等关键特性。重点分析了局部变量与全局变量的区别,以及static关键字的四种作用。同时阐述了函数调用中的参数传递机制,包括值传递和递归函数的实现原理,并以阶乘计算为例说明递归函数的使用注意事项。最后提供了三个编程练习题目,涉及最大公约数、最小公倍数、水仙花数判断和斐波那契数列递归实现等实际应用场景。
2025-07-23 18:47:55
841
原创 Linux学习--C语言(数组3、函数1)
本文介绍了C语言中字符串操作和二维字符数组的基本知识。主要内容包括:1) 字符串常用函数strcpy、strcat、strcmp的使用方法和注意事项;2) 二维字符数组的定义、初始化、访问和打印;3) 函数的定义、调用和声明方法。文章最后布置了四个作业任务:手动实现strlen、strcpy、strcat和strcmp函数的功能。
2025-07-22 18:16:08
467
原创 Linux学习--C语言(数组2)
本文介绍了C语言中数组的常见操作与应用。主要内容包括:1.一维数组操作:获取最大值、倒置元素、冒泡排序和选择排序的实现方法及核心代码;2.二维数组:定义方式、元素访问、初始化方法及存储特性;3.字符数组:字符串存储、访问打印、初始化赋值及与字符串相关的函数使用(如strlen和sizeof的区别)。
2025-07-21 17:48:00
1769
原创 Linux学习--C语言(数组1)
本文介绍了数组的基本概念、分类及一维整型数组的相关操作。主要内容包括:1.数组的定义和分类(整型、字符型、多维数组);2.一维整型数组的定义形式、元素访问规则及初始化方法(全部、局部和默认初始化);3.数组的存储特性(连续性和有序性)及常见操作;4.两个编程作业题:计算歌手比赛平均分(去掉最高最低分)和输出符合条件的特殊三位数。重点强调了数组元素访问时的下标范围和初始化时的注意事项。
2025-07-19 18:36:18
269
原创 Linux学习--C语言(流程控制1)
本文介绍了程序流程控制的三种基本结构:顺序、分支和循环结构。重点讲解了分支结构中的if和switch语句,包括简单分支、阶梯分支和嵌套分支的使用方法;循环结构中的while、do-while和for循环的语法格式。同时详细说明了关系运算符、逻辑运算符和三目运算符的使用规则。最后提供了数据交换的基本方法和两个编程练习题目。
2025-07-18 18:03:29
982
原创 Linux学习--C语言(输入输出函数、流程控制)
本文介绍了C语言中的输入输出函数和流程控制结构。输入输出部分详细讲解了字符输入输出函数(putchar/getchar)、格式化输入输出(printf/scanf)以及字符串输入输出(puts/gets)的使用方法和注意事项,重点说明了格式控制符的使用技巧。流程控制前半部分阐述了关系运算符和逻辑运算符的真值表特性,并介绍了if分支结构的基本语法。全文通过具体代码示例展示了各种输入输出函数和流程控制语句的实际应用,为C语言初学者提供了实用的编程参考。
2025-07-17 19:22:20
2243
1
原创 Linux学习--C语言(表达式、运算符)
本文摘要介绍了C语言中表达式和运算符的基本概念与使用规范。表达式是由运算符连接变量或常量组成的式子,具有确定的值和类型。重点讲解了隐式类型转换规则(低精度自动转高精度)和强制类型转换。详细说明了算术运算符(+、-、*、/、%等)、赋值运算符(=、+=等)及其类型转换规则,以及逗号运算符和sizeof运算符的使用。
2025-07-16 17:51:50
938
原创 Linux学习--C语言
本文摘要: 本文系统介绍了C语言基础知识和编程要点。主要内容包括:1)计算机存储体系与数据单位,详述内存/外存差异及二进制转换方法;2)数据类型分类,涵盖整型、浮点型、字符型等的基本特性及存储方式;3)变量与常量的定义与使用规范,特别强调标识常量的宏替换特性;4)编程实践指导,包括变量命名规则和典型编程练习。
2025-07-15 17:51:02
2318
4
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅