- 博客(437)
- 收藏
- 关注
原创 操作系统4(中断)
本文详细介绍了ARMv8架构中的中断处理机制及其实现。首先阐述了ARMv8中异常和中断的区别,将异常分为同步异常、IRQ、FIQ和系统错误四种类型,并对比了它们的特性。接着描述了ARMv8的异常处理机制,包括通过VBAR_EL1寄存器设置异常向量表、16入口的异常矩阵结构,以及上下文保存与恢复的具体实现方法。文章还展示了实际代码实现,包括异常向量表设置、中断控制器使能、定时器中断处理等核心功能模块。最后对比了Cortex-A和Cortex-M在异常处理上的主要差异,指出Cortex-M使用NVIC触发异常且
2026-03-29 16:23:59
19
原创 操作系统3(进程初始化)(TODO)
本文分析了ARM架构下进程初始化的实现过程,重点比较了RPI-OS和树莓派裸机代码在异常等级(EL)切换方面的差异。文章指出进程初始化主要涉及两个核心操作:获取当前EL等级和设置目标EL等级,代码实现较为简单。通过对比两种实现方案,发现它们虽然都切换到EL1,但使用的spsr_el寄存器值不同(0x1C5 vs 0x3C4)。文中还介绍了ARM开发的权威参考资料,包括架构参考手册、程序员指南等技术文档。最后展示了Linux内核启动代码示例和运行测试结果,指出在QEMU虚拟机中出现的打印输出问题尚未解决。
2026-03-28 11:27:11
157
原创 操作系统番外1(Linux的测试体系)(TODO)
Linux 的高质量不是“写”出来的,而是**“磨”**出来的。代码审查 (Review)挡住了 80% 的垃圾。自动化编译 (Build)挡住了 10% 的跨平台兼容错误。实机测试 (Boot Test)挡住了 9% 的硬件适配问题。最后 1%靠全球数百万用户的反馈和快速迭代。
2026-03-26 11:31:44
305
原创 操作系统2(启动内核)
本文对比了操作系统内核与普通应用程序的本质区别,指出两者都属于广义应用程序,但内核运行在最高特权级(如ARM的EL1/EL2),能直接操作硬件寄存器和物理内存,而应用程序只能通过API接口访问受限资源。作者通过分析树莓派OS启动代码(包括启动配置、UART初始化和内存管理)展示了内核开发特点:需自行处理底层硬件初始化、使用汇编级寄存器接口,并强调跨平台兼容性是主要挑战。代码分析显示该OS实现了基础功能——仅启动主CPU、初始化串口并输出"Hello, world!",其关键差异体现在特权
2026-03-26 11:22:19
18
原创 单反摄影入门(TODO)
雾会让灯光变得柔和、有弥散感,拍出来会有种“城市在云里”的诗意,比通透天更有故事感。这种雾蒙蒙不是你拍糊了,而是成都今天的低空能见度本身就只有5-8公里左右,加上龙泉山到市区的逆温层,导致远景被“吃掉”了。• 远景(成都市区):确实是明显的雾霭/灰霾感,建筑轮廓被一层“白纱”盖住,高楼的细节几乎看不清,只有大致的色块。• 下次选湿度<50%、AQI<50、风力>3级的日子,能见度能到15公里以上,就能拍清楚地标了。• 构图:用眼前的树、房子、山路当前景,把远处的城市灯光当背景,突出“层次+朦胧”。
2026-03-23 17:08:03
15
原创 RASPI裸机10(FAT文件系统)
本文详细介绍了FAT文件系统的工作原理与实现。首先阐述了传统硬盘的物理结构(盘片、磁道、扇区等),说明现代文件系统仍兼容HDD结构。然后解析FAT文件系统的三部分结构:引导区(DBR)存储元数据、FAT表记录簇链、数据区存放实际内容。通过示例演示了文件查找过程,并比较了FAT16/32/exFAT的特性差异。最后结合代码分析MBR/DBR处理、FAT表查找和文件数据读取的实现细节,展示了如何通过LBA地址访问SD卡上的FAT分区。文章还提供了创建测试镜像、分区格式化及验证文件系统的完整流程。
2026-03-18 02:01:30
210
原创 桥梁异常检测(TODO)
你的思路非常务实。在物联网项目中,“稳定采集 > 减少误报 > 精确报警”。第一年把数据接稳、存好,就是最大的成功。你现在扫测的频率是怎样的?如果是全天候实时扫测,数据量会很大。你想让我帮你写一个简单的离群点剔除算法(如 3σ 原则),在网关本地就把那些乱跳的声呐无效数据过滤掉吗?你的思路其实是非常合理的,而且在工程界很常见。很多结构健康监测(SHM)系统在没有精确物理模型时,第一阶段都会采用数据驱动 + 阈值经验法。阶段1:统计异常检测(baseline)阶段2:动态阈值阶段3:AI异常检测。
2026-03-17 01:11:26
333
原创 RASPI裸机8(Debugger)
本文探讨了ARM架构的调试机制实现,分为三个层级:物理链路层(DAP)、内核控制层(断点/监视点)和实时追踪层(CoreSight)。重点分析了基于树莓派的调试器代码实现,包括通过BRK指令触发断点、异常向量表处理和调试主循环功能。调试器提供寄存器查看、内存检查、指令反汇编和程序继续执行等核心功能,其中内存检查可直接访问物理地址,反汇编则能将机器码转换为汇编指令。文章揭示了IDE调试功能背后的底层原理,展示了硬件调试机制与异常处理的紧密关联,为理解ARM平台调试技术提供了实践参考。
2026-03-11 22:49:07
143
原创 RASPI裸机9(SDIO)
本文详细分析了树莓派SD卡驱动的实现原理和文件系统操作流程。主要内容包括: SD卡驱动架构分为物理层(读写扇区)和逻辑层(解析FAT表),通过四个模块实现完整功能。作者指出实际开发中很少需要修改文件系统内部实现。 SD协议详解:介绍了SPI和SD两种总线模式,关键命令(CMD0/8/17/24等)及初始化流程,重点阐述了博通平台通过EMMC控制器实现SD卡通信的机制。 代码实现分析:详细解读了GPIO配置(ALT3模式)、EMMC控制器初始化、命令发送机制和块读取流程,展示了如何通过寄存器操作完成SD卡底层
2026-03-05 21:14:58
65
原创 RASPI裸机7(exceptions)
本文分析了树莓派3(BCM2837)与Pico(RP2040)的异常处理机制差异。树莓派3采用四级权限架构(EL0-EL3),异常处理涉及复杂的权限切换、TLB缺失和缓存一致性维护,其向量表存放指令而非函数指针。相比之下,Pico的NVIC机制更为简单直接,处理时间确定性高。文章详细介绍了树莓派3的异常等级切换流程、核心寄存器功能,并通过代码示例展示了异常向量表设置和处理过程。
2026-03-05 21:13:42
75
原创 RASPI裸机6(VirtualMemory)
MMU(内存管理单元)是 CPU 内部的硬件模块,负责将程序使用的虚拟地址转换为物理内存地址,让每个进程拥有独立、连续的地址空间,实现内存隔离与保护。
2026-03-05 21:13:09
91
原创 RASPI裸机5(framebuffer)
本文介绍了树莓派3B的framebuffer显示原理与实现。framebuffer作为Linux系统的显示硬件抽象层,通过内存映射方式让CPU直接操作显存数据。文章对比了SPI/I2C、framebuffer和DRM三种显示方案的特点,重点分析了树莓派3B中framebuffer的工作机制:CPU与GPU共享DDR内存,GPU显示控制器定期扫描该区域实现画面刷新。通过代码示例展示了如何通过Mailbox申请显存、设置显示参数,并使用GenericTimer实现延时功能。最后演示了在QEMU环境下成功显示图片
2026-03-05 00:34:22
606
原创 RASPI裸机4(MailBox)
本文介绍了树莓派3B中的Mailbox和UART硬件通信机制。Mailbox是SoC内部处理器核心间的硬件通信机制,采用"请求/响应"模型,通过特定寄存器实现ARM与GPU间的数据传输。树莓派3B包含两种Mailbox:VideoCore Mailbox用于ARM-GPU通信,ARM Local Mailbox用于多核同步。此外还详细分析了UART实现,包括PL011标准UART和MiniUART的区别,以及地址映射问题。最后展示了通过Mailbox获取设备序列号的实现代码,并在QEMU
2026-03-04 15:41:12
52
原创 RASPI裸机3(多核)
本文介绍了Raspberry Pi 3多核启动的实现过程。主要内容包括:1) Makefile修改,添加了多文件编译支持;2) 简单的main.c空循环实现;3) 链接脚本增加数据段分区;4) 关键启动代码分析,包括多核识别、栈设置和BSS段清零。启动代码通过MPIDR_EL1寄存器识别核心编号,仅核心0执行初始化,其他核心进入休眠。反汇编结果显示核心0成功跳转到main函数,其他核心保持在WFE状态。该实现为后续多核开发奠定了基础,展示了ARM多核处理器的基本启动流程。
2026-03-03 17:06:19
306
原创 RASPI裸机2(HelloWorld)
本文分析了树莓派3B裸机程序的编译运行流程。首先通过start.S汇编文件编译生成start.o,其中仅包含wfe指令和循环跳转,使CPU进入低功耗状态。接着使用GCC链接生成kernel8.elf文件,关键是通过link.ld脚本指定代码段起始地址为0x80000。最后使用objcopy工具将ELF转换为二进制镜像kernel8.img。运行测试时,QEMU显示CPU从0x80000地址开始执行wfe指令,并出现异常向量表相关输出。整个过程与树莓派Pico开发类似,主要区别在于ARMv8四核架构。
2026-03-02 00:51:33
399
原创 Github/codespaces开发环境
文章摘要:作者分享使用GitHub Codespaces搭建Linux开发环境的体验。该服务提供2核8GB/4核配置,每月免费120核时,集成GitHub代码库速度快。通过修改超时设置和配置.devcontainer文件,可快速创建包含Python、Node.js等工具的Docker环境。实际测试编译树莓派3内核成功,相比腾讯云/阿里云更便捷。费用方面,使用3天产生0.44美元费用,但可通过免费额度抵扣。虽然比实体Linux稍逊,但作为云端开发方案非常实用。
2026-02-26 17:21:03
896
原创 IT数学基础番外5--拟合函数呈现
本文通过神经网络拟合正弦函数的实验,展示了深度学习的基本原理。实验使用ReLU激活函数,通过调整神经元数量(4、8、16个)观察拟合效果。结果表明,更多神经元能更好地逼近正弦波,但需防止过拟合。文中详细解析了ReLU函数的特性(折点位置由偏置b决定,斜率由权重w控制),并通过可视化展示了各神经元的贡献。实验代码采用PyTorch实现,包含参数初始化技巧和训练过程优化。最后给出了不同任务场景下神经元数量的配置建议:从简单线性任务的4-16个,到复杂认知任务的百万级规模。
2026-02-25 10:03:54
289
原创 IT数学基础番外1--手算梯度下降
本文通过一个单神经元模型演示了梯度下降算法的核心原理。以输入x=1、真实值y=2为例,详细展示了前向传播、损失计算(均方误差)、反向传播求导(对w和b的偏导)以及参数更新的完整过程。当学习率设为0.5时,模型仅需一次迭代即可收敛到完美解;而学习率降为0.1时,需要约20次迭代逐步逼近目标值。文章还对比了不同学习率策略的适用场景,并提供了完整的Python实现代码。这个简单示例揭示了深度学习的基础机制:通过梯度下降不断调整参数使损失最小化,尽管实际网络更复杂(多层结构、非线性激活、海量数据),但优化原理与此完
2026-02-23 16:08:16
866
原创 信号处理入门5(应用)
本文通过实验演示了IQ调制原理及其在QAM调制中的应用。首先解释了IQ调制的核心思想:利用正弦和余弦的正交性,通过I(同相)和Q(正交)两路传输不同数据。随后用Python代码实现了4QAM和16QAM调制,直观展示了相位和振幅变化对数据传输的影响。文章还介绍了多速率信号处理中的抽取和内插技术,强调了滤波器在防止信号失真中的关键作用。最后讨论了噪声分析和实时缓存技术在实际系统中的应用。整个内容以蓝牙耳机工作流程为例,将各个技术环节串联起来,展现了数字信号处理的完整应用场景。
2026-02-05 01:35:23
419
原创 3js(3)(动态修改)
数字孪生模型动态处理的三种主要方式:Node节点变换、Primitive/Vertex顶点修改和Shader着色器。Node变换适用于整体刚体变换(如水位上涨),通过改变坐标系实现位移、旋转和缩放。Primitive/Vertex直接修改几何体顶点坐标(如河床冲槽),适合局部形状变化。Shader通过GPU渲染改变视觉效果(如波动效果),不修改几何体本身。文章通过椅子模型案例演示了三种方法的实现:Node操作整体部件,Primitive修改顶点坐标,Shader利用TSL语言实现动态波动效果。三种方法各有优
2026-02-02 01:52:57
426
原创 信号处理入门4(系统设计)
本文介绍了数字信号处理中的两种主要滤波器:FIR(有限冲激响应)和IIR(无限冲激响应)滤波器。FIR滤波器通过加权平均实现信号处理,适用于信号重塑、分频和监测,但计算量较大。IIR滤波器利用反馈机制,计算效率高但存在稳定性风险。文章通过Python代码演示了两种滤波器在信号处理中的应用,并讨论了IIR滤波器的稳定性监测方法,包括极点检查和运行时的溢出处理。实际应用中常将高阶IIR分解为多个二阶滤波器串联以提高稳定性。
2026-02-01 00:58:16
422
原创 信号处理入门3(频域分析)
本文介绍了数字信号处理中的几种核心变换算法。首先对比了DFT(离散傅里叶变换)和FFT(快速傅里叶变换),指出FFT通过递归算法将计算复杂度从O(N²)降至O(NlogN)。其次讨论了频谱泄露现象及其解决方法——窗函数技术,包括汉明窗、汉宁窗等不同类型窗函数的特点和应用场景。最后简要介绍了DCT(离散余弦变换)在图像和音频压缩中的优势,它能将信号能量集中在少数低频系数上。文章通过Python代码示例展示了FFT实际应用效果,并对比了加窗处理前后的频谱差异。
2026-01-30 13:41:58
88
原创 信号处理入门2(数学工具)
本文简要介绍了信号处理中的几个核心概念及其应用:差分方程用于滤波和系统建模,通过权重系数实现平滑或共振效果;微积分模型需转换为离散差分才能在计算机中实现;Z变换用于求解差分方程的优化系数,现已有工具自动完成;自相关和互相关通过乘积和算法分别检测信号周期性和时延,广泛应用于回声检测等领域。这些工具共同构成了从理论建模到工程实现的技术链条,在滤波、频谱分析和信号检测中发挥关键作用。
2026-01-30 01:40:43
877
原创 信号处理入门1(信号基础)
摘要:本文介绍了信号的基本概念,重点分析了声音信号的物理特性。声音是由物体振动产生的压力波,通过介质传播,其特性包括频率(振动次数)、振幅(音量)、相位(波形位置)和谐波(音色基础)。谐波决定了乐器的独特音色,由基波整数倍频率组成。文章还探讨了声音数字化过程中的采样定理,指出采样率需大于信号频率2倍才能准确还原。最后,通过时域和频域的类比,解释了信号分析的两种视角:时域关注波形随时间变化,频域则揭示信号的频率组成。
2026-01-28 15:52:55
230
原创 STM32(7)--FPU(TODO)
y[n] = \alpha \cdot x[n] + (1 - \alpha) \cdot y[n-1]$ 这就是一个最基础的差分方程,也是《信号与系统》的第一课。滤掉音频里的高频刺耳噪声。2 实现1--数字低通滤波器。
2026-01-28 00:13:08
349
原创 简单用用频谱分析仪(Lora)
本文介绍了两种测试LoRa信号质量的方法:RSSI测量和频谱分析。RSSI通过接收端代码获取信号强度值,能准确反映信号质量但不够便携;频谱分析仪则可直观显示信号强度和干扰情况。文章详细说明了两种方法的实现步骤:RSSI需要编写Python代码读取串口数据,而频谱分析需配置LoRa模块高速发送数据。信号质量评估标准包括信号强度(dBm值)和干扰程度,建议信号强度不低于-100dBm且干扰少。最后提到可通过更换高增益天线提升信号质量,每增加1dB可使信号翻倍。
2026-01-27 11:52:54
506
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅
1