自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Linux 线程控制

【代码】Linux 线程控制。

2026-10-21 20:50:51 302

原创 STM32 时钟树与 RCC

本篇文章围绕。

2026-10-19 23:13:25 363

原创 Linux 线程概念

线程是进程内部的执行控制序列,任何进程至少拥有一个主线程。线程本质上在进程的地址空间内运行,共享进程的资源。在Linux内核中没有专属的线程结构体,线程以轻量级进程的形式实现,同样使用描述,相比传统进程更加轻量化。将进程的虚拟地址空间资源合理分配给不同执行流,就形成了多个线程。要彻底理解线程,必须先搞懂内核的内存资源划分机制,也就是分页式存储管理。

2026-10-19 19:28:35 219

原创 Linux:对 WNOHANG 的深层理解

WNOHANG非阻塞地检查并回收已经退出的子进程。// 回收所有已经退出的子进程已经退出的:回收;还没退出的:不等待;父进程继续做自己的事;不会产生僵尸;还能拿到每个子进程的退出状态。所以,如果不想用SIG_IGN丢失退出状态,又不想被waitpidSIGCHLD就是标准解法。

2026-10-16 14:07:37 356

原创 Linux:对有关 SIGCHLD 的深层理解

僵尸进程不占内存,但占 PID 和内核进程表项。如果大量产生又不回收,可能耗尽系统资源。如果没有特别设置,内核不会因为子进程退出而给父进程执行什么默认处理动作。子进程退出后,并不是立刻从系统里彻底消失。这些子进程退出后不用保留状态了,直接回收,别留僵尸。之前,这个已经退出但还没被回收的子进程,就是。你的某个子进程终止了、停止了,或者继续运行了。子进程退出后内核自动回收,不产生僵尸。如果父进程先退出,子进程会被。这次子进程退出后不会留下僵尸。,子进程退出时不会变成僵尸,,因为退出状态会被丢弃。

2026-10-16 13:44:49 286

原创 Linux 捕捉信号

默认动作、忽略、自定义捕捉。当信号的处理动作是用户自定义函数,并在信号递达时调用该函数,就称为捕捉信号。处理函数不是main调用,而是由内核在合适时机回调,属于异步处理。捕捉信号就是:内核在从内核态返回用户态前检查未决信号,若该信号需要自定义处理,就暂停原控制流,切换到用户态执行处理函数,处理完通过sigreturn回到内核,再恢复原流程。

2026-10-15 23:04:19 101

原创 STM32 GPIO输入模式

输入模式引脚接高电平引脚接低电平引脚悬空(默认输入值)上拉输入101下拉输入100浮空输入10不确定(随机)模拟输入直接传给ADC等,不经过施密特触发器直接传给ADC等悬空电压不确定一句话理解:GPIO输入就是通过硬件电路(上下拉电阻设定缺省值 + 施密特触发器抗噪整形),将外部物理世界的高低电平或模拟信号,干净、确定地转换为MCU内部寄存器能读懂的 0 或 1(或直接交给ADC处理)。

2026-10-11 23:13:09 441

原创 c++11:fuction包装器

是 C++11 中最实用的工具之一,它用类型擦除把各种可调用对象统一成一种类型,让回调、事件、策略模式变得简洁优雅。但它的代价是运行时的间接调用与潜在的堆分配。把它当作"需要运行时多态的可调用对象容器"来用,而不是"万能函数参数"——这是用好它的关键。一句话记住:需要统一类型 → 用;追求极致性能 → 用模板 /auto。

2026-10-11 14:49:13 110

原创 linux 进程信号(下)

如果信号的处理动作是用户自定义函数,在信号递达时就调用这个函数,这称为。

2026-10-10 14:21:00 73

原创 linux 进程信号 (上)

用快递来类比信号处理:基本结论:样例代码:运行过程:signal系统函数::信号编号:函数指针,表示更改信号的处理动作,当收到对应的信号,就回调执行handler方法验证Ctrl+C本质是SIGINT(2号信号):运行后按Ctrl+C,进程不退出,而是执行自定义handler说明信号处理是自己处理生活例子与Ctrl+C信号处理过程结合:注意:信号:进程之间事件异步通知的一种方式,属于软中断。查看信号:宏定义(在中):编号34以上的是实时信号,本章只讨论编号34以下的信号详细说明

2026-10-10 14:18:24 410

原创 MySQL内置函数

在日常的数据库开发中,熟练使用MySQL内置函数可以极大地提高开发效率。本文将根据学习资料,系统总结MySQL中常用的,并结合具体的实战案例进行演示。

2026-10-09 10:55:48 104

原创 linux 进程间通信

参考 Linux 2.6.18 内核源码。信号量主要用于同步和互斥。

2026-10-04 17:46:51 317

原创 linux System V 相关知识

shmget → shmat → 读写内存 → shmdt → shmctl(IPC_RMID)shmget:创建或获取共享内存。shmat:把共享内存映射到当前进程。shmctl:查询、设置、删除共享内存。shmdt:解除映射,通常和shmat成对出现。共享内存最大的优点是快,因为数据不需要在进程之间复制;最大的缺点是需要自己处理同步。如果你需要高性能进程间通信,System V 共享内存仍然是非常经典、非常值得掌握的方式。

2026-10-04 17:27:36 342

原创 Mysql 基本查询

该文档系统讲解了 mysql 中表的增删改查(crud)操作,即 create(创建)、retrieve(读取)、update(更新)、delete(删除),并附带大量案例与语法说明。以下按章节梳理核心内容。

2026-09-26 23:04:42 332

原创 linux 进程间通信

管道是 Unix/Linux 中最古老的进程间通信(IPC)方式之一,本质是,通过文件描述符暴露给进程,使用方式与文件一致,体现了“Linux 一切皆文件”的思想。管道分为和。

2026-09-24 14:16:16 224

原创 linux库

特性静态链接动态链接链接时机编译链接时程序加载时重定位类型编译重定位(静态重定位)运行重定位(动态地址重定位)可执行文件大小大(包含库代码)小(只包含函数入口地址表)内存占用每个进程一份多进程共享一份更新维护需重新编译整个程序只更新库文件运行速度快略慢(需动态解析)依赖无依赖动态库存在动态链接的代价:牺牲了一定的性能和程序加载时间。动态链接的价值:更高效利用磁盘空间和内存资源,方便代码更新维护,实现了二进制级别的代码复用。

2026-09-22 14:13:20 392

原创 STM32跑马灯实现和部分源码分析

单灯点亮单灯闪烁跑马灯GPIOAGPIOBGPIOF等本质是宏,最终展开为指向// 端口配置低寄存器// 端口配置高寄存器// 输入数据寄存器// 输出数据寄存器// 位设置/清除寄存器// 位复位寄存器// 配置锁定寄存器基地址由PERIPH_BASE + APB2PERIPH_BASE + 端口偏移计算得到。通过结构体指针访问成员,就是直接读写对应物理地址的寄存器。

2026-09-20 13:22:05 255

原创 Linux 库制作与原理

这份文档讲解Linux下的制作、使用,ELF目标文件格式、编译链接、程序加载、虚拟地址空间、动态链接原理,配套gcc选项、Makefile示例、调试命令。

2026-09-18 16:01:52 328

原创 Linux 文件系统

特性硬链接软链接inode号和源文件相同全新独立inode跨分区不支持支持链接目录用户不能创建,系统..是硬链接支持删除源文件硬链接仍然可用变成无效悬空链接本质多个目录项指向同一个inode保存路径字符串的独立文件。

2026-09-17 12:59:02 239

原创 MySQL 表约束

约束作用关键点not null禁止字段为空开发尽量多用,NULL无法参与运算default设置字段默认值插入省略字段自动填充默认值comment字段注释仅说明,show create table查看zerofill数字零填充只改变展示,存储不变主键,唯一且非空一张表仅一个主键,可复合主键自增长整数+索引,一张表最多一个unique key唯一键,值不能重复允许NULL,可设置多个外键,表关联约束定义在从表,引用主表主键/唯一键。

2026-09-17 12:51:29 345

原创 Linux 缓冲区

缓冲区本质上是内存当中的一块存储空间,分为输入缓冲区、输出缓冲区。我们操作磁盘、显示器这类外设,如果每输出一个字节就调用一次系统调用,就要频繁发生「用户态 ↔ 内核态」切换,CPU开销巨大,性能很差。缓冲区就是用来解决这个矛盾:CPU速度 >> 内存速度 >> 磁盘/外设速度把要输出的数据先暂存到内存缓冲区,攒够一定量,再一次性调用系统调用交给内核,减少系统调用次数,让高速CPU和低速外设可以高效协同工作。用户层缓冲区:C标准库(libc)提供,也就是使用的缓冲区,这是本文重点。内核缓冲区。

2026-09-11 13:50:47 324 3

原创 Linux 重定向

重定向:不改变用户代码,改变数据流向。本该输出到显示器的数据,输出到文件;本该从键盘读数据,改成从文件读取。:输出重定向,截断式,,清空文件,把命令输出写入文件。>>:追加重定向,,把输出追加到文件末尾,不覆盖原有内容。:输入重定向,,命令不再从键盘读取,从文件读取数据。缓冲区坑(printf库函数重定向)输出到终端:stdout行缓冲,遇到\n自动刷新;重定向到普通文件:stdout切换成全缓冲。没有换行、缓冲区没满,程序直接close,数据留在用户缓冲区,文件看不到内容。

2026-09-10 22:30:32 337

原创 汉诺塔问题

汉诺塔(Tower of Hanoi)是学习最经典的入门算法案例,它充分体现把大问题拆解为规模更小的同类子问题的解题思路CSDN博…。

2026-09-09 14:09:01 43

原创 MySQL 数据类型

整型:根据业务范围选择,尽量避免unsigned,不够用直接升级更大类型。小数:普通展示用float;金额财务必须使用decimal。字符串:定长用char;长短不一用varchar,注意编码带来最大字符限制。时间:只存日期用date;完整时间用datetime;timestamp有自动更新时间特性。enum用于单选,set用于多选;集合查询记得使用。

2026-09-07 18:20:46 324

原创 MySQL 数据库与数据表操作

查看当前所有数据库连接(用户、主机、操作的库、执行命令),用于排查慢查询、异常登录、连接数满等问题。可一次性删除多张表(逗号分隔),删除后表结构和全部数据一起清除。级联删除:库内所有表、数据全部丢失,生产环境严禁随意执行。高危操作:删除字段后该列所有数据全部丢失。,需退出 MySQL 客户端后执行。参数备份时,恢复前需手动先创建并。用于给字段添加注释,方便后期维护。是条件执行语句,不是普通注释。:控制比较、查询、排序的规则。:决定文字的存储编码,如。,确定在哪个库下操作。只改字段的类型、长度,

2026-09-07 18:18:25 600

原创 mysql入门

很多同学初学的时候会疑惑:数据直接存文件里不行吗?比如txt、csv保存信息。数据库就是为了解决这些痛点诞生的,数据主要存放在磁盘,部分热点数据放在内存,高效完成数据的增删改查,数据库能力也是后端开发非常核心的基本功。

2026-09-03 17:24:39 181

原创 linux 自制shell

下面是版本,没有修改任何一行源码,只追加注释,缩进和课件文档完全对齐。while0。

2026-09-02 20:03:47 208

原创 进程程序切换

exec不会创建进程,只替换当前进程地址空间;要新进程必须先fork;exec成功之后,后面代码全部丢弃,不会执行;只有出错才返回‑1;带p的函数依靠PATH环境变量找程序,不用写完整路径;不带p必须写绝对路径;内建命令不能fork子进程执行,会失效;外部命令交给子进程exec执行;退出码:子进程exit(n),父进程wait拿到status,通过提取退出码;异常终止看信号编号;六个exec函数,只有execve是系统调用,其余都是库函数封装。

2026-09-02 17:13:51 361

原创 Python 基础语法

a = 10 # 定义print(a) # 读取a = 20 # 修改b = a # 变量间赋值。

2026-08-24 18:02:59 194

原创 进程地址空间

进程地址空间是操作系统为每个进程提供的独立虚拟内存视图,通过页表映射到物理内存,实现了内存保护、按需分配、进程隔离和高效管理,是现代操作系统稳定与安全的基础机制。

2026-08-20 16:18:29 201

原创 进程优先级与调度机制

查找最合适调度进程的时间复杂度为常数 O(1)不随进程数量增加而增加时间成本通过位图快速定位非空队列通过指针交换完成活动/过期队列切换模块核心要点进程优先级调度概念竞争性、独立性、并行(多CPU)、并发(单CPU切换)上下文切换保存/恢复CPU寄存器状态O(1)调度活动/过期队列 + 位图 + 指针交换,常数时间复杂度环境变量全局属性可继承,通过getenv/export操作,以字符指针数组组织虚拟地址空间所有地址均为虚拟地址,由mm_struct管理,页表映射到物理内存VMA组织。

2026-08-11 13:21:17 184

原创 linux进程

2026-07-30 18:50:56 238

原创 Makefile模板

新增/删除C语言源文件,不用修改Makefilewildcard是Makefile内置函数,作用是遍历当前目录,匹配全部后缀为.c的源码文件,全部存入变量SRC中。Makefile字符串替换语法:把SRC里所有文件的后缀.c统一替换成.o,也就是编译产生的中间目标文件。自定义变量,指定最后打包生成的可执行程序名称,可随意修改。通用性极强:单目录多文件C项目直接套用,修改BIN变量就能适配不同项目;自动化管理:增减.c源码无需改动脚本;增量编译:只编译被修改过的文件,节省编译时间;极简易维护。

2026-07-27 22:05:16 236

原创 嵌入式STM32 GPIO输出与LED控制

GPIO(General Purpose Input Output)模块包含多个寄存器,通过配置这些寄存器,可以控制GPIO引脚的工作模式、电平状态等。类比来说,就像给洗衣机设置参数,设定好后设备就会按照预设方式工作。

2026-07-26 18:24:27 472

原创 Git GDB/CGDB调试器

当怀疑某个变量被意外修改导致问题时,可以用watch监控。可参考配置SSH密钥或使用凭证助手来实现免密码提交。** 注意**:两种方式语法不同,不要混淆!CGDB是GDB的增强版,支持。

2026-07-26 17:48:38 314

原创 GPIO入门

知识点核心结论GPIO本质MCU中负责输入输出的通用硬件电路8种工作模式4种输出(推挽/开漏 × 通用/复用)+ 4种输入(浮空/上拉/下拉/模拟)推挽 vs 开漏推挽输出高低电平;开漏只能低电平+高阻抗,需外接上拉上拉/下拉提供输入信号的缺省值,保证引脚悬空时电平确定按键消抖硬件(电容)+ 软件(延时确认),避免误判寄存器操作BSRR优于ODR,原子操作避免读-改-写风险。

2026-07-17 14:33:50 444

原创 STM32入门第一课:32位MCU

烧录:将编译好的程序写入MCU的Flash调试:断点、单步执行、监控变量值知识点核心内容STM32是什么ST公司推出的32位MCU,基于Cortex-M内核STM32F103ZET6含义F系列主流,M3内核,144引脚,512KB Flash,LQFP封装,-40~85℃引脚分类特殊功能引脚(固定)+ 普通引脚(可编程)仿真器作用烧录程序 + 在线调试烧录流程编译 → 配置Debug → Download开发模式裸机开发(入门)+ 操作系统(进阶)

2026-07-17 14:18:21 459 1

原创 双指针、滑动窗口、前缀和、二分查找 算法

两个指针移动速度不同。子数组/子串长度固定。

2026-06-12 14:09:13 243

原创 linux的vim编辑器

│ Vim 核心三要素 ││ ││ 三种模式:命令模式 + 插入模式 + 末行模式 ││ ││ 两个切换:i 进入插入,ESC 返回命令 ││ ││ 一个原则:在正确的模式下做正确的操作 ││ │学习建议:在终端输入vimtutor,这是一个30分钟的交互式教程,是最好的Vim入门方式。

2026-06-08 09:54:08 172

原创 linux基础开发工具

yumapt。

2026-06-05 10:49:47 207

空空如也

空空如也

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

TA关注的人

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