自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 ARM-指令集全解析:从基础到高阶应用

本文介绍了ARM指令集体系结构的版本演进和常用指令。ARMv1-v7各版本逐步扩展功能,应用最广的是ARMv4。详细讲解了MOV、ADD/SUB、移位、LDR/STR等基本指令用法,以及立即数定义规则。说明了栈操作方式(ARM采用满减栈)、函数调用规范、参数传递规则和模式切换方法。最后对比了ROM存储器类型,包括MaskROM、PROM、EPROM、EEPROM和FlashROM的特性及应用场景。

2025-09-09 18:16:25 1649

原创 ARM-寄存器与异常处理全解析

本文系统介绍了ARM架构的核心技术要点,主要包括:1. 指令集分类(RISC与CISC)及特点对比;2. Cortex-A7寄存器体系详解,包括16个核心寄存器、状态寄存器及特殊功能寄存器;3. ARM工作模式演变,从ARM9的7种模式到Cortex-A的9种模式;4. 异常处理机制,包括硬件自动执行的5个关键步骤;5. 异常向量表的结构与作用;6. 程序状态寄存器CPSR的位域定义与功能说明。文章通过对比分析不同架构的特性,全面阐述了ARM处理器的核心工作原理,为理解嵌入式系统开发提供了技术基础。

2025-09-08 18:14:53 1612

原创 51单片机-串口通信

摘要:本文系统介绍了串行通信技术,包括串行与并行通信的对比(传输方式、速度、距离等),单工/半双工/全双工通信特性,以及UART时序、波特率等关键概念。重点解析了TTL、RS232、RS485三种电平标准差异,并提供了8051单片机的串口编程实现,涵盖初始化、收发函数、中断处理和协议解析等完整代码示例。文中还涉及存储空间分类、大小端检测等底层知识,为嵌入式系统串口通信开发提供了实用参考。

2025-09-05 19:21:27 2188

原创 51单片机-按键、蜂鸣器、定时器模块及中断

本文介绍了单片机中的中断系统、定时器、按键和PWM等模块的基本原理及实现。中断系统包括中断处理流程、中断嵌套和中断向量表;定时器通过16位计数器实现精确定时;按键模块通过检测引脚状态判断按键输入;PWM则通过调节脉冲宽度控制输出功率。文中还提供了相关模块的C语言代码实现,包括中断初始化、定时器配置和按键检测等。这些模块共同构成了单片机的基本功能单元,为嵌入式系统开发奠定了基础。

2025-09-04 18:11:26 829

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

本文介绍了裸机程序的基本概念和硬件操作,重点讲解了LED和数码管的控制方法。基本概念部分解释了裸机程序、CPU、MCU等硬件术语,以及51单片机中寄存器的作用。LED实验中,通过P2寄存器控制LED灯,提供了全亮、全灭和流水灯效果的实现代码。数码管模块则通过P1选择位区、P0选择段区来显示数字,给出了数码管显示数字的具体函数实现。文中代码示例展示了如何通过直接操作寄存器来控制硬件外设,包括延时函数的应用。这些基础操作为嵌入式系统开发提供了入门指导。

2025-09-03 23:15:26 605

原创 网络编程-数据库(sqlite3)

本文介绍了SQLite数据库的基本概念和使用方法。主要内容包括:1)数据库分类(关系型如MySQL、非关系型如Redis);2)SQLite特点(轻量级、文件型、跨平台);3)安装与基本命令;4)SQL语句操作(建表、增删改查);5)C/C++ API接口(sqlite3_open/close/exec等函数使用)。重点阐述了SQLite的数据类型、主键自增、模糊查询等特性,并提供了完整的代码示例,演示了如何通过C程序操作SQLite数据库。

2025-08-29 20:05:57 2222

原创 网络编程-IO多路复用

摘要:本文对比了select、poll和epoll三种I/O多路复用机制的特点:select使用位图存储文件描述符,最多支持1024个;poll使用链表存储,无数量限制;epoll使用红黑树存储,效率更高。epoll相比前两者优势明显:内核维护文件描述符集合,减少数据拷贝;直接返回就绪事件,无需遍历;支持水平触发(LT)和边沿触发(ET)两种模式。文中详细介绍了epoll的API使用步骤,包括epoll_create创建描述符集合、epoll_ctl添加/修改/删除事件、epoll_wait等待事件。

2025-08-28 16:21:29 979

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

本文介绍了TCP服务端的四种并发模型实现方法:1. 多进程模型:通过fork()创建子进程处理连接,资源开销大但安全性高;2. 多线程模型:使用pthread_create()创建线程,资源消耗小于进程;3. 线程池:解决频繁创建/销毁线程的性能问题;4. IO多路复用:重点介绍了select实现,通过单进程监测多个文件描述符,包含fd_set操作和select函数的使用方法。文中提供了完整的代码实现,包括套接字初始化、连接处理和数据收发等关键步骤,并对比了不同模型的优缺点。

2025-08-27 17:52:33 802 1

原创 网络编程-HTTP

万维网(WWW)是基于HTTP协议的应用层信息存储系统,通过URL定位资源,HTML展示内容。HTTP协议使用TCP连接,默认端口80,支持长连接(keep-alive)和短连接(close)。HTTP报文分为请求报文(客户端→服务器)和响应报文(服务器→客户端),采用文本格式。示例代码展示了一个爬虫实现:创建TCP连接,发送HTTP请求报文(包含请求头信息),接收并输出服务器响应。该过程涉及socket编程、HTTP协议交互等网络通信核心内容。

2025-08-25 17:18:24 587

原创 网络编程-TCP

本文介绍了网络抓包工具Wireshark的基本使用方法,包括启动、网卡选择和过滤条件设置。重点讲解了TCP协议的特点、三次握手和四次挥手机制,以及TCP编程流程和关键函数接口(connect、send、listen、accept、recv)。通过示例代码展示了TCP客户端和服务端的实现,并分析了TCP粘包问题的成因和解决方法(调整发送速率、固定大小传输、分隔符等)。最后提供了两个实际案例:基于TCP的全双工聊天程序和图片传输程序,展示了网络编程的具体实现方法。

2025-08-24 22:41:39 1348

原创 网络编程-基本概念及UDP

本文介绍了Linux下的网络编程基础,重点讲解了UDP协议实现。主要内容包括:1.网络分层模型(OSI七层和TCP/IP五层)及各层功能;2.IP地址分类、子网划分和端口号作用;3.UDP编程流程,包括socket创建、bind绑定、sendto/recvfrom收发数据等核心函数;4.通过两个实例演示UDP实现全双工聊天和文件传输;5.分析了UDP无连接、不可靠但高效的特点,并给出避免丢包的建议。文中提供了完整的客户端/服务端代码示例,涵盖网络字节序转换等关键技术点。

2025-08-23 10:41:17 941

原创 Linux软件编程-进程间通信(2)

本文介绍了Linux系统中的进程通信机制,主要包括信号、共享内存和信号量集。信号是异步通信方式,通过kill命令或函数实现进程间通知,可自定义处理方式(缺省/忽略/捕获)。共享内存是最高效的通信方式,通过ftok生成key、shmget创建内存段、shmat建立映射实现数据共享。信号量集用于进程同步,消息队列则类似管道但支持优先级。文中提供了信号处理示例代码和共享内存的发送/接收实现流程,展示了进程间通信的具体应用方法。

2025-08-19 18:38:17 2077

原创 Linux软件编程—进程、线程间通信(1)

本文摘要:介绍了三种操作系统核心概念:1)线程同步机制,通过信号量实现有序执行,示例展示了使用信号量控制三个线程顺序输出ABC;2)死锁问题,分析了四种必要条件及解决方法,如统一加锁顺序或使用trylock;3)进程通信方式,重点讲解无名/有名管道的实现原理及使用示例。文中均包含具体代码实现,如管道通信中的父子进程数据传递,以及memset()函数的内存操作应用。这些技术对理解并发编程和系统级通信机制具有重要意义。

2025-08-18 19:46:31 1212

原创 Linux软件编程-线程(2)

本文介绍了Linux多线程编程的核心内容:1.线程创建与管理,展示了使用pthread_create创建5个并行线程的示例;2.线程回收机制,包括pthread_exit和pthread_join的使用;3.线程间通信方法,重点讲解互斥锁(pthread_mutex)解决资源竞争问题;4.函数指针的使用技巧,包括定义、初始化和应用方法。文章通过完整代码示例演示了多线程编程的关键技术,对线程属性、内存管理和同步机制等难点进行了详细说明。

2025-08-16 18:36:38 769

原创 Linux软件编程-进程(2)及线程(1)

本文摘要:介绍了进程资源回收和线程编程的核心概念。关于进程回收,详细讲解了wait()和waitpid()函数的使用方法及区别,包括阻塞/非阻塞回收方式。对exec函数族进行了系统梳理,比较了不同exec函数的参数传递方式。在线程部分,阐述了线程与进程的区别,重点讲解了线程创建函数pthread_create()的使用。文章还通过代码示例展示了system函数与exec函数的实现差异,以及线程创建的基本编程方法。这些内容为理解Linux系统进程管理和多线程编程提供了实用指导。

2025-08-15 19:25:33 1312

原创 Linux软件编程-进程(1)

本文概述了操作系统进程管理的核心概念。首先区分程序(静态存储)与进程(动态执行),详细描述了进程的虚拟内存空间结构(代码区、数据区、堆栈区等)。其次介绍了进程调度算法(时间片轮转、优先级调度等)和进程状态(运行态、就绪态、阻塞态等)。重点阐述了进程生命周期管理,包括创建(fork())、终止以及僵尸/孤儿进程问题。最后列举了常用进程管理命令(ps、top、kill等)和C语言进程编程接口。全文系统性地讲解了从进程产生到消亡的全过程管理机制。

2025-08-14 18:22:08 1379

原创 Linux高级编程-framebuffer

本文介绍了Linux帧缓冲(Framebuffer)技术及其图形绘制实现。主要内容包括:1) Framebuffer概念及操作步骤:打开设备、获取参数、内存映射、写入颜色值等;2) 基本绘图函数实现:包括画点、横线、竖线、矩形、圆等算法;3) 图像处理:BMP文件头解析和像素绘制;4) 文字显示:通过字模数据实现字符渲染。关键点在于通过mmap映射显存后直接操作像素数据,支持RGB888和RGB565两种格式,并提供了从简单图形到复杂图像、文字绘制的完整解决方案。

2025-08-13 19:43:29 843

原创 Linux高级编程-文件IO

本文介绍了Linux文件IO系统调用的基本概念和使用方法。主要内容包括:1.文件打开与关闭操作,使用open()和close()函数,并详细说明文件描述符、打开模式及权限设置;2.文件读写操作,使用read()和write()函数实现数据读写;3.文件定位操作,通过lseek()函数实现文件位置偏移;4.文件IO与标准IO的区别,前者是系统调用无缓冲区,后者是库函数带缓冲区。文章还通过多个代码示例演示了文件复制、内容打印等常见操作,并解释了不同缓冲区的特性及刷新机制。

2025-08-12 18:33:17 1404

原创 Linux高级编程-文件操作(2)

pragma pack 是#pragma pack(push, n):保存当前对齐方式,并设置新的对齐字节数 n(n=1 表示1字节对齐)#pragma pack(pop):恢复之前保存的对齐方式。uint16_t a;// 2字节uint32_t b;// 4字节a 占用 2 字节,但编译器会在后面填充 2 字节(使 b 从 4 的倍数地址开始)。实际内存布局:[a(2)][padding(2)][b(4)],总大小 = 8 字节。a 和 b 紧密排列,无填充字节。

2025-08-11 18:01:36 1473

原创 Linux高级编程-文件操作

7种文件类型:b 块设备文件 -------> 存储类设备(硬盘)c 字符设备文件 ------->如输入输出设备(鼠标键盘显示器...)d 目录文件 ------->文件夹- 普通文件 ------->xxx.c xxx.h xxx.txt xxx.jpg xxx.mp4 a.outl 软链接文件 ------->快捷方式s 套接字文件 ------->网络通信p 管道文件 ------->进程间通信。

2025-08-09 21:09:05 1234

原创 数据结构—二叉树及gdb的应用

树是n(n≥0)个结点的有限集合。当n=0时称为空树;非空树满足:有且仅有一个特定的称为根(Root)的结点其余结点可分为m(m≥0)个互不相交的有限集合,每个集合本身又是一棵树,称为根的子树(SubTree)

2025-08-09 09:45:43 1093

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

本文介绍了哈希表的基本概念与实现方法。哈希表通过哈希函数建立关键字与存储位置的映射关系,提高查找效率。文章重点分析了哈希冲突的两种处理方式:开放地址法和链地址法,并详细阐述了哈希表的基本操作,包括哈希函数设计、创建、有序插入、遍历、查找和销毁等。其中,插入操作采用链表方式实现有序存储,查找时通过首字母哈希快速定位。代码示例展示了基于链地址法的哈希表完整实现过程,包括节点分配、冲突处理和内存释放等关键步骤。

2025-08-07 17:30:50 679

原创 数据结构—队列和栈

二级指针:1. 在被调函数中,想要修改主调函数中的指针变量,需要传递该指针变量的地址,形参用二级指针接收。2.指针数组的数组名是一个二级指针,指针数组的数组名作为参数传递时,可用二级指针接收。指针数组:保存多个指针的数组。数组名:数组首元素地址。

2025-08-06 19:48:04 1168

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

本文摘要:本文主要介绍了三部分内容:1) Makefile的基本语法和使用方法,包括目标文件定义、依赖关系、变量使用(自定义变量和系统变量)以及编译规则;2) GCC编译的四个步骤(预处理、编译、汇编和链接);3) 双向链表的基本操作实现,包括创建链表、插入/删除节点(头插尾插、头删尾删)、遍历查找、修改节点值等11个核心函数。文章提供了详细的代码示例,涵盖Makefile编写规范和链表操作的完整实现逻辑。

2025-08-05 19:50:32 721

原创 数据结构-单向链表

数据结构:用来组织和存储数据程序设计 = 数据结构 + 算法。

2025-08-04 19:20:01 989

原创 C语言-结构体

一个结构体变量的指针就是该变量所占据的内存段的起始地址。可以设一个指针变量,用来指向一个结构体变量,此时该指针变量的值是结构体变量的起始地址。指针变量也可以用来指向结构体数组中的元素。以下为3种等价的书写方式:①结构体变量名.成员名②(*p).成员名③p->成员名。

2025-07-31 18:32:36 633

原创 C语言-指针(3)

malloc(空间大小) 申请内存空间free (void *p) 释放空间注意事项:①free (NULL) 不会报错②不能销毁两次相同的指针③不能进行++运算realloc (void *p,空间大小) 重新分配内存空间,并且释放之前的空间。

2025-07-30 20:08:17 563

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

const + 普通变量 让变量成为只读变量const + 指针 无法通过该指针修改它所指向的i本身注:这样会引发编译报错,不能这样写。

2025-07-29 19:20:17 654

原创 C语言-数组与指针

本文介绍了C语言中整型数组指针的运算规则及常见应用。主要内容包括:1)指针运算规则,如p+n表示地址偏移n个元素位置,指针相减得到元素个数差;2)数组操作函数实现,包括求和、逆序、交换、排序、遍历和二分查找;3)迭代器方式处理数组,通过首尾指针实现遍历、逆序和选择排序;4)递归实现数组遍历和逆序;5)快速排序算法实现,通过选取基准值并递归处理子数组。文章通过代码示例详细演示了各种指针操作和算法实现方法。

2025-07-28 18:08:14 626 2

原创 C语言-预处理命令及指针(1)

基类型 *指针变量名int *p1;float *p2;char *p3;

2025-07-26 17:17:03 1057

原创 C语言-函数(2)

注意事项:在被调函数中对形参数组定义时可以指定每一维大小,也可以省略第一维的大小说明,但是第二维大小不能被省略。

2025-07-26 09:58:42 312

原创 C语言-函数调用及数组作为函数参数

数组作为函数参数,传递的是数组首元素的地址和数组的元素个数。

2025-07-24 18:35:24 882

原创 C语言-二维数组及函数(部分)

本文主要介绍了C语言中二维数组和函数的相关知识。在二维数组部分,详细说明了定义、初始化方法、性质(单一性、有序性、连续性)以及多个实用程序示例,包括计算元素和、边界元素和、数组逆序、查找最大值等操作。在函数部分,阐述了函数的定义形式(有参/无参)、返回值规则、调用方法、嵌套调用流程,并通过实例演示了函数的使用。文章还补充了assert函数的作用,用于程序运行时的条件检查。内容涵盖基础语法和实际应用,为C语言学习提供了实用的编程参考。

2025-07-23 19:57:12 1163

原创 C语言-字符型数组

也可以写为: char c[10] = "abc";说明:字符串常量自动会在数组的末尾加一个'\0',作为结束的标致,'\0'不会被输出。

2025-07-22 17:46:55 1059

原创 C语言-一维数组

本文介绍了C语言中一维数组的基本概念、特性和常见操作。主要内容包括:一维数组的定义方式及其性质(单一性、连续性、有序性);使用注意事项(禁止整体赋值和引用,避免越界访问);以及多个典型算法示例,如计算能被3整除的数及其个数、求和、求最大值/次大值、数组逆序、选择排序、冒泡排序和插入排序等。每个示例都提供了完整的C语言代码实现,并标注了关键算法的时间复杂度。特别说明了使用sizeof计算数组长度的方法。这些内容涵盖了数组的基础操作和常见算法应用。

2025-07-21 19:15:28 479

原创 C语言-循环控制

本文介绍了C语言中的条件运算符、循环结构和控制语句。条件运算符(?:)可以实现简单的条件判断,如求三个数最大值。循环结构包括while、do-while和for语句,其中for循环最为常用,包含初始化、条件和更新三个要素。文章还介绍了循环嵌套的用法,如查找回文数。最后讲解了break和continue语句的区别:break用于完全退出循环,continue仅跳过本次循环。这些控制结构是C语言编程的基础,合理使用可以提高代码效率和可读性。

2025-07-19 17:45:44 1054

原创 C语言-选择结构程序设计

本文介绍了C语言中的关系运算、逻辑运算和条件判断语句。文中通过多个实例(如大小写转换、闰年判断、月份天数计算等)演示了这些语法结构的应用。这些内容是C语言流程控制的基础组成部分。

2025-07-18 17:39:42 1014

原创 C语言-逗号运算符及数据的输入输出

(2)如果在“格式控制”字符串中除了格式说明以外还要其他字符,则在输入数据时在对应位置应输入与这些字符相同的字符。说明:这里用到了sqrt函数,所有要用到数学库,在头文件加上#include <math.h>。逗号表达式的求解过程:先求解表达式1,再求解表达式2。整个逗号表达式的值是表达式2的值。(3)在用“%c”格式输入字符时,空格字符和转义字符都作为有效字符输入。eg:输入三角形的边长(必须满足两边之和大于第三边),计算三角形的面积。eg:输入一个整型的数,取前三位为a,接着三位为b。

2025-07-17 19:23:00 1318

原创 C语言-字符型数据、运算符及表达式

注:int为4字节,short为2字节,因为0x1234转为2进制首位为0,所以为正数,赋给int型,前两个字节用0补全。先打印原始数据为1.234568,开始a为浮点型,强制让a变为整型,强制让1000000变为浮点型,最后输出结果。注:因为0x8234转为2进制首位为1,所以为负数,赋给int型,前两个字节用F补全。注:横向箭头表示必定的转换,纵向的箭头表示当运算对象为不同的类型时转换的方向。高位截断:char只占一个字节,而int占4个字节,所以进行高位截取。注:i++表示先把值赋给i,再+1;

2025-07-16 21:04:58 954

原创 C语言-数据类型(部分)

本文介绍了计算机编程中的基本数据类型,包括常量与变量、整形数据、浮点型数据和字符型数据。主要内容包括:常量和变量的定义及存储介质;整形数据的常量表示和变量分类,以及补码表示方法;浮点型数据的表示形式和存储结构;字符型数据的定义、ASCII码表示以及与整型、字符串的区别。文章通过具体示例说明了各数据类型的存储方式和取值范围。

2025-07-15 19:46:36 948

空空如也

空空如也

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

TA关注的人

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