自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(43)
  • 收藏
  • 关注

原创 CAN总线协议

物理层其定义了信号实际的发送方式、位时序、位的编码方式以及同步机制;但can的通信速度、采样点、驱动器与总线的电气特性、连接器的形态需要自行定义。

2025-12-12 19:00:00 921

原创 ARM汇编与栈操作指南

本文摘要主要包含以下内容: 存储器分类:介绍ROM与RAM的基本概念; 立即数判断条件:详细说明数值范围限制和二进制格式要求; 栈的分类:重点分析4种栈类型(满减栈、空减栈、满增栈、空增栈)的操作特点,其中ARM默认使用满减栈; ARM汇编指令:包括MOV、LDR、ADD等基础指令,重点讲解STR指令的4种寻址方式及b/bl/bx跳转指令的区别; 函数调用规范:详细阐述ARM与C语言相互调用的参数传递规则、寄存器使用约定和栈对齐要求,并给出示例代码; 代码示例:提供完整的汇编与C语言混合编程实例,展示函数调

2025-09-09 18:47:52 875

原创 ARM架构详解:从内核到异常处理

ARM架构核心特性与异常处理机制摘要 ARM采用RISC精简指令集架构,其内核由ISA、ALU、MMU、Cache和寄存器组等组成。ARM9支持7种工作模式(User、FIQ、IRQ等),Cortex-A扩展至9种模式,新增Monitor模式用于安全扩展。异常处理时,CPU自动完成模式切换、保存返回地址到LR、备份CPSR到SPSR,并跳转至异常向量表对应入口。异常向量表包含Reset、IRQ等8个32位表项,实现异常到处理程序的快速映射。MMU的存在决定内核是否适合移植操作系统,而Cache分为指令缓存(

2025-09-08 18:36:21 873

原创 51单片机------串口通信

摘要:本文介绍了串行通信与并行通信的基本概念、特点及应用场景,对比了单工、半双工和全双工通信方式。重点讲解了串口通信的时序、速率决定因素及异步通信特点,并阐述了TTL、RS232和RS485标准的电平特性。此外,还介绍了8051存储空间的分类及大小端检测方法,提供了串口初始化和通信协议解析的代码实现,包括UART初始化、数据发送接收以及定时器中断处理等功能。

2025-09-05 19:55:17 1425

原创 51单片机------中断系统

本文介绍了中断系统的基本概念和处理流程。中断是指CPU暂停当前任务处理紧急事件的过程,中断源则是触发中断的请求源。中断处理流程包括:请求、检查、优先级判断、现场保护、服务程序执行和现场恢复。文中还解释了中断嵌套、中断向量表等概念,并详细阐述了51单片机定时器的工作原理和PWM技术。PWM通过调节脉冲宽度控制平均电压,其核心参数包括周期、频率、占空比等。最后,文章对比了有源和无源蜂鸣器的区别,并提供了51单片机控制蜂鸣器的示例代码。

2025-09-04 18:25:52 1352

原创 51单片机----LED与数码管模块

裸机程序:所编写的代码直接操作硬件(即直接与HARD WARE 交互);SOC:系统级芯片;MCU: 微控制器:MPU:媒体播放器;GPU:图形处理器;CPU:中央处理器;外设寄存器:外设寄存器是计算机系统中,外设内部用于暂存数据、状态信息或控制指令的专用存储单元,是CPU与外设之间进行数据交互和命令通信的核心接口,其核心功能是实现CPU与外设之间的异步协调;

2025-09-03 17:50:14 483

原创 linux编程-----数据库

将复杂的数据结构简化为二维表格形式;大型:Oracle、DB2;中型:MySql、SQLServer;小型:Sqlite;

2025-08-29 19:48:56 1063

原创 linux网络编程-----TCP服务端并发模型(epoll)

1.使用位图实现对文件描述符集合的保存,最多允许同时监听1024个文件描述符;2.需要应用和内核的反复数据(文件描述符集合表)拷贝;3.返回的集合表需要遍历寻找到达事件;4.只能工作在水平触发模式(低俗模式),不能工作在边沿触发模式(高速模式);1.使用链表实现对文件描述符集合的保存,没有监听文件描述符的上限限制;2.需要应用和内核的反复数据(文件描述符集合表)拷贝;3.返回的集合表需要遍历寻找到达事件;4.只能工作在水平触发模式(低俗模式),不能工作在边沿触发模式(高速模式);

2025-08-28 19:51:59 956

原创 linux网络编程-----TCP的并发服务器构建

为了解决多线程(多进程)模型,在服务器运行过程中,频繁创建和销毁线程(进程)带来的时间消耗问题(基于生产者和消费者编程模型,以及任务队列等,实现的一套多线程框架)。对多个文件描述符的读写可以复用一个进程(在不创建新的进程和线程的前提下,使用一个进程实现对多个文件读写的同时监测)。④当内核检测到事件时,应用层select将解除阻塞,并获得相关的事件结果。检查指定的文件描述符是否在集合中,是则返回非零值。从文件描述符集合中移除指定的文件描述符。清空文件描述符集合,移除所有文件描述符。

2025-08-27 18:02:45 572

原创 linux编程----网络(http协议)

1.定义:超文本传输协议一准面向事务的应用协议;端口号:80, 备用端口号:8080;

2025-08-25 17:14:50 485

原创 linux编程----网络通信(TCP)

1.面向数据流;2.有连接通信;3.安全可靠的通信方式;4.机制复杂,网络资源开销大;5.本质只能实现一对一的通信(可使用TCP的并发方式实现一对多通信);

2025-08-23 19:29:30 1394

原创 liunx编程-----网络通信(UDP)

不同主机,进程间通信。

2025-08-23 10:36:46 1200

原创 linux编程----进程间的通信(信号与共享内存)

本文介绍了Linux系统中的进程通信机制,重点讲解了信号和共享内存两种方式。信号部分详细说明了其作为异步通信机制的作用原理,列举了SIGINT、SIGKILL等常用信号及其功能,并介绍了signal()、kill()等关键API的使用方法。共享内存部分阐述了其高效通信原理,包括ftok()创建IPC key、shmget()创建共享内存、shmat()建立映射等完整操作流程,并提供了实际代码示例。两种通信方式都体现了Linux系统进程间通信的核心机制,信号适用于事件通知,而共享内存则适用于大数据量高效传输的

2025-08-19 18:35:36 1145

原创 linux编程----信号量、死锁与进程间的通信(管道)

本文介绍了多线程编程中的信号量设计和进程间通信机制。信号量通过PV操作实现线程同步,遵循开闭原则,降低耦合度;文中提供了三个线程顺序打印ABC的示例代码。死锁部分分析了四种必要条件及解决方法,如保持加锁顺序一致、使用非阻塞锁等。进程通信方面,重点讲解了无名管道和有名管道的特性及实现:无名管道通过pipe()创建,适用于亲缘进程;有名管道通过mkfifo创建,支持任意进程通信。最后给出两个进程通过有名管道传输数据的代码实例,一个进程写入终端输入,另一个进程读取并打印。

2025-08-18 19:26:25 870

原创 linux编程----线程间的通信

1)在线程任务函数中使用return结束线程2)pthread_exit(NULL)退出线程;功能:退出一个线程任务参数:retval:向回收的线程传递的参数的地址NULL: 表示不传递参数。

2025-08-16 18:53:43 691

原创 linux编程----进程(2)与线程基本概念

system 通过 fork-exec 启动 shell 来执行命令(支持管道/重定向等 shell 特性),并自动处理进程等待和信号,返回命令的退出状态;<-1 回收指定进程组内的任意子进程 (-100.等待GID=100的进程组中的任意子进程)start_routine:函数的指针:指向线程启动后要执行的任务(线程任务函数)NULL:不保存子进程退出的状态。安全性角度:线程没有进程安全性好,一个线程异常可能影响同一进程中的所有线程。线程和所在进程,以及进程中的其他线程,共用进程的堆区、数据区、文本区。

2025-08-15 19:37:43 1078

原创 linux编程----进程(1)

1. 什么是进程?正在运行的程序,其运行过程中需要消耗内存和CPU。gcc应用程序 可执行程序 内存硬盘 硬盘 cpu程序和进程有什么区别?程序:静态的数据集合,存储在硬盘空间程序运行起来可以产生进程;一个程序可以产生多个进程进程:是一个程序动态执行的过程,需要消耗内存和CPU,

2025-08-14 19:09:57 953

原创 linux编程----文件(framebuffer)

Linux 内核提供的显示设备抽象层将显存映射为线性内存空间(设备文件:/dev/fbX)应用程序通过读写内存直接控制屏幕像素struct fb_var_screeninfo { // 可变参数__u32 xres;// 可视区域宽(像素)__u32 yres;// 可视区域高// 虚拟缓冲区宽// 虚拟缓冲区高// 像素深度(16/24/32)// ... 其他参数3.打开显示设备(/dev/fb0)获取显示设备相关参数(分辨率,像素格式)---》ioctl。

2025-08-13 19:46:15 1368

原创 linux编程----文件(文件IO)

文件IO:系统调用Linux内核专门为应用层提供的文件操作方法。1. 打开文件 open2. 读、写文件 read/write3. 关闭文件 close功能:打开文件并获得一个文件描述符参数:pathname:要打开的文件的文件名flags:打开方式O_RDONLY : 只读方式O_WRONLY:只写方式O_RDWR: 可读可写O_CREAT: 创建文件O_TRUNC: 清空文件。

2025-08-12 18:16:35 946

原创 linux编程----文件(标准IO (2))

本文摘要: fgets与gets区别:fgets安全读取一行数据并保留换行符,限制读取长度;gets从终端读取但不限制长度,存在内存越界风险。 fread/fwrite函数:用于二进制文件读写,参数包括数据指针、元素大小和数量,返回实际读写元素个数。 结构体对齐:通过#pragma pack(n)控制对齐方式,在BMP文件解析等场景中需注意对齐问题。 文件定位函数:fseek实现流重定位,ftell获取当前位置,rewind复位到文件开头,常用于文件复制等操作。 (全文共150字)

2025-08-11 17:57:59 891

原创 linux编程----文件(打开关闭与写入)

本文介绍了Linux系统中的文件类型、文件操作权限及文件操作方法。主要内容包括:1)7种文件类型(块设备、字符设备、目录、普通文件、软链接、套接字、管道文件);2)ls -l命令输出的文件详细信息解析(权限、所有者、大小等);3)文件操作的三个基本步骤(打开、读写、关闭);4)两种文件操作方法(标准IO和文件IO);5)重点介绍了标准IO中的fopen函数,包括其功能、参数(路径、模式)和返回值。文章还补充了文件流的概念,说明标准IO通过文件流指针(FILE*)操作文件。

2025-08-09 17:29:55 1190

原创 数据结构----二叉树与gdb的使用

定义:一棵二叉树中,所有叶子节点都在同一层,且非叶子节点都有两个子节点(左、右子树均存在),这样的二叉树称为满二叉树。特点:叶子节点仅存在于最底层,且不存在度为1的节点(每个节点要么是叶子,要么有两个孩子)。若树的高度为 h (根节点为第1层),则节点总数为 2^h - 1。

2025-08-09 09:57:33 514

原创 数据结构----哈希表(散列表)

本文介绍了哈希表处理哈希冲突的两种方法:开放地址法和链地址法。当不同数据经哈希函数计算得到相同位置时,开放地址法寻找空位存储,而链地址法使用链表存储冲突元素。文中提供了C语言实现代码示例,包括哈希表创建、插入、查找、删除和销毁等操作。通过姓名首字母计算哈希地址,将联系人信息存入链表结构的哈希表中,并演示了基本操作流程。该实现展示了链地址法处理哈希冲突的具体应用。

2025-08-07 17:31:13 577

原创 数据结构----入栈、出栈与队列

本文摘要: 文章系统讲解了数据结构中的关键概念,包括二级指针的两种应用场景(修改主调函数指针变量和传递指针数组名)、内核链表的实现原理(循环双向链表结构,通过offset_of和container_of宏实现节点与结构体的地址转换)。重点分析了栈(先进后出)和队列(先进先出)的实现:栈部分详细介绍了增栈/减栈、满栈/空栈等概念,并给出完整链式栈的实现代码;队列部分阐述了链式队列的结构特点,提供了创建、入队、出队等操作的实现示例。最后对比了栈(LIFO,单端操作)与队列(FIFO,双端操作)的核心差异,通过&

2025-08-06 20:08:44 879

原创 数据结构----makefile的使用与双向链表

Makefile :用来管理代码的编译和链接make工具解释MakefilemakefileMakefile的语法:目标文件:a.out依赖文件:main.c fun.c-I : 指定头文件所在位置-L:指定使用到的库所在的位置语法规则:目标文件:依赖文件编译方法Makefile中的变量:1. 自定义变量定义:变量名=值引用:$(变量名)OBJ=a.out2. 系统变量$^: 所有依赖$<:第一个依赖$@:生成的目标。

2025-08-05 19:42:42 632

原创 数据结构----单向链表(补充)与linux虚拟机网络配置

6.下载相应程序:虚拟机安装应用 sudo apt-get install + (应用名)

2025-08-04 20:44:45 479

原创 数据结构----数据结构基础

本文介绍了数据结构的基本概念和分类。数据结构是组织和存储数据的方式,是程序设计的核心组成部分。主要内容包括:1)逻辑结构(集合、线性、树形、图形)和物理结构(顺序、链式、索引、散列存储);2)顺序存储和链式存储的特点对比,前者查找效率高但插入删除复杂,后者反之;3)内存碎片的概念;4)单向链表的结构,包含数据域、指针域的结点以及链表属性(头指针和长度)。这些内容是理解数据结构的基础知识。

2025-08-02 17:47:19 329

原创 C语言----结构体与共用体(自用)

本文介绍了C语言中结构体的定义和使用方法。结构体是一种自定义数据类型,通过struct关键字声明,包含多个不同类型的成员变量。文章展示了结构体变量的初始化、成员访问方式,以及通过指针访问成员的两种表示方法((*a).成员名和a->成员名)。同时说明了结构体在内存中的存储方式为连续存储,并涉及共用体的概念。通过多个示例代码演示了结构体数组的排序、反转等操作,以及大小端检测的实现方法。代码示例涵盖了结构体作为函数参数传递、成员访问、数组操作等常见用法。

2025-07-31 18:31:36 187

原创 C语言----动态内存空间、函数指针与指针的指针

该函数从堆区中给出空间,其所给出的空间是连续的。清除p的空间, 但不能连续两次调用free,因被free清除之后的指针为野指针,清除野指针会造成系统错误。重新分配空间,重新分配空间的同时,会将原有内容复制到新的空间内,并会释放原空间。

2025-07-30 18:09:47 649

原创 C语言----字符型指针与数组指针

由const修饰的变量为只读变量,此时无法直接访问该变量;const+指针变量------无法通过该指针去修改其所指向的变量;

2025-07-29 18:00:22 677

原创 C语言----数组与指针的运算

本文介绍了指针运算、迭代器遍历和快速排序的实现方法。指针运算包括加法和减法操作,其中指针加法可在数组遍历中使用,指针减法可计算相同类型指针间的偏移量。迭代器通过指针实现数组遍历。快速排序的核心是以基准数划分数组,通过递归调用实现排序,关键步骤包括选择基准数、双向查找交换元素以及递归处理子数组。文中提供了多个代码示例,包括指针运算、数组求和、逆序排列以及完整的快速排序实现,展示了如何使用指针和递归来解决数组操作问题。这些方法为C语言中的高效数据处理提供了基础技术。

2025-07-28 17:32:42 922

原创 C语言----预处理命令与指针基础

本文介绍了C语言预处理命令和指针的基本概念。预处理阶段通过#define定义宏,包括不带参宏(如#define N 100)和带参宏(如#define add(a,b,c) ((a)+(b)+(c))),同时说明了头文件保护格式#ifndef...#define...#endif的作用。指针部分解释了指针类型定义(如int *p)、直接/间接访问变量地址的方法,以及指针操作的本质过程。最后通过一个示例程序演示如何利用指针检测计算机的大小端存储模式。

2025-07-26 17:01:31 455

原创 C语言----标识符的作用域与可见性

摘要:本文介绍了C语言变量的存储位置、作用域和生存期特性。全局变量存储在全局区,未初始化时默认为0;局部变量在栈上分配。作用域规则要求标识符先定义后使用,不同作用域同名变量互不影响。生存期分为静态(全局变量和static局部变量,与程序同生命周期)和动态(普通局部变量,随函数调用创建销毁)。static还可限制全局变量/函数仅在当前文件可见。这些特性对理解变量作用范围和生命周期至关重要。

2025-07-26 09:32:23 346

原创 C语言----函数调用规则与函数的递归调用

本文主要介绍了C语言函数调用的关键规则和实现原理。首先说明函数参数传递采用值传递方式,只有通过指针才能修改主调函数变量值。其次阐述了函数调用时的参数传递顺序(从右向左)以及避免多次自增自减传参的注意事项。接着揭示了函数调用的底层机制:通过PC指针和栈结构实现指令跳转,包括保护现场和恢复现场的过程。文章还分析了内存空间的五大分区及其存储内容。最后介绍了递归调用的两种形式(直接递归和间接递归),并以阶乘计算为例展示了递归函数的实现方式。全文系统讲解了函数调用从语法规则到底层实现的完整知识体系。

2025-07-24 17:41:53 491

原创 C语言----二维数组的相关操作及函数的基本概念

一个较大的程序一般应分为若干个程序模块,每一个模块用来实现一个特定的功能。一个完整的函数:函数首部:包含返回值,函数体和形参;函数主体。

2025-07-23 18:51:42 1143

原创 C语言----字符型数组

本文介绍了二分查找和字符数组的基本操作。二分查找通过排序数据后不断比较中间值来高效检索,每次筛选一半数据。字符数组部分详细讲解了定义、遍历(使用'\0'判断结束)、输入方法(scanf/gets/fgets)、字符串长度获取(strlen)、复制(strcpy)、比较(strcmp)和逆序操作,并提供了相应的代码示例。重点说明了字符数组与字符串处理函数的使用方法及注意事项。

2025-07-22 18:07:50 787

原创 C语言----一维数组的遍历

本文介绍了C语言中数组的基本概念和常用操作。主要内容包括:1)数组的定义与性质(单一性、连续性、有序性);2)数组遍历与越界问题;3)三种经典排序算法:选择排序、冒泡排序和插入排序,均具有O(n²)的时间复杂度。文中通过具体代码示例演示了数组的初始化、遍历、逆序以及各种排序算法的实现方法,并说明了通过sizeof计算数组长度等实用技巧。

2025-07-21 17:56:15 623

原创 C语言----循环结构控制

本文介绍了循环结构的三要素(变量初始化、执行条件和终止语句)及其实现方式,包括:1)goto与if组合;2)while循环(先判断后执行);3)do-while循环(先执行后判断);4)for循环(三要素集中控制)。同时讲解了循环嵌套以及break(完全跳出循环)和continue(跳过当前轮次)语句的使用方法,并通过数例演示各循环结构的应用场景和注意事项。文章强调合理使用循环控制语句对程序正确性和效率的重要性。

2025-07-19 17:35:04 430

原创 C语言----选择结构与逻辑运算符

本文介绍了C语言中的关系运算符和逻辑运算符的使用方法,以及选择结构中的if和switch语句。关系运算符包括>、<、>=、<=、==、!=,运算结果为int型(1为真,0为假)。逻辑运算符包括&&(与)、||(或)、!(非),并解释了表达式截断现象。选择结构部分详细说明了if、if-else、if-elseif语句的语法和使用场景,以及if语句的嵌套应用。最后介绍了switch语句的语法结构,通过case匹配执行对应代码块,需配合break使用,并提供了判断月份天数的

2025-07-18 17:47:51 680

原创 C语言----输入输出函数

本文介绍了C语言中常用的格式占位符和输入输出函数。主要包含:1) 各种数据类型占位符的用法,如%d(十进制)、%f(浮点型)、%s(字符串)等;2) printf/putchar输出函数的使用方法,包括格式控制、返回值等;3) scanf/getchar输入函数的特性,重点说明指针传递的必要性。文中通过多个代码示例,演示了占位符格式控制、输入输出函数调用等核心用法,并解释了缓冲区、值传递等底层机制。这些基础知识点对C语言编程具有重要指导意义。

2025-07-17 19:41:28 613

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除