自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 ARM 开发基础

立即数:在 ARM 指令中,直接包含在指令编码中的常数,无需从内存或寄存器加载。12 位立即数合法性判断:ARM 指令中的立即数由一个 8 位常数和一个 4 位循环右移位数(rotate)编码而成。合法条件:该 32 位整数可以通过对一个 8 位无符号数,进行2×rotate位的循环右移得到(rotate取值为 0~15)。例如:0x3FC→ 可由 8 位0xFF循环右移 30 位得到 → 合法0x101→ 无法由 8 位常数循环右移得到 → 非法。

2026-01-18 21:10:52 421

原创 51 单片机GPIO / 按键 / 中断 / 定时器 / PWM

GPIO(Genral Purpose Input Output)是单片机与外界交互最基本的形式,每个 GPIO 引脚可独立配置为输入 / 输出模式。产生精准的时间基准,用于定时、延时、波特率发生器(串口)等场景。蜂鸣器发声原理:通过震荡产生声波,频率决定音调(高频 = 高音,低频 = 低音),占空比影响音量。核心优势:无需 CPU 轮询检测,实时响应外部事件(如按键、定时器溢出)。核心:让引脚产生周期性翻转的方波,通过调整周期和占空比控制外设。核心作用:被动检测引脚的电平状态(接收外部设备的信号)。

2026-01-13 17:44:40 729

原创 TCP 传输控制协议

TCP 作为可靠的面向连接协议,是 CS/BS 模型的核心基础,掌握其核心特性、函数用法和编程流程,是网络开发的必备技能。三次握手 / 四次挥手的连接机制;监听套接字与通信套接字的区别;黏包问题的产生与解决;CS/BS/P2P 模型的适用场景。

2025-12-24 18:30:13 356 1

原创 网络编程基础:OSI 模型与 TCP/IP 协议栈详解

作为网络编程的入门核心,理解网络分层模型是掌握数据通信逻辑的关键。本文将拆解 OSI 七层模型的功能,并对比 TCP/IP 协议栈的简化设计,帮你快速建立网络通信的底层认知。

2025-12-23 18:42:33 462

原创 Linux 进程通信:信号与共享内存详解

signal注册信号处理函数,自定义信号的行为:c运行// 注册信号处理函数参数:signum:要捕获的信号编号;handler:处理函数(可选值:SIG_DFL:默认处理;SIG_IGN:忽略信号;自定义函数:如返回值:成功返回原处理函数指针,失败返回SIG_ERR。信号:适合异步通知、简单事件处理,缺点是无法传递复杂数据;共享内存:适合大量数据的高效共享,需配合同步机制(如信号、信号量)使用。

2025-12-22 00:20:35 618

原创 多线程核心:互斥与同步

互斥是 “保护资源”,用 Mutex 实现;同步是 “控制顺序”,用 Semaphore 实现;死锁是多线程的 “雷区”,需通过资源申请顺序、超时等方式避免。

2025-12-17 20:26:24 815

原创 Linux 线程

线程是轻量级进程(Lightweight Process, LWP),必须隶属于某个进程,不能独立存在。进程是线程的 "容器",线程的所有操作都依赖于进程的资源(如代码段、数据段、文件描述符等)。

2025-12-16 21:58:58 733

原创 Linux 进程控制:exec 族函数、waitpid、system 及目录操作详解

exec 族:替换进程程序,与fork搭配使用,执行成功不返回;waitpid:回收子进程,支持阻塞 / 非阻塞模式,避免僵尸进程;system:简化 Shell 命令执行,内部封装,无法修改父进程状态;:获取 / 切换工作路径,chdir仅影响当前进程(子进程不继承)。

2025-12-15 18:01:29 553

原创 Linux 进程管理

用fork()创建子进程,利用写时复制节省资源;子进程通过exit_exit正常退出,或被信号异常终止;父进程必须通过waitwaitpid回收子进程,避免僵尸进程;孤儿进程由系统接管,无需额外处理。

2025-12-14 21:13:23 2654

原创 【Linux 进程详解】从 PCB 到 fork

作为操作系统的核心概念之一,是程序运行的载体,也是理解 Linux 系统调度、资源管理的基础。本文将从进程定义、PCB 结构、进程与程序的区别,到虚拟内存、进程状态、调度机制,再到fork创建子进程的实操,全面梳理进程的核心知识。

2025-12-11 18:21:23 2880

原创 Linux 文件 IO、目录操作与 Makefile 入门

makefile# 版本3:自定义变量(更灵活)FLAG = -g # 带调试信息clean:rm $(APP)

2025-12-10 18:41:33 2361

原创 从函数使用到缓存机制

在 Linux/C 编程中,文件操作是核心能力之一,主要分为和两类。本文将从函数用法、缓存机制、定位操作等维度,全面解析两类 IO 的区别与使用场景。

2025-12-09 18:49:12 3100

原创 系统编程(linux 系统编程)

c运行// ./a.out 1 2 3 4 5 6 运行示例// 参数个数(示例中argc=7,包含程序名)int i = 0;for(i = 0;i<argc;i++)// 依次输出参数(argv[0]是程序名,argv[1]-argv[6]是传入的参数)return 0;argc:命令行参数的总个数(包含程序自身路径 / 名称);argv:字符串数组,存储每个参数的具体内容。

2025-12-08 18:32:53 2667

原创 【数据结构】树与哈希

• 定义:不同的 key(key1≠key2)经过哈希函数计算后,得到相同的存储位置(f (key1)=f (key2));直接用 key 或 key 的线性变换作为存储位置(如 f (key)=key、f (key)=a*key+b)3. 任意二叉树中,叶子结点数 n₀ = 度数为 2 的结点数 n₂ + 1(n₀ = n₂ + 1);n 个结点的二叉树按层序编号,编号 i(1≤i≤n)的结点与同深度满二叉树编号 i 的结点位置完全一致。冲突时尝试 +1、-1、+2²、-2²…

2025-12-07 21:54:41 2885

原创 链表及队列

线性表是数据结构的基础,分为顺序存储和链式存储两种形式。顺序表(数组)虽查找高效,但插入 / 删除需移动大量元素,且空间固定;链表则通过指针解决了动态存储问题,而栈和队列作为线性表的特殊形式,又分别满足了 “先进后出” 和 “先进先出” 的业务场景。本文将系统梳理单向链表、双向链表、链式栈、循环队列、链式队列的核心原理、接口设计与实现思路。c运行// 数据域类型(可自定义)// 姓名char sex;// 性别int age;// 年龄int score;// 分数} DATATYPE;

2025-12-04 17:35:03 931

原创 数据结构之线性表

c运行// 数据元素类型(可根据需求修改)char sex;int age;int score;} DATATYPE;// 链表节点(数据域+指针域)// 存储数据元素// 指向后继节点的指针} LinkNode;// 链表头结构(管理链表整体信息)// 指向链表首节点int clen;// 链表有效元素个数} LinkList;// 函数指针:用于自定义查找规则(解耦查找逻辑)// 核心接口// 创建链表// 头插法(O(1))// 尾插法(O(n))

2025-12-03 18:27:53 2479

原创 数据结构入门

零个或多个数据元素的有限序列,数据元素间为 1 对 1 线性关系。顺序表是线性表的顺序存储实现,依赖数组在连续内存中存储数据。c运行// 通用数据类型(可根据需求修改字段)// 姓名char sex;// 性别int age;// 年龄int score;// 分数} DATATYPE;// 顺序表管理结构体// 指向堆空间的数组首地址int tlen;// 顺序表总容量(最多存储元素个数)int clen;// 当前已存储元素个数} SeqList;c运行。

2025-12-01 18:13:34 1284

原创 C语言结构体

> 右移 逻辑右移补 0,算术右移补符号位 快速除法(x>>1=x/2)<< 左移 高位丢弃,低位补 0 快速乘法(x<<1=x*2)if (test.byte == 1) printf("小端模式\n");` ` 按位或 有 1 为 1,否则为 0 指定位置 1。& 按位与 全 1 为 1,否则为 0 指定位清 0。// 将bit7置1。

2025-11-25 17:32:31 690

原创 C语言指针及结构体

结构体允许将不同类型的数据组合成一个整体,是 C 语言实现数据抽象的基础。c运行// 日期结构体int year;int month;int day;// 人员结构体int age;// 初始化方式// 1. 完全初始化// 2. 指定成员初始化(C99特性).age = 15// score未初始化,默认为0。

2025-11-24 18:51:03 847

原创 C语言指针2

指针函数的语法格式为:c运行返回类型* 函数名(参数列表);示例:定义一个返回字符指针的函数c运行// 返回char*类型的指针函数return str;函数指针的语法格式为:c运行返回类型 (*指针变量名)(参数列表);(*指针变量名)是函数指针的核心标识(括号不能省略,否则会变成指针函数);参数列表需与目标函数的参数类型、数量一致。c运行// 普通函数:加法// 普通函数:减法// 定义函数指针,指向add函数// 通过函数指针调用add函数// 输出:8。

2025-11-20 19:46:32 296

原创 C语言指针

以大端字节序:数据的低数据位存在内存高地址高数据位存在内存低地址;小端字节序:数据的低数据位存在内存低地址高数据位存在内存高地址。字节序:是多字节数据的内存存储规则,需注意跨平台场景的转换;指针参数传递:值传递仅读、地址传递可读写,是 C 语言操作内存的核心手段之一。

2025-11-19 18:43:07 391

原创 C语言指针

c运行基类型 *指针名;// int* p;表示p是指向int类型的指针int* p, q;中,p 是int*类型,q 是int类型(只修饰紧跟的变量)

2025-11-18 18:13:45 416

原创 C 语言函数与预处理

函数是封装独立功能的代码片段,核心作用是提高复用性、降低复杂度。C 语言函数的标准结构:c运行返回值类型 函数名(类型 形参1, 类型 形参2, ...) {函数体;return 表达式;// 无返回值用return;(对应void类型)返回值类型:支持intchardoublevoid等,省略时默认是int。函数名规则:由字母、数字、下划线组成,不能以数字开头。形参:接收外部传入的数据,无参数时需保留()。c运行#define PI 3.14 // 常量宏。

2025-11-17 19:16:46 309

原创 二维整形数组

字符就计数加 1,直到遇到结束符为止。需注意对空指针的判断,增强代码健壮性。:计算字符串中有效字符的个数(不含结束符。:通过指针遍历字符串,每访问一个非。:比较两个字符串的内容,返回差值()复制到目标字符串()追加到目标字符串(

2025-11-13 18:23:38 304

原创 字符型数组

字符型数组用于存储字符串,在 C 语言中定义字符数组的格式为:c运行char str[常量];在开辟内存空间时,需要考虑字符串结束标志'\0'。例如,字符串共 11 个字符,加上'\0',需要至少 12 个字符的空间,定义时可写为:c运行。

2025-11-12 18:20:35 400

原创 数组的排序

数据类型相同:数组中所有元素必须是同一种数据类型,比如都是intchar等。数量有限:数组的元素个数是确定的,在定义时就要明确其大小(或由初始化时的元素个数推导)。在 C 语言中,数组的定义格式为:c运行类型名 数组名字[整形常量];其中,整形常量 >= 0,且不能是void类型。例如:c运行int a[5];// 定义一个包含5个int类型元素的数组int a[2+4];// 也可以通过合法的表达式指定数组大小。

2025-11-11 19:05:30 393

原创 C语言循环结构

在 C 语言中,数组的定义格式为:c运行类型名 数组名字[整形常量];其中,整形常量 >= 0,且不能是void类型。例如:c运行int a[5];// 定义一个整型数组,包含5个元素int[5] a;// 另一种等价写法(部分编译器支持)int a[2+4];// 可以通过表达式指定数组长度(结果需为整形常量)

2025-11-10 18:34:23 248

原创 C 语言流程控制

分支结构用于根据不同的条件执行不同的代码块,实现程序的 “选择” 逻辑。逻辑运算符用于组合多个关系表达式,得到最终的逻辑结果。switch 语句用于处理多分支(一般大于 3 种情况)的场景,只能基于。,否则会导致逻辑错误(编译器不会报错,但代码逻辑不符合预期)。,会继续执行下一个 case 的代码(“穿透” 现象)。这是所有程序的默认执行方式,无需额外语法控制。关系运算符用于比较两个值的关系,结果为逻辑值(顺序结构是程序最基本的执行结构,程序从。:C 语言不支持连续的关系表达式(如。

2025-11-09 19:20:12 252

原创 输入输出函数

可输出各种类型的数据(整型、浮点型、字符、字符串、地址等),并支持格式控制(位宽、精度、对齐方式等)。是 C 语言中功能最丰富的。:运行后输入一个字符(如。为结束标志,会自动丢弃。),程序会输出该字符。

2025-11-06 18:14:58 937

原创 C语言基础

算术运算符用于执行基本的数学运算,包括加减乘除、取余以及自增自减操作。代码示例:自增自减的区别c运行二、赋值运算符赋值运算符用于将右侧的值复制到左侧的变量内存中,核心是,还衍生出复合赋值运算符(、、、、等)。类型兼容赋值规则代码示例:复合赋值与类型兼容c运行三、逗号运算符由逗号连接的式子称为逗号表达式,其值为最后一个式子的值,计算顺序为从左至右。示例:c运行四、sizeof 运算符用于获取表达式、变量或类型在内存中占用的字节数,用法有三种:示例:c运行五、C 运算符优先级

2025-11-06 08:43:46 704

原创 C语言基础

双击可执行文件时,操作系统将文件从磁盘加载到内存,分配独立的地址空间,划分代码段(存储指令)、数据段(存储全局变量)、栈(存储局部变量和函数调用信息)、堆(动态内存分配区域)。等)、编译(生成汇编代码)、汇编(生成机器码)、链接(合并库文件和目标文件),最终生成操作系统可识别的可执行文件(如 Windows 的。计算机底层依赖二进制,而编程中常用八进制(简化二进制)和十六进制(表示内存地址),掌握转换规则是读懂底层数据的关键。:按 “位权展开法” 计算,第 n 位(从 0 开始)的权值为 2ⁿ。

2025-11-04 18:25:46 619

原创 Linux 基础命令与操作入门笔记

​​​​​​。

2025-11-04 10:22:53 632 1

空空如也

空空如也

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

TA关注的人

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