自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 一些不错的技术网站书签(持续更新)

基础:

2024-05-03 21:37:16 1629 1

原创 Datasheet学习2(TODO)

(TODO)

2026-05-15 11:47:10 6

原创 Datasheet学习1(TODO)

(TODO)

2026-05-15 11:45:53 7

原创 高通平台IMU的Bringup(TODO)

本文介绍了IMU传感器的组成与接口功能,重点阐述了高通平台IMU驱动的开发流程。IMU包含加速度计、陀螺仪和磁力计,通过I2C接口与主控连接。在高通平台中,IMU驱动主要在BP侧(ADSP/SLPI)实现,包括添加驱动文件、配置编译规则、定义通信协议和修改注册表等步骤;AP侧则负责设备树配置和HAL层适配。最后通过日志查看和功能验证完成驱动调试。该方案利用BP侧低功耗特性实现传感器数据采集,通过QMI通信与AP交互。

2026-05-10 17:49:18 29

原创 高通平台Camera的Bringup

本文简要介绍了相机模组的基本结构(镜头、马达、滤光片、传感器等)和IMX219传感器的bringup流程。重点包括:1)硬件接口配置(MIPI差分信号、I2C控制、供电时序);2)高通平台驱动开发要点(设备树配置、寄存器设置、供电验证);3)XML配置文件的关键参数(传感器地址、分辨率设置、寄存器映射等)。文章提供了相关数据手册和技术博客参考链接,强调供电时序精确控制和寄存器正确配置的重要性。

2026-05-10 13:13:09 355

原创 高通平台Audio的bringup(TODO)

(TODO)

2026-05-06 23:25:53 353

原创 操作系统番外3(Linux的故障诊断)(TODO)

最核心的四大工具箱。

2026-05-04 00:04:34 22

原创 操作系统番外2(Linux的虚拟内存)(TODO)

(TODO)

2026-04-27 09:05:18 159

原创 操作系统7(虚拟内存)

​在之前,虚拟内存就写过一篇:https://blog.csdn.net/fanged/article/details/158703959。不过这一篇只是写了虚拟内存在ARM上的硬件支持,并没有写在操作系统中的应用和实现。这次就结合这个部分来写写。首先还是回顾一下之前接触的虚拟内存的知识:初始化核心作用是Set up page translation tables and enable virtual memory,也就是创建映射表和使能。具体是在mmu_init中创建了paging数组,里面

2026-04-17 17:04:45 238

原创 操作系统6(系统调用)

本文分析了Raspberry Pi OS中不同权限级别切换与系统调用的实现原理。通过fork系统调用创建用户态进程,展示了从内核态(EL1)切换到用户态(EL0)的过程,重点解析了寄存器保存、栈切换等关键机制。文章详细追踪了系统调用流程,包括svc指令触发、异常向量表跳转和内核处理函数执行,并探讨了简单的物理内存管理方式及其安全性问题。最后对比了Linux系统调用标准,总结了ARM架构下权限切换的硬件支持与软件实现要点。

2026-04-14 01:14:24 63

原创 硬件实践2--485测试仪(TODO)

(TODO)

2026-04-12 00:09:56 56

原创 RASPI裸机番外2(volatile)(TODO)

(TODO)

2026-03-30 23:44:50 24

原创 操作系统5(Scheduler)(TODO)

本文分析了树莓派OS调度器的实现原理。通过解析kernel_main()函数中的进程创建和调度流程,重点阐述了copy_process()如何通过get_free_page()分配内存空间构建task_struct结构体,以及_schedule()实现的基于优先级的抢占式调度算法。文章详细介绍了进程上下文切换机制,对比了进程与线程的区别,并梳理了进程的五种状态模型。最后,通过修改定时器间隔验证了调度器的行为变化,展示了不同调度频率对进程执行顺序的影响。该实现参考了早期Linux 0.11的调度逻辑,虽简化但

2026-03-30 23:41:50 69

原创 操作系统4(中断)

本文详细介绍了ARMv8架构中的中断处理机制及其实现。首先阐述了ARMv8中异常和中断的区别,将异常分为同步异常、IRQ、FIQ和系统错误四种类型,并对比了它们的特性。接着描述了ARMv8的异常处理机制,包括通过VBAR_EL1寄存器设置异常向量表、16入口的异常矩阵结构,以及上下文保存与恢复的具体实现方法。文章还展示了实际代码实现,包括异常向量表设置、中断控制器使能、定时器中断处理等核心功能模块。最后对比了Cortex-A和Cortex-M在异常处理上的主要差异,指出Cortex-M使用NVIC触发异常且

2026-03-29 16:23:59 49

原创 操作系统3(进程初始化)(TODO)

本文分析了ARM架构下进程初始化的实现过程,重点比较了RPI-OS和树莓派裸机代码在异常等级(EL)切换方面的差异。文章指出进程初始化主要涉及两个核心操作:获取当前EL等级和设置目标EL等级,代码实现较为简单。通过对比两种实现方案,发现它们虽然都切换到EL1,但使用的spsr_el寄存器值不同(0x1C5 vs 0x3C4)。文中还介绍了ARM开发的权威参考资料,包括架构参考手册、程序员指南等技术文档。最后展示了Linux内核启动代码示例和运行测试结果,指出在QEMU虚拟机中出现的打印输出问题尚未解决。

2026-03-28 11:27:11 185

原创 操作系统番外1(Linux的测试体系)(TODO)

Linux 的高质量不是“写”出来的,而是**“磨”**出来的。代码审查 (Review)挡住了 80% 的垃圾。自动化编译 (Build)挡住了 10% 的跨平台兼容错误。实机测试 (Boot Test)挡住了 9% 的硬件适配问题。最后 1%靠全球数百万用户的反馈和快速迭代。

2026-03-26 11:31:44 330

原创 操作系统2(启动内核)

本文对比了操作系统内核与普通应用程序的本质区别,指出两者都属于广义应用程序,但内核运行在最高特权级(如ARM的EL1/EL2),能直接操作硬件寄存器和物理内存,而应用程序只能通过API接口访问受限资源。作者通过分析树莓派OS启动代码(包括启动配置、UART初始化和内存管理)展示了内核开发特点:需自行处理底层硬件初始化、使用汇编级寄存器接口,并强调跨平台兼容性是主要挑战。代码分析显示该OS实现了基础功能——仅启动主CPU、初始化串口并输出"Hello, world!",其关键差异体现在特权

2026-03-26 11:22:19 46

原创 单反摄影入门(TODO)

雾会让灯光变得柔和、有弥散感,拍出来会有种“城市在云里”的诗意,比通透天更有故事感。这种雾蒙蒙不是你拍糊了,而是成都今天的低空能见度本身就只有5-8公里左右,加上龙泉山到市区的逆温层,导致远景被“吃掉”了。• 远景(成都市区):确实是明显的雾霭/灰霾感,建筑轮廓被一层“白纱”盖住,高楼的细节几乎看不清,只有大致的色块。• 下次选湿度<50%、AQI<50、风力>3级的日子,能见度能到15公里以上,就能拍清楚地标了。• 构图:用眼前的树、房子、山路当前景,把远处的城市灯光当背景,突出“层次+朦胧”。

2026-03-23 17:08:03 33

原创 RASPI裸机10(FAT文件系统)

本文详细介绍了FAT文件系统的工作原理与实现。首先阐述了传统硬盘的物理结构(盘片、磁道、扇区等),说明现代文件系统仍兼容HDD结构。然后解析FAT文件系统的三部分结构:引导区(DBR)存储元数据、FAT表记录簇链、数据区存放实际内容。通过示例演示了文件查找过程,并比较了FAT16/32/exFAT的特性差异。最后结合代码分析MBR/DBR处理、FAT表查找和文件数据读取的实现细节,展示了如何通过LBA地址访问SD卡上的FAT分区。文章还提供了创建测试镜像、分区格式化及验证文件系统的完整流程。

2026-03-18 02:01:30 225

原创 桥梁异常检测(TODO)

你的思路非常务实。在物联网项目中,“稳定采集 > 减少误报 > 精确报警”。第一年把数据接稳、存好,就是最大的成功。你现在扫测的频率是怎样的?如果是全天候实时扫测,数据量会很大。你想让我帮你写一个简单的离群点剔除算法(如 3σ 原则),在网关本地就把那些乱跳的声呐无效数据过滤掉吗?你的思路其实是非常合理的,而且在工程界很常见。很多结构健康监测(SHM)系统在没有精确物理模型时,第一阶段都会采用数据驱动 + 阈值经验法。阶段1:统计异常检测(baseline)阶段2:动态阈值阶段3:AI异常检测。

2026-03-17 01:11:26 346

原创 RASPI裸机8(Debugger)

本文探讨了ARM架构的调试机制实现,分为三个层级:物理链路层(DAP)、内核控制层(断点/监视点)和实时追踪层(CoreSight)。重点分析了基于树莓派的调试器代码实现,包括通过BRK指令触发断点、异常向量表处理和调试主循环功能。调试器提供寄存器查看、内存检查、指令反汇编和程序继续执行等核心功能,其中内存检查可直接访问物理地址,反汇编则能将机器码转换为汇编指令。文章揭示了IDE调试功能背后的底层原理,展示了硬件调试机制与异常处理的紧密关联,为理解ARM平台调试技术提供了实践参考。

2026-03-11 22:49:07 154

原创 Uniapp X hello(TODO)

(TODO)

2026-03-11 13:54:41 31

原创 RASPI裸机番外1(实体机运行)(TODO)

(TODO)

2026-03-11 00:07:32 238

原创 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 79

原创 RASPI裸机7(exceptions)

本文分析了树莓派3(BCM2837)与Pico(RP2040)的异常处理机制差异。树莓派3采用四级权限架构(EL0-EL3),异常处理涉及复杂的权限切换、TLB缺失和缓存一致性维护,其向量表存放指令而非函数指针。相比之下,Pico的NVIC机制更为简单直接,处理时间确定性高。文章详细介绍了树莓派3的异常等级切换流程、核心寄存器功能,并通过代码示例展示了异常向量表设置和处理过程。

2026-03-05 21:13:42 113

原创 RASPI裸机6(VirtualMemory)

MMU(内存管理单元)是 CPU 内部的硬件模块,负责将程序使用的虚拟地址转换为物理内存地址,让每个进程拥有独立、连续的地址空间,实现内存隔离与保护。

2026-03-05 21:13:09 117

原创 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 618

原创 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 87

原创 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 313

原创 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 428

原创 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 925

原创 IT数学基础番外7--卡尔曼滤波的数学解释(TODO)

(TODO)

2026-02-26 00:55:46 392

原创 IT数学基础6--离散数学及应用(TODO)

(TODO)

2026-02-25 11:44:26 52

原创 IT数学基础番外5--拟合函数呈现

本文通过神经网络拟合正弦函数的实验,展示了深度学习的基本原理。实验使用ReLU激活函数,通过调整神经元数量(4、8、16个)观察拟合效果。结果表明,更多神经元能更好地逼近正弦波,但需防止过拟合。文中详细解析了ReLU函数的特性(折点位置由偏置b决定,斜率由权重w控制),并通过可视化展示了各神经元的贡献。实验代码采用PyTorch实现,包含参数初始化技巧和训练过程优化。最后给出了不同任务场景下神经元数量的配置建议:从简单线性任务的4-16个,到复杂认知任务的百万级规模。

2026-02-25 10:03:54 294

原创 IT数学基础番外4--特征向量的应用(TODO)

(TODO)

2026-02-24 15:40:07 299

原创 IT数学基础番外3--小数据线性应用(TODO)

(TODO)

2026-02-24 13:41:16 34

原创 IT数学基础番外2--从非线性到线性(TODO)

(TODO)

2026-02-24 13:40:34 60

原创 IT数学基础番外1--手算梯度下降

本文通过一个单神经元模型演示了梯度下降算法的核心原理。以输入x=1、真实值y=2为例,详细展示了前向传播、损失计算(均方误差)、反向传播求导(对w和b的偏导)以及参数更新的完整过程。当学习率设为0.5时,模型仅需一次迭代即可收敛到完美解;而学习率降为0.1时,需要约20次迭代逐步逼近目标值。文章还对比了不同学习率策略的适用场景,并提供了完整的Python实现代码。这个简单示例揭示了深度学习的基础机制:通过梯度下降不断调整参数使损失最小化,尽管实际网络更复杂(多层结构、非线性激活、海量数据),但优化原理与此完

2026-02-23 16:08:16 878

原创 Embedded Systems Optimization1(TODO)

(TODO)

2026-02-13 01:43:52 39

原创 KVL和KCL(TODO)

(TODO)

2026-02-12 17:15:37 77

空空如也

空空如也

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

TA关注的人

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