自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(887)
  • 资源 (3)
  • 收藏
  • 关注

原创 嵌入式的底层逻辑

例如,编写一个UART驱动程序,需要配置UART的寄存器以实现正确的通信波特率、数据位、停止位等参数设置,并处理接收和发送中断,确保数据的准确传输。- 开发者需要熟悉所选RTOS的内核机制,如任务创建、删除、挂起和恢复,以及如何利用信号量、互斥锁等同步机制来实现任务间的通信和资源共享,以构建高效、稳定的嵌入式应用程序。总之,嵌入式开发的底层逻辑涵盖硬件基础、软件层面以及系统设计与集成等多个相互关联的方面,开发者需要全面掌握这些知识和技能,才能开发出高效、稳定、可靠的嵌入式系统。

2026-03-19 09:23:41 368

原创 备份寄存器

ARM 备份寄存器(Banked Registers)是按处理器模式独立映射的物理寄存器,核心作用是:模式切换时自动隔离寄存器现场,避免数据冲突、加速异常/中断处理。4. SPSR(备份状态寄存器):每个特权模式有专属 SPSR,保存进入异常前的 CPSR,用于异常返回时恢复状态。一进来就已经在 IRQ 模式,用的是 备份寄存器:LR_irq、SPSR_irq、SP_irq。- R13(SP,栈指针)、R14(LR,链接寄存器):每组对应 6套物理寄存器。- 备份(R8~R14):按模式独立物理寄存器;

2026-03-18 10:57:33 379

原创 SIMD技术

其核心思想是:一条指令可以同时处理多个数据元素。在计算机中,SIMD 通过特殊的宽寄存器(如128位、256位甚至512位)一次性加载多个数据(如4个32位整数),然后用一条指令(如一次加法)同时完成所有数据的运算。这就像老师对全班同学说“所有人请起立”,一条指令就让所有学生(多个数据)同时执行“起立”这个动作,而不是挨个点名让每个学生单独起立。SIMD 是现代处理器(包括x86的SSE/AVX,ARM的NEON/SVE)提升数据并行任务性能的关键技术。多媒体处理:图像/视频编解码、滤镜、色彩空间转换。

2026-03-13 11:34:39 83

原创 eFuse / OTP / Flash / EEPROM 对比

OTP:只能写 1 次(One-Time Programmable)eFuse / OTP / Flash / EEPROM 核心对比。- eFuse/OTP 一旦写入无法修改/回滚,最适合安全场景。- 要绝对安全、只写一次 → 用 eFuse / OTP。- 用途和 eFuse 接近:序列号、密钥、配置。- 一般只存:密钥、安全配置、唯一ID、校准值。- eFuse:只能写 1 次,烧断就不可逆。- Flash:很大,Mbit / Gbit。- 供电电压、Flash/ROM 容量标识。

2026-02-24 11:13:46 519

原创 芯片的Serdes

SERDES 是芯片里负责高速串行收发的硬核 IP/模块,全称 SERializer/DESerializer(串行器/解串器)。- 线速率(Line Rate):比如 2.5G、5G、10G、25G、56G、112Gbps。- Ethernet(1G/10G/25G/100G/400G 等)- 8b/10b、64b/66b、128b/130b 等编码。- 误码率(BER):如 1e-12、1e-15,越低越可靠。单通道很容易做到 10G、25G、56G、112Gbps,

2026-01-14 21:36:46 1311

原创 芯片的crack检测

及时准确地进行芯片的Crack检测对于保证芯片质量、提高芯片可靠性以及降低因芯片裂纹导致的系统故障风险具有重要意义。**超声波检测**:超声波在芯片中传播时,如果遇到裂纹等缺陷,会产生反射、散射等现象,通过检测这些超声波信号的变化来判断芯片是否存在裂纹。**激光扫描检测**:使用激光对芯片表面进行扫描,通过分析反射光的强度、角度等信息,来检测芯片表面的微小裂纹和缺陷。**外观检查**:通过肉眼或显微镜直接观察芯片表面,查看是否有明显的裂纹、划痕等缺陷。

2026-01-13 10:03:07 384

原创 线程阻塞调用与同步调用的区别

线程阻塞调用:调用方在等待结果时,线程被挂起(不占用 CPU),直到条件满足再被唤醒。你点完单后,店员让你“坐着等叫号”,你不需要一直站在柜台前,但你也不能去做别的事,只能等。因为大多数同步调用在底层实现上都会阻塞线程,所以大家会把“同步”和“阻塞”当成同义词。你点完单后,店员给你一个取餐码,你可以去逛街,等咖啡好了再回来取。- 同步调用:调用方必须等被调用方“完成”后才能继续执行。同步调用关注“调用方式”,线程阻塞关注“线程状态”。- 阻塞 / 非阻塞:描述“等待时线程是否被挂起”。

2026-01-12 11:05:47 296

原创 硬盘的MBR

GPT没有4个主分区的限制(理论上支持128个以上分区),支持远超2TB的磁盘容量,并且通过存储多个备份副本,数据存储更安全可靠。这段程序会检查分区表的完整性,并寻找被标记为“活动”的分区,最后将控制权转交给该分区上的操作系统引导程序,从而启动Windows或Linux等操作系统。如果需要更多分区,则需将其中一个主分区设置为扩展分区,并在其中再创建多个逻辑分区。硬盘的主引导记录(MBR) 是计算机启动时访问硬盘最先读取的一个关键数据区域,它位于硬盘的第一个物理扇区(0柱面0磁头1扇区)。

2025-12-29 12:08:32 328

原创 input子系统工作原理

"cat /proc/bus/input/devices" 命令查看系统已注册的输入设备及其对应的。使用 "set_bit(EV_KEY, dev->evbit)" 设置设备支持的事件类型。"/dev/input/eventX" 这些字符设备文件来获取输入事件。使用 "set_bit(KEY_A, dev->keybit)" 设置支持的具体键值。"input_register_device(dev)" 将设备注册到子系统。"input_sync()" 至关重要,它告知系统一个完整的事件报告已经结束。

2025-12-27 09:57:09 915

原创 gpio子系统控制原理

"gpiod_to_irq()" 将 GPIO 引脚转换为对应的中断号,然后使用标准的中断 API 来注册中断处理函数,从而在引脚电平变化时(如按键按下)快速响应。- GPIO 设备 (gpio_device):这是内核内部用于表示一个已注册的 GPIO 控制器的数据结构,它关联着。"gpiod_line_request_output(line, "my-led", 0)" // 初始化为低电平。"/sys/class/gpio/" 下的内容,可以了解有哪些 GPIO 控制器和已被导出的引脚。

2025-12-27 09:17:09 308

原创 fwrite与fflush作用

stdout 是行缓冲,用 printf 但没 \n ,又没 fflush(stdout) ,可能看不到输出。简单说: fwrite 负责“写数据”, fflush 负责“把缓冲里的内容真的推到文件/设备”。简单总结: fwrite 是“写到缓冲区”, fflush 是“把缓冲区里的内容立刻写出去”。- 只 fwrite 不 fflush ,程序异常退出(崩溃、信号),缓冲区里的数据会丢失。- 对输出流/更新流:把缓冲区里还没写出去的数据,立即写到底层文件/设备。

2025-12-26 10:58:24 345

原创 Armv7的寄存器介绍

CPSR:当前程序状态寄存器,记录 ALU 运算标志(N/Z/C/V)、中断屏蔽位(I/F)、处理器模式位(M[4:0])等,所有模式共享。- R8-R12:部分备份寄存器,FIQ 模式有独立备份(R8_fiq-R12_fiq),避免 FIQ 中断处理破坏原有数据。- SPSR:备份程序状态寄存器,仅异常模式拥有,用于保存进入异常前的 CPSR 值,异常返回时恢复 CPSR。- R13 (SP):栈指针寄存器,各模式有独立备份,存放当前模式下栈顶地址。二、不同模式下的寄存器。

2025-12-18 15:40:24 484

原创 Arm的协处理器

ARM协处理器是辅助主CPU处理特定任务的专用硬件,通过扩展指令集和硬件加速,提升ARM架构在特定场景的性能与效率,主CPU可通过协处理器指令(如CP15、CP10等)调度其工作。- 系统控制类(如CP15):负责内存管理(MMU)、缓存控制、异常处理配置,是ARM内核的核心辅助单元,贯穿从ARMv4到ARMv8的架构演进。需要注意的是,在 ARMv8 开始的 64 位架构中,协处理器的概念有所弱化,许多功能被集成到核心指令集或通过新的系统寄存器进行控制。每个协处理器只执行针对自身的协处理指令。

2025-12-10 15:21:10 1123

原创 给arm的cpu设置为user模式

因此,所有对处理器模式和系统资源的初始化工作(包括为用户模式设置栈指针)必须在进入用户模式之前,在特权模式下完成。orr r0, r0, #0x10 // 设置为 User 模式(M[4:0] = 0b10000)// bic r0, r0, #0x80 // 若需启用 IRQ,取消此行注释(清除 I 位)* 说明:User 模式无特权,无法访问系统寄存器/修改模式,需从特权模式(如 SVC)切换。// 2. 清除低 5 位模式位(M[4:0]),设置为 User 模式(0x10)

2025-12-10 11:34:59 471

原创 软中断和tasklet的区别

2. 不同tasklet间仍可能并发:需要注意的是,不同的tasklet可能会在不同的CPU上同时执行。如果你的多个tasklet需要访问相同的共享硬件或全局数据,那么在这些tasklet之间,你仍然需要使用自旋锁来保护这些共享资源。- Tasklet在性能与易用性间折衷,默认串行化:它通过牺牲同一任务在多核上的并行能力,换取了编程的简便性,是驱动开发中更常用、更安全的选择。软中断的设计目标是追求极高的性能,因此它允许同一类型的软中断处理函数在不同的CPU上完全并发执行。"kmalloc",信号量等)。

2025-11-27 11:21:46 408

原创 中断的上半部与下半部

中断下半部:上半部结束后延迟执行的“非紧急任务”,开启中断、可调度,核心是处理耗时操作(如数据解析、上报用户层),不阻塞其他中断响应。msleep(10);printk(KERN_INFO "下半部(tasklet):开始解析数据\n");printk(KERN_INFO "下半部(tasklet):数据解析完成\n");printk(KERN_INFO "上半部:紧急任务完成,交出后续处理\n");

2025-11-27 11:14:13 371

原创 缓冲区的刷新

这样就将多次零散的I/O操作合并为少数几次批量操作,显著减少了系统调用的开销和对物理设备的访问次数,从而解放了CPU,提高了整个系统的吞吐量。缓冲区是计算机系统中一项重要的基础机制,简单来说,它像是数据流转过程中的一个“中转站”或“等候区”,其主要目的是协调不同速度的设备或组件之间的数据交互,从而提升整体效率。所以数据从程序到磁盘,可能需要先经过用户态缓冲区,再经过内核缓冲区,最后才写入磁盘。"printf", "fgets" 所使用的)是用户态的缓冲区,由语言的标准库提供和管理,封装在。

2025-11-21 11:26:08 306

原创 不可重入函数

与之相对的是“可重入”(Reentrant)函数,可重入函数在被多个线程调用时,能够正确地处理并发情况,不会因为并发调用而导致数据损坏或其他错误。“不可重入”(Non-reentrant)是指一个函数或代码段在被多个并发执行的线程或进程调用时,不能安全地被多次同时执行,否则可能会导致数据错误、逻辑混乱或其他不可预期的问题。- 一个线程正在执行该函数的过程中,另一个线程突然进入该函数,可能会覆盖前一个线程正在使用或修改的数据,导致结果错误。

2025-11-21 11:20:28 394

原创 pinctrl子系统介绍

1. Pin Controller 设备节点:这个节点描述了SoC内部的引脚控制器,它定义了引脚或引脚组(pin group)可以被配置成何种功能(function)和电气特性。"pinctrl-names" 里名为 "default" 的状态并自动应用。- 客户端(pinctrl-client):指那些需要使用引脚的设备驱动,如I2C、SPI驱动。- 核心层(pinctrl-core):作为中间层,它向上为其他驱动提供统一的API接口,向下定义了一套标准的操作函数集(如。/* 默认状态使用上述配置 */

2025-11-14 11:30:35 716

原创 ARM的中断模式与快速中断模式

一、介绍在ARM架构中,和是两种关键的中断处理模式,它们在响应紧急任务时扮演着不同角色。下面的表格清晰地展示了它们的核心区别。

2025-10-25 15:46:54 670

原创 Arm芯片的工作模式

当发生异常导致模式切换时,当前模式的 CPSR 会自动保存到新异常模式的 SPSR 中。- 中断处理:当外设触发一个中断,CPU 会自动从 User 模式切换到 IRQ 模式,并使用该模式下的独立 R13 和 R14 寄存器。- 主动切换(软件):在特权模式下,软件可以通过修改当前程序状态寄存器 (CPSR) 中的模式控制位(M[4:0])来直接切换模式。下面介绍七种工作模式。未定义指令中止模式 (Undefined, und) 处理未定义的指令陷阱,支持硬件协处理器仿真 特权模式 异常模式。

2025-10-25 11:54:44 512

原创 Linux平台设备驱动

平台设备驱动模型通过设备树描述硬件总线-设备-驱动匹配模型以及标准的初始化和资源管理接口,为那些直接集成在SOC上的设备提供了清晰、高效的管理方式,是实现驱动可移植性和嵌入式Linux系统灵活性的基石。希望以上解释能帮助你清晰地理解Linux平台设备驱动的原理。如果你对设备树的详细语法、中断处理的具体实现,或是更复杂的DMA传输等进阶话题感兴趣,我很乐意继续为你介绍。

2025-10-22 21:01:17 352

原创 Linux的内核模块加载过程

3. **模块初始化与注册**:初始化函数完成模块的初始化工作后,模块会向内核注册自己,以便内核能够管理和使用该模块提供的功能。如果需要卸载模块,系统会执行相反的过程,调用模块的退出函数来清理模块占用的资源,并从内核中移除该模块的相关信息。2. **依赖检查**:内核会检查要加载的模块是否有依赖关系,即该模块是否依赖于其他已经加载的模块或内核中的某些功能。2. **其他模块**:对于其他类型的模块,如文件系统模块或网络协议模块,它们会集成到内核的相应子系统中,参与内核的运行和处理过程。

2025-10-22 19:47:03 502

原创 指令字节数如何影响处理器的流水线效率

现代处理器通过指令压缩技术(如ARM的Thumb)、微操作转换(如x86架构将复杂指令拆解为内部简单微操作)等先进技术,正在努力弥合这一差距,在代码密度、指令功能和流水线效率之间寻求最佳平衡。多字节指令则有更充裕的空间,通常一个字节是操作码,后续字节用于存放操作数(如立即数、内存地址等),因此功能更复杂、灵活。定长指令(如经典RISC)译码简单,流水线更平滑。理想情况下,每个时钟周期都有一条新指令进入流水线(取指),同时有一条指令完成(写回),从而实现每个周期完成一条指令的高吞吐率。

2025-10-17 11:17:24 424

原创 单字节指令与多字节指令的平衡

混合编码策略:现代CISC架构(如x86)实际运用了RISC思想,会将复杂的多字节指令在CPU内部微操作阶段分解为多个更简单、类似于RISC指令的微操作,然后由高效的核心执行单元处理。许多现代ARM处理器(如Cortex-M系列)支持Thumb-2技术,它允许在同一个程序中混合使用16位和32位的指令,从而在保持较高代码密度(接近Thumb)的同时,又能通过32位指令执行关键复杂任务以保证性能(接近ARM)。* 复杂操作用长指令:当指令需要处理复杂寻址或立即数时,就会使用多字节指令。

2025-10-17 11:13:26 400

原创 单字节指令

执行时,CPU读取该字节后,直接将累加器内的数据置为0,全程仅需1个指令周期。单字节指令是指仅需占用1个字节(8位二进制数)存储空间的计算机指令,它能直接包含操作码(指明指令功能)和部分操作数地址信息,执行速度快、内存开销小。这类指令常见于早期8位微处理器(如Intel 8080),例如“停机”“累加器清零”等简单操作,因无需额外字节存储操作数,能高效利用有限的内存资源。- 读取过程:仅需1步——CPU从内存中读取1个字节(00000110),直接解析出“操作码(清零)+操作对象(累加器)”。

2025-10-17 11:02:36 424

原创 linux的inode

inode是索引节点(Index Node)的缩写,其本质是文件系统磁盘分区上的一个数据结构,用于描述一个文件或目录的元数据(metadata)。* 超级块(Super Block):这是文件系统的“总控信息中心”,记录了整个文件系统的全局信息,例如数据块的总数和空闲数、inode的总数和空闲数、文件系统的类型和状态等。上图展示了一个文件系统(例如EXT4)在磁盘上的典型布局,它采用“分而治之”的思想,将一个大的分区划分成多个块组(Block Group)进行管理,每个块组都包含图中所示的这些基本结构。

2025-10-17 09:40:07 406

原创 Linux的设备号

"udev"(用户空间设备管理器)来自动管理设备文件。"alloc_chrdev_region" 函数,请求内核动态分配一个可用的主设备号,这有效避免了静态分配可能带来的冲突问题。在Linux系统中,主设备号是连接文件系统与硬件设备的关键桥梁。它像一个分类标签,帮助内核快速为设备文件找到对应的驱动程序。在早期,设备号(尤其是主设备号)需要开发者静态指定,这容易引发冲突。"/dev" 目录下创建设备文件,并在设备移除时删除对应的文件,这使得设备管理更加灵活和自动化。* 设备文件的管理:传统的设备文件是使用。

2025-10-15 17:22:32 180

原创 Linux的设备驱动模型

在匹配成功的时候会调用驱动device_driver结构体中probe方法(通常在probe中获取设备资源,具体的功能可由驱动编写人员自定义), 并且在移除设备或驱动时,会调用device_driver结构体中remove方法。Linux引入了设备驱动模型分层的概念, 将我们编写的驱动代码分成了两块:设备与驱动。在总线上管理着两个链表,分别管理着设备和驱动,当我们向系统注册一个驱动时,便会向驱动的管理链表插入我们的新驱动, 同样当我们向系统注册一个设备时,便会向设备的管理链表插入我们的新设备。

2025-10-10 21:35:30 1038

原创 线程池的使用场景

并行计算与批处理:当需要对大量数据进行处理时(如批量处理图片、解析多个文件),可以将任务拆分成多个子任务,提交到线程池中并行处理,充分利用多核CPU的计算能力,显著提高处理速度。* Web服务器处理请求:像Tomcat、Netty这样的Web服务器,会使用线程池来处理大量并发的HTTP请求,每个请求都由线程池中的一个线程来处理。* 设定合适的拒绝策略:当线程池和队列已满时,需要有相应的拒绝策略(如丢弃、抛出异常等)来处理新提交的任务,防止任务无限堆积。* 谨慎选择任务队列:推荐使用有界队列(如。

2025-09-26 10:22:40 373

原创 网络处理器芯片

通过网络处理器专用的指令集或高级语言(如P4),开发者可以编写微码或程序来定义数据包的处理行为,从而快速适应新的网络协议(如从IPv4到IPv6)或部署新的网络功能,而无需更换硬件。但处理海量、简单的网络数据包(检查包头、查询路由表、转发)时,像是用一位“大学教授”去干“分拣快递”的活,大材小用,效率低下,速度成为瓶颈。它在数据洪流中,依靠其并行、可编程、硬件加速的三大法宝,智能、快速、准确地引导每一个数据包去往它该去的地方,是支撑起当今互联网海量数据交换的基石技术。

2025-09-26 08:36:09 804

原创 ASIC的作用

芯片类型比喻特点适用场景CPU(通用处理器)万能瑞士军刀非常灵活,什么都能做,但效率不高个人电脑、服务器(处理复杂多变任务)GPU(图形处理器)巨型画笔工厂擅长并行处理大量简单任务图形渲染、科学计算、AI训练FPGA(现场可编程门阵列)乐高积木硬件可重构,非常灵活,开发周期短原型验证、小批量设备、需要硬件升级的场合ASIC(专用集成电路)特制超级钥匙性能最强、效率最高,但功能固化、前期成本极高需求固定、大规模量产的产品(如手机、矿机)一个常见的流程是。

2025-09-25 11:57:31 1114

原创 微动开关的作用

接触可靠:瞬动结构使得触点通断非常迅速、干脆,接触电阻小,可靠性高。寿命长:通常有数十万次到上百万次的机械寿命,因为它能快速灭弧,减少对触点的烧蚀。体积小,驱动力小:只需一个很小的行程和力度即可触发,适合空间有限和需要精密控制的场合。成本低廉:技术成熟,制造成本低。总而言之,微动开关是一个极其重要的“机械-电信号转换器”和“检测卫士”。它将物理世界的“有”或“无”、“开”或“关”、“到”或“未到”这种状态,精准地转化为电子世界能理解的“通”或“断”信号。

2025-09-25 11:46:10 923

原创 拨码开关(DIP Switch)的作用

尽管在现代智能设备中,许多功能已被软件菜单取代,但在强调可靠性、简单性和隔离性的工业、通信及嵌入式领域,拨码开关依然是最经济、最可靠的选择之一。每个拨码开关的“ON”和“OFF”状态,对应着电路中的一个高电平(通常是VCC)或低电平(GND)。在产品出厂或用户需要改变设备行为时,通过拨动不同的开关组合,来设定设备的工作模式、地址、参数等。* 类比:就像老式的收音机,背后可能有几个开关来选择波段(AM/FM)或灵敏度。对于一些简单的设备,用拨码开关来设定基本参数,如波特率(通信速度)、IP地址的最后一位等。

2025-09-25 11:20:55 1085

原创 肖特基二极管的作用

当你需要一个二极管在低压、大电流、高频率的电路中工作时,肖特基二极管通常是首选,它能极大地提升系统的效率和性能。当有异常的瞬时高电压(如感性负载断开时产生的反向电动势)到来时,肖特基二极管会迅速导通,将这个高压“钳制”在它自身的低正向压降水平(约0.3V),从而避免高压击穿核心元件。这意味着在同样大的输出电流下,肖特基二极管的功率损耗更小,发热更少,从而显著提高电源的整体效率。肖特基二极是一种非常特殊且重要的半导体。* 极快的开关速度:它能完美跟上高频开关的速度,不会因为开关延迟而产生严重的噪声和损耗。

2025-09-25 11:09:36 1571

原创 开关电源的作用

需要降低压力时,它不是持续半开着,而是以极高的频率开关,通过控制“开”和“关”的时间比例来精确控制最终的平均水压。由于效率高,损耗的能量以热的形式散失的少,因此不需要巨大的散热片。总而言之,开关电源是现代电子设备的“心脏”和“能量枢纽”,它的高效和小型化是电子设备得以飞速发展并向便携化、高性能化迈进的关键技术基石。可以相对容易地设计出同时提供多组稳定、隔离的不同电压(如+12V, +5V, +3.3V, -12V)的电源,以满足复杂电路板的需求。* 工业控制:PLC、工业机器人、数控机床的驱动电源。

2025-09-25 10:58:11 553

原创 cpu密集型与i/o密集型任务的区别

合理使用多线程/多进程:虽然I/O等待时CPU空闲,但通过增加线程数,可以在一个线程等待I/O时让其他线程继续使用CPU,从而提高整体吞吐量。"perf"(Linux)、VisualVM(Java)等工具,查看 CPU使用率、I/O等待时间(%wa)、上下文切换次数 等指标。2. 分析时间消耗:若任务大部分时间在等待I/O操作(如磁盘读写、网络响应),则是I/O密集型;* I/O密集型任务优化:核心是减少I/O等待时间,提高并发处理能力。* 批量操作:将多个小I/O操作合并为批量操作,减少I/O次数。

2025-09-20 08:00:49 512

原创 Linux的DTS配置信息

在嵌入式 Linux 开发中,DTS(Device Tree Source,设备树源文件) 是一种描述硬件配置信息的文本文件,核心作用是将硬件细节(如CPU、内存、外设接口、中断号等)与内核代码解耦,避免修改内核源码即可适配不同硬件平台。- 总线节点:描述硬件总线(如I2C、SPI、AHB)的拓扑,外设节点会挂载到对应的总线节点下(如I2C传感器节点挂载在 i2c@44E0B000 总线节点下)。// 子地址0x0映射到父地址0x10100000,长度0x10000。

2025-09-19 11:45:10 601

原创 大端模式与小端模式

主流处理器架构:x86(Intel/AMD)、ARM(绝大多数嵌入式场景,如手机、物联网设备)、RISC-V(主流配置)等均默认采用小端模式,是嵌入式开发中最常见的模式。- 部分处理器架构:早期或特定领域处理器(如 PowerPC、MIPS 部分型号、SPARC)默认采用大端模式,配套的硬件外设(如部分传感器、通信芯片)也会遵循该模式设计。- 本地数据快速处理:在无需跨设备/跨协议交互的场景(如仅在本地处理器内部运算的变量、缓存数据),小端模式能减少处理器对字节的移位操作,提升数据读写效率。

2025-09-19 11:35:01 461

原创 Linux内核态适配I2C设备的流程

实现 functionality 函数:返回适配器支持的功能标志,例如 I2C_FUNC_I2C (标准 I2C)、 I2C_FUNC_10BIT_ADDR (支持 10 位地址)等。注册适配器:在驱动的 probe 函数中,调用 i2c_add_adapter() 或 i2c_add_numbered_adapter() 将适配器注册到内核。注册驱动:使用 module_i2c_driver() 宏或 i2c_add_driver() 函数注册 i2c_driver。

2025-09-19 10:59:45 690

RulerControlForWPF-master.zip

实现类似word文档的标尺功能,标尺可以缩放,有cm(厘米)或者inch(英寸)两种模式

2019-10-11

HalconShowTest (1) (1).zip

c#,c++,halcon联合,界面使用wpf,底层c++,halcon的库,实现一张图片的显示。未来可以继续扩展,调用halcon的函数,这是一个基本的demo

2020-06-09

WindowsFormsApp1.zip

GDI+显示图片,使用winform,实现使用鼠标拖拽,画矩形框

2019-10-30

空空如也

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

TA关注的人

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