- 博客(31)
- 收藏
- 关注
原创 线程管理--线程邮箱
1、定义:线程邮箱是一种高效的线程间通信机制资源消耗低:避免了频繁的加锁与解锁操作,减少了系统开销响应速度快:线程只需要检查自己的邮箱即可获取需要的数据,无需主动抢占资源线程易管理:通过链表形式组织,便于线程的分配、调度与监控。
2025-10-21 12:59:12
230
原创 I2C通信协议
I2C是一种串行半双工同步通信协议,使用SCL时钟线和SDA数据线完成主从设备间的数据传输。其特点包括:通过设备地址实现多设备共享总线;利用开漏输出的线与特性实现冲突检测与仲裁;采用严格的时序规范,包括起始/停止信号、应答机制等。数据传输时MSB先行,时钟线高低电平分别控制数据采样和发送。读写时序包含地址选择、数据传送和应答反馈等步骤,支持单字节和页式读写操作。
2025-09-28 17:27:05
1252
原创 串口通信--UART
本文介绍了数据传输模式及UART通信协议。主要内容包括:1.数据传输模式对比,包括串行/并行通信、单工/半双工/全双工工作模式以及同步/异步通信;2.UART协议详解,说明其作为全双工异步串行通信的特点、波特率计算及数据传输过程;3.提供UART初始化、数据收发等C语言实现示例代码。文章重点阐述了UART在硬件资源占用、通信距离和灵活性等方面的优缺点,并给出具体寄存器配置和收发函数实现方法。
2025-09-26 17:24:28
617
原创 ARM裸机--中断
中断:中断是计算机系统中一种异步事件处理机制,允许CPU打断当前任务,转而执行优先级更高的任务,完成后回到原先的位置继续工作中断源:引发CPU中断的事件或设备,即能够向CPU发出中断的信号源中断按中断的来源可分为外部中断源(硬件中断)、内部中断源(软件中断)GIC是ARM架构中用于集中管理中断的硬件模块,负责接收、分类、优先级排序,并将中断路由到合适的处理器核心Distributor(分发器):全局管理中断优先级、路由和使能状态、决定将中断发送至哪个端口。
2025-09-24 17:41:09
894
原创 ARM裸机--时钟管理单元与定时器
时钟管理单元是嵌入式系统(如ARM架构芯片)中负责生成、分配和调控时钟信号的核心模块主要功能倍频/分频:通过锁相环、分频器组合生成不同频率的信号时钟分配:为CPU、总线、外设等提供独立时钟EPIT是专为周期性中断定时设计的32位向下计数定时器EPIO 定时器通常支持三种时钟源选择EPIO仅支持定时中断功能,不具备输入捕获、PWM输出等特性,适用于精准时间控制。
2025-09-22 19:03:26
1395
原创 ARM裸机--启动代码
本文介绍了ARM启动代码的主要功能和实现方法。启动代码负责初始化异常向量表、配置工作模式栈指针、开启中断允许,并引导程序进入C语言主函数。详细说明了ARM的7种工作模式(用户/系统/管理/FIQ/IRQ/中止/未定义)及其应用场景,以及协处理器(如CP15)在系统控制中的作用。通过示例代码展示了启动代码的关键操作:包括伪操作定义段属性、协处理器配置、异常向量表初始化、工作模式切换和.bss段清零等。特别讲解了如何通过修改CPSR寄存器或使用CPS指令实现工作模式切换。这些操作共同确保ARM处理器正确初始化并
2025-09-18 10:13:37
1025
原创 ARM -- 汇编语言
本文摘要:ARM处理器基于RISC架构,具有7种工作模式和异常处理机制。汇编语言作为低级编程语言,具有硬件依赖性强、执行效率高的特点。文章详细介绍了ARM汇编指令的格式、伪操作、部分核心指令(如MOV、ADD、BIC等)及CPSR标志位。同时展示了如何用ARM汇编实现条件判断、循环结构和函数调用等C语言特性的方法,为嵌入式开发提供底层编程参考。
2025-09-08 19:55:49
1292
原创 Linux软件编程--网络操作
本文介绍了Linux系统中套接字文件的概念和TCP客户端/服务器模型。套接字文件是进程间通信的特殊文件,分为流式套接字(可靠有序)和数据报套接字(实时性强)。TCP C/S模型中,服务器通过socket()、bind()、listen()、accept()等函数建立连接,客户端通过connect()发起请求。详细解析了socket()、connect()、bind()、listen()、accept()等核心函数的功能参数和返回值。这些接口实现了基于TCP协议的网络通信机制,支持IPv4/IPv6地址,为进
2025-08-21 20:27:14
1057
原创 Linux软件编程--网络概述
本文摘要:计算机网络通过通信线路和网络设备连接计算机设备,在TCP/IP协议下实现数据通信和资源共享。核心概念包括:IP地址(32位二进制码,点分十进制表示)、子网掩码(划分网络/主机地址)、DNS(域名解析)和网关(网络协议转换)。网络通信需物理链路(硬件连接)和逻辑链路(协议控制)。OSI七层模型规范网络通信:物理层(比特流传输)、数据链路层(帧传输)、网络层(路由选择)、传输层(TCP/UDP协议)、会话层(会话管理)、表示层(数据格式转换)和应用层(用户程序接口)。
2025-08-21 19:34:58
1082
原创 Linux软件编程--IPC对象
摘要:IPC对象是Linux系统中用于进程间通信的内核数据结构,包括消息队列、共享内存和信号灯三种类型。它们存在于内核空间,生命周期独立于进程。系统提供ipcs/ipcrm命令查看和删除IPC对象。消息队列支持异步通信,接口包括msgget/msgsnd/msgrcv/msgctl;共享内存是最快的通信方式,通过shmget/shmat/shmdt/shmctl操作;信号灯用于进程同步,主要接口为semget/semop/semctl。每种IPC对象都有创建、操作和删除的系统调用,通过key值标识,支持多进
2025-08-19 19:45:58
894
原创 Linux软件编程--进程间通信
本文概述了Linux系统中进程间通信(IPC)的主要方式。首先介绍了进程空间隔离性及IPC的必要性,然后详细讲解了三类传统通信机制:1)管道通信,包括无名管道(pipe)用于父子进程通信和有名管道(mkfifo)支持任意进程通信;2)信号机制,包括常见信号类型(SIGINT、SIGKILL等)及其处理方式(缺省/忽略/捕捉),重点介绍了signal、alarm、kill等信号操作函数;3)其他IPC方式如消息队列、共享内存等。文章着重分析了各种通信方式的特点、适用场景及实现方法,特别指出管道操作的阻塞特性和
2025-08-18 18:15:29
900
原创 Linux软件编程--线程
本文系统介绍了线程的基本概念与应用。线程作为CPU调度的最小单元,共享进程资源但独享栈空间,相比多进程具有更高效率和更低资源开销。详细解析了线程创建(pthread_create)、回收(pthread_join)等核心API,以及线程属性设置方法。针对多线程共享资源导致的竞争问题,重点阐述了互斥锁(pthread_mutex)和信号量(semaphore)两种同步机制的原理及函数接口,并分析了死锁产生的四个必要条件。文章还对比了多线程与多进程在效率、通信、安全性等方面的差异,为开发者选择并发模型提供了理论
2025-08-16 18:35:37
1320
原创 Linux编程--进程
创建一个新的进程,新的进程称为子进程,调用fork的进程称为父进程。查看该时刻的所有进程信息(强调父子关系和完整的进程信息)查看该时刻所有的进程信息(强调资源占用和进程的状态)根据 CPU 占用率和内存占用率查看当前内存的信息。renice -n 优先级编号 进程PID。ps -ef | grep 进程名 查找与进程名对应的进程信息。示例:nice -n 优先级编号 进程名。示例:kill -编号 进程PID。父进程中返回子进程的PID。获得调用函数进程的PID号。2.获取 PID 号与 父进程 PID。
2025-08-14 20:08:24
912
原创 Linux编程--文件与目录 IO
* Length of this record 当前记录字节数 */off_t d_off;/* Null-terminated filename 文件名*/ino_t d_ino;/* Inode number 索引节点号 *//* Type of file 文件类型 */O_CREAT :文件不存在创建(注意要给定创建文件的权限)O_EXCL:文件存在报错。O_TRUNC 文件存在截断为0(清0)SEEK_SET:描述符初始位置。可以通过 | 添加以下功能。
2025-08-13 18:50:15
1118
原创 Linux软件编程--标准IO
本文介绍了Linux系统中的I/O操作和文件概念。主要内容包括:1)I/O操作以文件为对象,Linux将一切视为文件;2)文件分类(块设备、字符设备、目录、普通文件等)及其操作方式;3)标准I/O的特点(带缓存、效率高)和缓存类型(全缓存/行缓存/不缓存);4)ASCII码文件和二进制文件的区别;5)详细讲解标准I/O接口函数(fopen、fclose、fputc、fgetc等)及其参数和返回值。文章系统梳理了Linux文件系统和标准I/O操作的核心概念和API接口。
2025-08-11 20:06:13
1419
原创 数据结构--哈希表与排序、选择算法
将数据通过哈希算法映射成一个键值,存取都在同一位置实现数据的高效存储和查找,并通过这种方式来降低时间复杂度。在该板块中,我将构建一个存放0 - 100 熟知的哈希表,并以此为里说明哈希表的实现方法。思路:与哈希表的遍历思路相同,分别查找或删除每一个同上的链表。多个数据通过算法后得到简直相同的现象叫哈希碰撞。利用循环语句访问哈希表每一个桶区的链表。
2025-08-08 18:49:13
622
原创 数据结构--二叉树
本文系统介绍了树形结构和二叉树的原理与实现方法。主要内容包括:1.树形结构基本概念,如节点、前驱、后继、层数等;2.二叉树的定义及分类(完全二叉树、满二叉树);3.二叉树的遍历算法(前序、中序、后序的递归/非递归实现,层序遍历);4.二叉树的基本操作实现(创建、销毁、获取高度等)。重点阐述了递归思想在树结构操作中的应用,并提供了完整的C语言代码示例,包括节点定义、创建函数、各种遍历方式的实现等。文章还特别说明了完全二叉树与非完全二叉树在创建方法上的区别。
2025-08-07 20:54:13
883
原创 数据结构--栈和队列
本文介绍了栈和队列的基本概念及其操作实现。栈具有"后进先出"特性,分为顺序栈和链式栈;队列具有"先进先出"特性,分为循环队列和链式队列。文章详细讲解了顺序栈的创建、判空判满、压栈出栈等操作,以及链式栈的实现方法。对于队列,重点介绍了循环队列的空满判定条件(头尾相同时为空,尾+1等于头时为满)和基本操作。所有数据结构都通过C语言代码示例展示了具体实现过程,包括结构体定义、内存分配和指针操作等关键步骤。
2025-08-06 20:09:50
1502
原创 数据结构--链表
本文系统介绍了数据结构中的链表原理及操作实现。主要内容包括:1)数据结构基础概念与分类;2)链表的特点及与顺序表的对比;3)链表的基本操作(创建、插入、删除、显示、销毁);4)链表高级操作(查找中间/K节点、无头节点删除、倒置);5)链表排序算法(冒泡排序和选择排序)的具体实现。全文以C语言代码为例,详细讲解了单向链表的各类操作实现思路和方法,为理解和应用链表数据结构提供了完整的技术参考。
2025-08-04 00:15:00
841
原创 C语言--构造数据类型
本文介绍了C语言中结构体、共用体和枚举的基础知识。结构体部分包括定义与初始化方法、变量访问方式(通过.和->运算符)、内存存储规则(对齐原则)以及结构体数组和参数传递。共用体部分解释了其共享内存的特性及判别内存大小端的方法。枚举部分则说明了枚举常量的定义规则和实际应用场景,如用枚举实现限行逻辑。这些复合数据类型为C语言提供了更灵活的数据组织方式,是程序设计中的重要工具。
2025-07-30 19:54:18
626
原创 C语言--指针Part2
本文详细介绍了C语言中指针的相关概念及应用。主要内容包括:1)指针函数(返回指针的函数)和函数指针(指向函数的指针)的区别与使用场景;2)二级指针的定义及在修改外部指针变量和指针数组传参中的应用;3)指针数组(存放指针的数组)和数组指针(指向数组的指针)的区别,以及它们在字符串操作和二维数组访问中的具体应用;4)void*指针的特性及其在函数参数和返回值中的通用性。文中通过代码示例展示了指针在函数嵌套调用、计算器实现、字符串排序等场景中的实际应用。
2025-07-28 18:46:41
988
原创 C语言--指针Part1
本文概述了指针的核心概念及其应用。指针本质上是内存地址,指针变量用于存储地址(64位系统中占8字节)。关键操作包括取地址(&)和取值(*)运算符,指针类型决定了其算术运算的步长(如int型偏移4字节)。指针变量需注意野指针和空指针问题,可通过直接或间接方式访问数据。文章还介绍了指针的算术运算规则、基本使用方法,以及在函数参数传递中的两种方式:值传递(保护实参)和地址传递(允许修改实参)。这些概念为理解指针在内存管理和数据操作中的作用奠定了基础。
2025-07-25 20:21:25
650
原创 C语言--函数
本文摘要介绍了C语言函数相关概念:1)函数定义与调用格式,包括返回值类型、形参实参匹配;2)变量作用域与生命周期(局部/全局变量);3)内存存储区域(栈区、数据区等)及变量存储类型(auto/static等);4)递归函数的基本原理和使用注意事项。重点说明了static关键字对变量生命周期和存储位置的影响,以及不同存储区域的内存管理特点。
2025-07-23 18:54:12
7408
原创 C语言--数组
C语言数组知识摘要:数组是存储同类型数据的集合,分为一维/二维整型和字符型数组。一维整型数组定义时元素个数需为常量,只能操作单个元素,下标必须合法且为整型。数组支持三种初始化方式:全部、局部和默认初始化。数组具有连续存储特性,空间大小=元素大小×元素个数。介绍了冒泡排序(相邻比较交换)和选择排序(查找最值交换)两种排序算法及其实现代码。数组操作示例展示了元素的访问和修改方法。
2025-07-20 15:00:47
264
原创 C语言--流程控制
本文介绍了程序流程控制的三种基本结构:顺序结构、分支结构和循环结构。重点讲解了分支结构的if语句(包括单if、if-else和if-else if-else链)和switch语句的使用方法及注意事项。同时详细说明了循环结构中的while、do-while和for循环的执行流程及区别,并介绍了break、continue等辅助控制语句的功能。每种结构都配有具体的代码示例,如用if判断数值大小、使用switch进行多条件判断、以及各类循环的计数打印等。这些控制结构是编程中实现逻辑判断和重复操作的基础工具。
2025-07-18 19:34:32
696
原创 C语言--输入输出函数
C语言输入输出函数总结:1)字符I/O:putchar输出字符,getchar获取字符;2)格式化I/O:printf/scanf需对应格式符,scanf需取地址符;3)字符串I/O:puts自动换行,gets可接收空格字符串。格式控制符包括%d、%f等,支持精度(.mf)、对齐(%-nd)等格式设置。使用时需包含stdio.h头文件,注意数据类型的格式匹配。
2025-07-17 18:33:33
580
原创 C语言--数据类型转换与运算符
本文摘要: C语言数据类型转换包括混合运算转换和强制转换。混合运算时,低精度类型自动转为高精度类型,其中char/short转int,float转double。运算符分为算术、赋值、逻辑等类型,其中算术运算符包含自增自减运算,赋值运算符需注意类型匹配问题。其他运算符包括逗号、sizeof和三目运算符。运算符优先级遵循括号>单目>算术>关系>逻辑>赋值的规律,混合运算需特别注意类型转换和优先级关系。
2025-07-16 18:27:59
493
原创 C语言--数据类型
本文介绍了C语言的基本数据类型,包括整数类(有符号/无符号short/int/long)、字符型(char)、浮点型(float/double)、void类型和布尔型(bool),详细说明了各类型的存储空间、取值范围和存储方式。同时阐述了常量(整型、字符、浮点及标识常量)的特性,以及变量的定义规则(命名要求、初始化注意事项)。文章系统梳理了C语言基础数据类型的关键特性,为编程实践提供了清晰的数据类型参考。
2025-07-15 19:36:04
467
原创 Linux基础
本文介绍了Linux系统的基础操作和开发环境。主要内容包括:1)常用指令如目录操作(pwd/ls/cd)、文件管理(mkdir/rm/cp/mv);2)Linux树形文件结构及各目录功能;3)C语言开发工具:vim编辑器基本操作和gcc编译器四阶段编译流程。这些知识为Linux系统使用和C程序开发提供了基础指导。
2025-07-14 19:15:17
326
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅