- 博客(37)
- 收藏
- 关注
原创 IIC基础
摘要:通信模式分为单工(单向传输,如广播)、半双工(双向交替传输,如对讲机)和全双工(同时双向传输,如电话)。串行通信(如UART)适合长距离传输,而并行通信(如DDR总线)短距离速度快。同步通信(如SPI)实时性强,异步通信(如UART)更灵活。电气标准包括TTL(短距)、RS-232(中距)和RS-485(长距抗干扰)。选择通信方式需权衡方向性、速率、距离及抗干扰需求。(150字)
2025-09-17 08:54:55
681
原创 UART
本文系统介绍了通信技术的基本模式与实现方式。在传输方向上,详细解析了单工、半双工和全双工三种通信模式的特点及应用场景。在数据组织方式上,对比了串行通信与并行通信的优劣势及适用领域。在同步机制方面,阐述了异步通信和同步通信的技术原理及典型协议。最后,从电气特性角度分析了TTL、RS-232、RS-485等常见接口标准的电平规范及抗干扰能力。全文通过多维度对比,为理解现代通信技术提供了系统化的知识框架。
2025-09-15 19:52:43
477
原创 ARM 基础(3)
本文介绍了ARM汇编与C语言的交互调用规范及异常处理机制。在函数调用方面,前4个参数通过R0-R3寄存器传递,超出部分使用栈空间,返回值存储在R0或浮点寄存器。在异常处理方面,ARM架构定义了7种异常类型,每种对应特定的处理器模式,通过异常向量表跳转,具有固定优先级。重点包括:函数调用的参数传递规则、寄存器保存要求、异常触发时的自动模式切换机制,以及不同特权模式下的专用寄存器使用规范。这些机制为嵌入式系统开发提供了底层硬件支持。
2025-09-09 17:15:02
337
原创 ARM 基础(2)
ARM处理器提供7种工作模式(用户/快速中断/外部中断/管理/终止/未定义/系统模式),通过异常自动切换或手动修改CPSR实现。异常处理机制包含向量表和现场保存流程,12位立即数需满足特定编码规则。跳转指令中BL用于函数调用并保存返回地址,BX支持指令集切换。栈管理采用满降栈结构,通过FP和SP寄存器维护栈帧。这些核心机制(模式切换、异常处理、指令编码、栈操作)是ARM架构底层开发的关键,具体实现需参考不同处理器版本的技术手册。
2025-09-08 20:42:10
918
原创 ARM 基础
RISC与CISC是两种不同的处理器架构设计理念。RISC(精简指令集)采用简单指令、固定长度,强调单周期执行和寄存器操作,适合移动设备(如ARM芯片);CISC(复杂指令集)通过多功能指令实现高代码密度(如x86),但执行周期不固定。现代处理器常融合两者优势,如x86内部将复杂指令分解为微操作。ARM架构同时支持冯·诺伊曼和哈佛存储结构,具有七种工作模式管理不同权限级别,采用异常向量表机制处理中断等异常事件。
2025-09-08 13:52:33
608
原创 嵌入式学习 51单片机(3)
摘要:UART是一种全双工异步串行通信协议,采用RXD/TXD双线实现双向数据传输。其特点包括LSB优先、可配置数据位(5-9位)、可选奇偶校验及停止位。相比同步通信,UART无需时钟线,通过预定义波特率实现同步。典型配置如9600,8,N,1(波特率/数据位/校验/停止位),需保证收发双方参数一致。应用时需注意电平转换(TTL与RS232)、波特率误差控制(<2%)及抗干扰设计(如RS485差分信号)。UART凭借结构简单、成本低的优势,在嵌入式系统中广泛应用,现代开发常通过USB转UART芯片实现
2025-09-04 21:59:52
676
1
原创 嵌入式学习 51单片机(2)
本文介绍了单片机GPIO、中断、定时器和PWM的基础应用。GPIO支持输入/输出模式,按键检测通过读取引脚电平实现。中断机制包括外部、定时器和串口中断,需配置IE和TCON寄存器。定时器可用于精确时序控制,通过TMOD配置工作模式。PWM通过调节占空比控制设备功率,无源蜂鸣器需外部PWM驱动。这些技术广泛应用于嵌入式系统控制,如按键响应、时序管理和音频输出。
2025-09-03 17:23:15
700
原创 嵌入式学习 51单片机基础
本文摘要:嵌入式系统是以应用为中心的专用计算机系统,以51单片机为代表,介绍了其发展历程、核心概念及厂商特点。对比了CPU、MCU、MPU等处理器类型的功能差异,解析了ROM、RAM等存储器的特性。重点阐述了51单片机内部结构(CPU、存储器、外设模块)和三大总线功能,并详细说明了LED模块的连接方式和寄存器操作方法。针对数码管应用,解释了位选/段选原理、静态/动态显示技术以及共阴极数码管的驱动注意事项,提供了实用的段码表和示例代码。全文系统性地梳理了嵌入式系统与51单片机的关键技术要点。
2025-09-02 20:17:13
1154
原创 进程与线程
本文主要介绍了进程和线程的基本概念、区别及相关操作。进程是程序执行的动态过程,拥有独立的内存空间;线程是轻量级进程,共享进程资源但独享栈区。多线程适合高频任务,多进程则更安全稳定。文章详细讲解了进程创建、调度、通信(管道、消息队列、共享内存等)和同步机制(互斥锁、信号量),以及线程创建、属性和同步方法。同时对比了进程与线程在资源开销、通信机制、崩溃影响等方面的差异,并提供了相关函数接口和代码示例。最后总结了不同IPC方式的适用场景和选择建议。
2025-08-19 17:24:25
1004
原创 进程间的通信
Linux系统提供了多种进程间通信(IPC)机制,包括管道、消息队列、共享内存、信号量、套接字和信号。管道适用于父子进程简单通信;消息队列支持结构化数据传输;共享内存效率最高但需同步;信号量用于资源访问控制;套接字支持网络通信;信号用于异步通知。选择时需考虑性能、数据结构和同步需求,如高频通信推荐共享内存+信号量组合,结构化数据宜用消息队列。使用中需注意同步问题、资源释放和错误处理。
2025-08-19 17:21:49
757
原创 进程与线程(线程)
本文摘要:线程是轻量级进程,共享进程的文本段、数据段和堆区,独享栈区(默认8M)。与进程相比,线程是CPU调度的最小单元,切换开销小但崩溃会影响整个进程。多线程适合CPU密集型任务,通过pthread系列函数管理,需注意线程同步(互斥锁、信号量)和死锁避免(加锁顺序一致)。线程通信通过共享全局变量实现,操作时需加锁保护。线程属性分"加入"(需手动回收)和"分离"(自动回收)两种。信号量可控制资源访问,初始化为非零值,sem_wait会阻塞直到资源可用。
2025-08-16 17:13:34
855
原创 进程与线程(完整版)
本文主要介绍了进程和线程的基本概念及区别。进程是程序动态执行的过程,拥有独立的虚拟内存空间,包括用户空间(代码区、数据区、堆栈)和内核空间。操作系统通过MMU实现虚拟地址到物理地址的映射,多进程调度采用时间片轮转等算法实现宏观并行。线程作为轻量级进程,共享进程的代码和数据段,但拥有独立栈区(默认8M)。相比进程,线程创建和切换开销更小,但需注意线程同步问题。文章详细介绍了进程/线程的创建、调度、回收等函数接口(如fork、exec、pthread_create等),并比较了多进程和多线程在资源开销、通信机制
2025-08-16 09:14:18
978
原创 进程和线程 (线程)
本文摘要:线程是轻量级进程,共享进程地址空间但独享栈区(默认8M),是CPU任务调度的最小单元。相比进程,线程创建/切换开销小但稳定性较低,崩溃会影响整个进程。多线程适合CPU密集型任务,通过共享内存通信;多进程则更安全隔离。关键函数包括pthread_create创建线程、pthread_join回收线程(兼具同步功能)。需注意线程共享数据需同步避免竞态,且必须显式回收防止僵尸线程。线程调度遵循宏观并行、微观串行原则。
2025-08-15 20:15:44
815
原创 Linux编程 进程与线程(进程)
本文摘要介绍了操作系统中的进程管理核心概念。主要内容包括:1)进程与程序的区别,进程空间分布(用户空间和内核空间);2)虚拟地址与物理地址转换机制;3)多进程存储与调度策略(时间片轮转等);4)关键进程函数(fork、exec等)及进程状态(孤儿/僵尸进程);5)进程回收方法(wait/waitpid)。重点阐述了父子进程关系、进程生命周期管理及避免僵尸进程的解决方案,同时说明了exec函数族在进程代码替换中的应用。
2025-08-15 16:20:41
1438
原创 linux 时间相关的函数接口
本文介绍了三种时间类型及其转换函数:1)time_t表示1970年至今的秒数,用于时间计算;2)struct tm存储年月日时分秒的结构体;3)char*字符串格式时间。主要函数包括:time()获取当前时间戳,localtime()将time_t转为tm结构,mktime()将tm转为time_t,ctime()将time_t转为字符串。这些函数实现了三种时间类型之间的相互转换,为时间处理提供了基础支持。
2025-08-14 09:09:22
313
原创 Linux编程 IO(标准io,文件io,目录io)
C语言标准IO与文件IO操作指南 本文系统介绍了C语言中标准IO和文件IO的核心知识点。标准IO通过<stdio.h>提供带缓冲的高效文件操作,包括fopen/fclose等基本函数,以及fgetc/fputc、fgets/fputs等字符/字符串操作,还详细说明了fread/fwrite二进制读写和fseek/ftell等文件定位功能。同时提供了文件拷贝和字符统计的实用案例。文件IO部分阐述了无缓冲的系统级操作,包括open/close/read/write等系统调用,以及与标准IO的转换方法
2025-08-13 19:32:18
960
原创 c语言 标准IO
C语言标准IO库(<stdio.h>)提供高效的文件操作函数,包括fopen/fclose(文件开关)、fgetc/fputc(字符读写)、fgets/fputs(字符串读写)、fscanf/fprintf(格式化读写)以及fread/fwrite(二进制读写)。其中,fseek/ftell用于文件定位,fread/fwrite可实现二进制文件复制。统计文件字符频率的两种实现方案:数组法通过256维数组直接统计ASCII字符出现次数,简单高效;链表法则动态存储字符节点,适合处理超大字符集。两种方
2025-08-13 13:42:58
677
原创 文件IO(1)
摘要 本文介绍了文件IO的基本概念和系统调用机制。文件IO与标准IO的主要区别在于缓存机制和适用范围:文件IO无缓存,适合硬件设备操作;标准IO是库函数,具有缓存。系统调用是Linux内核特有功能,而库函数可跨平台使用,最终仍需调用系统调用。文章重点介绍了文件IO的函数接口,包括文件描述符的特性(非负整数、最小可用取值、数量上限)和三个特殊文件描述符(0:标准输入,1:标准输出,2:标准错误)。同时提及了文件打开/关闭操作,以及标准IO与文件IO的打开方式对比,最后简要说明了文件IO的写操作(write)功
2025-08-12 22:26:23
196
原创 嵌入式学习 标准IO(完整版)
C语言标准IO库提供了高效的文件操作函数,定义在<stdio.h>中。核心函数包括:fopen/fclose用于文件开关,支持多种打开模式;fgetc/fputc实现字符读写;fgets/fputs处理字符串;fscanf/fprintf进行格式化I/O;fread/fwrite用于二进制数据块操作;fseek/rewind/ftell控制文件指针位置。这些函数通过FILE结构体指针操作文件流,并具有缓冲机制,相比低级IO效率更高。标准IO是C语言文件处理的基础工具集。
2025-08-12 22:21:49
779
原创 标准io(1)
摘要:C语言标准I/O(stdio.h)提供高效文件操作功能,基于缓冲机制实现。核心内容包括:文件指针FILE*、缓冲类型(全/行/无缓冲)、文本/二进制流模式。主要函数包括:fopen/fclose(文件开闭)、fgetc/fputc(字符I/O)、fgets/fputs(行I/O)、fscanf/fprintf(格式化I/O)。错误处理通过ferror、feof和clearerr实现。标准I/O相比系统调用具有更高效率,适合处理结构化数据,使用时需注意缓冲特性和错误检查。
2025-08-11 21:10:53
427
原创 哈希表的操作 排序查找算法
本文介绍了哈希表、排序和查找算法的核心原理与实现。哈希表部分详细讲解了哈希算法、碰撞处理以及C语言实现的插入、遍历、查找和销毁操作。排序算法方面,重点分析了冒泡排序(O(n²)稳定)、选择排序(O(n²)不稳定)、插入排序(O(n)~O(n²)稳定)和希尔排序(基于插入排序改进,O(nlogn)~O(n²)),并提供了快速排序的分治实现(平均O(nlogn))。查找算法涵盖了折半查找(O(logn)需有序)和顺序查找(O(n)),包含完整代码示例和优化建议。全文通过具体代码展示了各算法的实现细节与性能特征。
2025-08-11 14:57:11
978
原创 数据结构 二叉树
本文系统介绍了二叉树的基本概念和操作。首先阐述了二叉树作为非线性数据结构的特点,包括节点类型(根节点、分支节点、叶子节点)、树的相关术语(前驱、后继、层数、高度、深度等)。重点讲解了完全二叉树的创建与遍历方法:深度优先遍历(前序、中序、后序)的递归实现,广度优先遍历(层序遍历)的队列实现,以及节点定义、树销毁等基本操作。此外还介绍了非完全二叉树的创建方法、获取树高度的递归算法,以及深度优先遍历的非递归实现技巧(使用栈结构)。文章通过代码示例详细展示了各种操作的实现过程,为理解和应用二叉树提供了全面指导。
2025-08-07 17:23:57
923
原创 数据结构 栈和队列
本文系统介绍了栈和队列这两种线性数据结构。栈遵循"先进后出"原则,分为顺序栈和链式栈,详细讲解了顺序栈的创建、销毁、压栈、出栈等操作实现。队列遵循"先进先出"原则,包含循环队列和链式队列两种实现方式,重点阐述了循环队列的判空、判满条件及入队、出队操作。此外,还介绍了基于内核链表实现的栈和队列,展示了如何利用链表特性实现这两种数据结构。文中提供了完整的C语言代码示例,包括类型定义、基本操作函数实现等关键内容。
2025-08-07 15:01:54
485
原创 嵌入式学习 双向链表 循坏链表 内核链表
本文介绍了三种常见的链表数据结构及其实现。双向链表支持双向遍历,每个节点包含前驱和后继指针,详细展示了C语言下的节点定义、创建、插入、删除和遍历操作。循环链表通过尾节点指向头节点形成环形结构,讨论了其实现方法和应用场景,如进程调度和约瑟夫问题。最后阐述了Linux内核链表的独特设计,其特点是将链表节点嵌入数据结构中,并详细解析了list.h中的核心操作宏定义和函数。三种链表各具特点:双向链表便于双向访问但内存开销大,循环链表适合环形数据处理,内核链表则实现了与数据结构的解耦,具有更高的通用性。
2025-08-05 20:02:56
626
原创 嵌入式学习 数据结构——02(含01)单向链表
本文系统介绍了数据结构与算法的核心概念,重点解析了链表结构及其操作。主要内容包括:1) 程序设计的本质是"数据结构+算法";2) 衡量代码效率的时间/空间复杂度分析方法;3) 数据结构的逻辑与存储分类;4) C语言链表实现细节,涵盖节点定义、创建、插入/删除、遍历等基础操作,以及查找中间/倒数节点、反转、排序等进阶操作。通过对比链表与数组的特性差异,阐述了链表在动态内存管理和插入删除效率方面的优势。文章提供了完整的代码示例,包括头插/尾插法、冒泡/选择排序等典型实现,是理解链表数据结构的
2025-08-04 21:10:27
1327
原创 嵌入式学习 数据结构
本文系统介绍了程序设计与数据结构的基础概念。核心内容包括:1)程序本质是数据结构与算法的结合,其中数据结构定义了数据存储方式,算法描述操作数据的方法;2)衡量代码质量的时空复杂度分析;3)数据结构的逻辑结构(线性/非线性)和存储结构(顺序/链式等);4)重点讲解链表实现,包括节点定义、创建、插入(头插/尾插)、删除、遍历等操作,并提供了C语言代码示例;5)对比链表与数组的特性差异,突出链表在动态内存和插入删除方面的优势。文章通过具体代码演示了单向链表的基本操作流程,为理解数据结构提供了实践指导。
2025-08-03 23:44:02
554
原创 嵌入式学习 c语言 共用体 枚举
本文对比了C语言中共用体(Union)和枚举(Enum)的特性。共用体通过共享内存空间节省内存,同一时间只能存储一个成员,适合处理多类型数据;枚举则定义一组整型常量,提升代码可读性。表格展示了二者的语法、内存占用、赋值方式等差异,并提供了代码示例。关键区别在于:共用体共享内存但需手动管理成员,枚举限定了可选值范围。共用体常用于硬件映射,枚举适用于状态码等场景。
2025-07-30 21:15:22
682
原创 嵌入式学习 c语言-指针
本文系统介绍了C语言指针的核心概念与应用。主要内容包括:指针基础(定义、运算符、声明初始化)、指针操作(变量修改、函数参数传递)、指针与数组关系(数组名即指针、指针运算)、const指针(常量指针与指向常量的指针)、特殊指针类型(函数指针、二级指针、void指针)以及指针数组与数组指针的区别。重点阐述了指针作为内存地址操作工具的核心特性,以及在不同场景下的使用方法和注意事项,为理解C语言内存管理和高效编程提供了完整框架。
2025-07-25 17:10:01
1018
原创 嵌入式学习 c语言—预处理命令
本文总结了C语言中宏定义和头文件使用的关键知识点。宏定义分为不带参宏(如#define PI 3.14)和带参宏(如#define MAX(x,y)),后者类似函数但存在文本替换、无类型检查等特点。头文件包含标准库和自定义头文件,用于声明函数、宏、结构体等,并通过条件编译防止重复包含。条件编译指令包括#if、#ifdef等,常用于跨平台兼容和调试控制。工程结构中,.c文件实现功能,.h文件声明功能,main.c调用功能。需要注意宏与函数的区别、头文件规范使用和条件编译的正确应用。
2025-07-24 17:15:28
1312
原创 嵌入式学习 c语言_函数
定义一个函数的实现函数类型 函数名(数据类型1 形式参数1, 数据类型2 形式参数2, 数据类型3 形式参数3,...)函数体;return 返回值;函数体;return 0;函数类型:函数运行结果的类型 int void char double float函数名:与变量名要求保持一致形式参数:对数据操作的方式(函数定义时形参必须有类型)返回值:函数的运行结果变量类型作用域生存周期存储类别局部变量函数/块内函数/块执行期间auto静态局部变量函数/块内整个程序运行期间。
2025-07-23 17:08:20
1019
原创 嵌入式学习 C语言-数组
本文介绍了C语言中数组的基本概念和使用方法,包括一维数组和多维数组的定义、初始化、访问方式及内存布局。文章详细说明了数组的声明格式、完全/部分初始化方法,以及通过下标访问和修改元素的操作。对于二维数组,解释了其表格结构特性及行优先存储原则。最后,文章还介绍了两种基础排序算法(冒泡排序和选择排序)的实现原理和代码示例,展示了如何通过这些算法对数组元素进行排序操作。
2025-07-21 17:50:02
563
原创 嵌入式学习 C语言学习-流程控制
循环是一种常用的循环结构,用于重复执行一段代码块,直到满足特定条件。是一个布尔表达式,如果为真(非零),循环体将继续执行;如果为假(零),循环终止。循环用于重复执行一段代码,直到指定的条件不再满足。C语言中的关系运算符用于比较两个值的大小或相等性,返回结果为。语句用于根据表达式的值选择执行不同的代码块。如果条件为真,代码块内的语句将被执行;如果匹配,则执行对应的代码块。语句用于基于条件执行代码块。循环先执行循环体,再检查条件。循环先检查条件,再执行循环体;以下是一个完整的示例,演示了。
2025-07-18 17:22:11
1085
原创 嵌入式学习 C语言-输入输出函数
本文摘要介绍了C语言中常用的输入输出函数。主要内容包括:1)字符输入输出函数putchar和getchar的使用;2)格式化输入输出函数printf和scanf的详细用法,包括各种格式说明符(%d、%f、%s等)、格式化选项(宽度、精度、对齐)和转义字符;3)字符串输入输出函数gets和puts的特点及其与scanf/printf的区别。文章通过具体代码示例展示了这些函数的基本用法和注意事项,如scanf需要地址传递、gets可以接收带空格的字符串等特性。
2025-07-17 18:11:01
633
原创 嵌入式学习 C语言学习-表达式、运算符
本文摘要: C语言表达式与运算符详解。表达式由运算符组成,具有值和类型。混合运算时遵循类型转换规则:低精度向高精度转换,char/short转int,float转double。运算符包括算术、赋值、逗号、sizeof等,各自具有特定功能和使用限制。运算符优先级决定运算顺序,最高为括号,最低为逗号。赋值运算符需注意类型匹配问题,不同类型赋值时会有精度调整。复合赋值运算符简化表达式写法。掌握这些规则对编写正确高效的C程序至关重要。
2025-07-16 18:31:26
1001
原创 嵌入式学习 C语言-基础知识
分为基本数据类型(整数类型,浮点数类型,缺省类型,泊尔类型)和构造数据类型(结构体,共用体,枚举)两种。//基本数据类型:C语言中自带的类型 构造数据类型:用户自己定义的数据类型值域//计算机中数据的单位: bit 位 0 / 1 byte 字节 1byte == 8bitskb 1kb == 1024 bytes mb 1mb == 1024kb gb 1gb == 1024mb tb 1tb == 1024gb2.字符类型(char)在C语言中char类型标识单个字符,能够从键盘中输入的都是字符(小写
2025-07-15 19:33:08
879
原创 嵌入式学习 Linux基础
本文介绍了Linux系统的基本操作和C语言开发流程。主要内容包括:常用Linux命令(如ls、cd、mkdir等文件/目录操作)、Linux目录结构(以根目录/为基础)、以及C语言开发步骤(编写、编译、运行程序)。同时详细说明了gcc编译器的四个阶段:预处理、编译、汇编和链接。
2025-07-14 22:19:36
683
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅