- 博客(28)
- 收藏
- 关注
原创 Linux:页表
CPU 在获得线性地址后,会按照分页机制将其拆分为页目录索引、页表索引和页内偏移,通过多级页表计算并查找,最终得到对应的物理内存地址。Linux 内存管理(三)之分页机制_linux内存分页-优快云博客。
2025-12-25 17:56:08
296
原创 xv6 文件系统
文件名只是 inode 的引用,目录是一棵树结构。路径解析由当前目录决定,chdir 改变当前进程目录。mkdir/open/mknod 分别创建目录、普通文件、设备文件。inode 是文件本体,有唯一编号和链接数(nlink)。link 为同一 inode 创建第二个名字。unlink 删除“名字”,只有 nlink=0 且无 fd 才删除文件本体。open + unlink 可创建“无名字的临时文件”。
2025-12-12 08:18:06
574
原创 xv6 pipe管道
管道是 Unix 中一种高效、简洁的进程间通信机制。它利用文件描述符,将一个进程的输出直接连接到另一个进程的输入。正确使用管道的关键在于关闭不必要的文件描述符,从而保证读端能正确接收到 EOF。Shell 中的管道命令、I/O 重定向以及多进程协作,全部建立在这一机制之上。
2025-12-09 21:22:10
747
原创 xv6 文件描述符与 I/O 机制
应用程序只需要知道“我有几个编号 0/1/2/3…可以读写”它不需要关心这些编号背后连的是:文件、终端、管道,还是设备cat这种程序只写死了“从 0 读、向 1 写”shell 替你决定 0/1 连到哪里-> 就可以组合出重定向、管道等各种花式用法fork:复制一个进程(包括 fd 表)在子进程里:调整 fd(close/open/dup)exec:在这个已经调整好的环境上跑新程序fork 继承 fddup 复制 fd所以多个进程/多个 fd,可以像接力一样往同一个文件里顺序写东西。
2025-12-09 00:12:41
685
原创 第一章:xv6 进程、fork / exec / shell 机制笔记
fork:复制一个进程exec:在当前进程中换程序shell:fork 子进程,让子进程 exec。
2025-12-08 13:11:38
842
原创 Linux:交叉编译环境rootfs / sysroot
rootfs(Root File System)= 目标设备 Linux 启动后看到的也就是开发板真正使用的系统。sysroot = 交叉编译时给编译器用的“目标系统根目录”编译器通过它知道:“我要给 ARM Linux 编程序,不是给 PC。
2025-12-07 13:38:32
853
原创 Linux:交叉编译环境搭建(面试版)
实际搭建时,我通常从目标板 rootfs 或厂商 SDK 中提取 sysroot,确保链接的 glibc 和库版本与板子保持一致,避免运行时问题。sysroot 是交叉编译阶段给编译器使用的目标系统环境。我不是只会编 hello world,我理解工程化方式。**“rootfs 是目标板运行时的根文件系统;或 toolchain file 指定,
2025-12-07 13:36:12
274
原创 stm32:编码电机原理
电机轴带动磁钢旋转两个霍尔传感器检测磁场变化输出两路方波 A/B,相位相差 90°MCU 通过计数 A/B 的上升沿/下降沿得到转角通过 A/B 先后顺序判断方向通过计时统计脉冲数得到速度速度反馈(闭环)位置控制正反转识别距离测量七.编码器驱动编写(基于stm32)
2025-12-06 10:07:12
1035
原创 倒立摆调试笔记
位置环的 I 项可以少用甚至不用,因为位置控制天生不需要“持续输出力”。:最终不用力也能保持 → 初期加过多 I 会严重超调。目标:让小车能站稳且能回到目标位置(或者保持位置)⭐ 速度环需要 Ki,因为速度环必须克服摩擦力。不存在“唯一最佳参数”,只要系统稳定即可。越大系统越快,但抖动越大。当误差趋近 0 时,输出由历史累积决定。位置环输出作为角度环的目标(串级控制):增加阻尼,抑制快速变化,减少超调。直接由误差公式计算,不依赖历史输出。目标:让摆杆能立住,但横杆位置不准。
2025-12-05 18:42:02
693
原创 GPIO输入模式
复用输出模式意味着:这一根 GPIO 不再由你手动控制,而是交给某个外设(USART/TIM/SPI/I2C)接管。举几个例子你就懂了:USART TX → 由 USART 外设控制,不是你控制PWM → 由 TIMx 的比较寄存器决定占空比,你不能直接给 GPIO 写 0/1SPI SCK → 由 SPI 硬件自动产生时钟波形I²C SDA/SCL → 由 I²C 外设控制开漏总线时序AF 模式 = 外设“占用”了这根引脚GPIO 不再是普通 IO,而是变成外设的“输出接口”。
2025-12-05 18:17:45
858
原创 Linux:内存管理
Linux 内存管理就是让每个程序看到的都是虚拟地址,内核用“页”和“页表”帮它们找到真实的物理地址;内存不够时用 swap 临时放东西;空闲内存拿来做缓存;并通过多级页表和回收机制保证系统始终高效稳定。
2025-12-04 21:24:11
409
原创 Linux:用一个例子去理解线程池
确保任意时刻只有一个线程能读写任务队列和 stop 状态,并且让 worker 在等待任务时使用 condition_variable 进入睡眠并安全被唤醒。
2025-12-03 22:15:33
143
原创 Linux:进程和线程的选择
你在 STM32 上写两个 Task,共享同一个全局变量 / 队列,这在 Linux 上,对应就是。像一个“独立的程序实例”:有自己一整套内存空间、文件描述符表、全局变量等。一个 Python,一个 C++,或者一个是外部程序 → 自然是进程。共享同一个进程的内存空间(代码段、全局变量、堆)一个进程在本机跑核心逻辑(权限更高、数据更重要)一个进程负责接收外网请求(暴露面大,不太安全)很自然就是两个进程,而不是勉强塞到一个进程里。都是一个程序里的模块,挂了就一起挂无所谓 →。
2025-11-29 22:36:22
664
原创 Linux:共享内存demo
在虚拟机里写一个简单的共享内存的demo练习,创建一个文件夹,在这个文件夹里写cpp文件,最后加一个makefile编译。
2025-11-28 08:44:55
254
原创 Keil调试GD32时出现“could not stop cortex-m device”解决办法
通过分析发现系统复位问题主要源于看门狗电路。虽然万用表测量显示置位键电压3.3V正常,但最终发现是程序中的看门狗功能导致频繁复位。关闭看门狗后,系统恢复正常工作。这表明在调试复位电路时,除硬件检查外,还需关注软件配置的影响。(98字)
2025-11-11 08:57:27
192
空空如也
logisim 计数器震荡明显怎么解决
2023-02-07
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅