自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(56)
  • 资源 (1)
  • 收藏
  • 关注

原创 在C&C++指针的惯用方法

本文系统对比了C和C++中指针的惯用方法。C语言主要依赖裸指针实现动态内存、数组遍历和函数回调,强调效率和底层控制。现代C++则通过引用、智能指针(unique_ptr/shared_ptr)和RAII等机制减少裸指针使用,提升安全性,典型用法包括流式接口、Pimpl模式等。核心差异在于:C指针更贴近硬件,C++通过封装降低风险,同时保留指针的观察功能。两种语言各有所长,开发者应根据场景选择合适方案。

2025-12-20 18:30:00 243

原创 在C&C++中结构体的惯用方法

C和C++中结构体的惯用法差异主要体现在设计理念和使用方式上。C语言中结构体主要用于数据聚合,通过typedef简化声明、不透明指针实现封装、柔性数组处理变长数据、函数指针模拟多态等功能。而C++的结构体与类相似,默认public访问权限,常用于POD类型、值语义对象、STL容器配合及模板元编程。C++支持聚合初始化、默认成员初始化等现代特性。在混合开发时,需确保C++结构体保持POD特性以便与C交互。总体而言,C的结构体更侧重数据组织,C++的结构体则具备更丰富的面向对象特性。

2025-12-19 22:00:00 912

原创 C语言高级特性

本文系统解析了C语言的核心高级特性:指针(原理、用法及安全注意事项)、结构体(内存对齐机制)、函数指针(回调机制实现)以及内存管理(用户空间malloc/free与内核空间kmalloc/kfree的关键差异)。重点阐述了指针算术、多级指针应用、结构体优化存储、函数指针实现策略模式等技术要点,并对比分析了用户态和内核态内存分配器的不同特性(如GFP标志位、连续内存要求等)。最后提供了Valgrind、ASan等调试工具的使用建议,帮助开发者规避常见内存问题。这些特性是构建高性能系统软件的基础。

2025-12-18 22:00:00 913

原创 内存管理【3】

本文阐述了现代操作系统中内存管理单元(MMU)的工作原理及其在虚拟内存管理中的核心作用。MMU通过页表实现虚拟地址(VA)到物理地址(PA)的转换,以4KB为单位进行内存映射,并通过TLB缓存加速访问。重点分析了ARMv8架构下的内存权限控制机制:页表项(PTE)中的AP字段决定访问权限(用户/内核态,读/写/执行),配合CPU异常级别(EL0-EL3)实现严格的内存保护。文中详细说明了系统调用时的权限切换流程,以及Linux内核如何通过配置页表项权限来隔离用户空间与内核空间,最后通过实例演示了用户程序访问

2025-12-04 22:00:00 618

原创 linux字符设备驱动框架

linux字符设备驱动框架 实例 以及底层是实现

2025-08-16 09:15:36 784

原创 inpute输入子系统

inpute输入子系统

2025-08-12 16:48:46 932

原创 linux总线-设备-驱动

linux 总线 设备 驱动 模型

2025-08-12 16:29:36 520

原创 虚拟机下ubuntu分区挂载实验

本文介绍了在虚拟机中添加新硬盘并进行分区管理的完整流程。首先详细说明了如何创建SCSI类型的虚拟硬盘并生成VMDK文件,以及移除硬盘的注意事项。接着讲解了使用lsblk命令查看磁盘分区信息的方法。重点阐述了使用fdisk工具进行分区的操作步骤,包括创建主分区、扩展分区和逻辑分区,并演示了格式化分区为ext4文件系统的两种方式。最后提供了临时挂载、永久挂载(通过修改/etc/fstab文件)以及取消挂载分区的具体操作方法。整个过程涵盖了从硬盘创建到分区管理的完整技术要点。

2025-05-23 21:53:45 800

原创 Linux虚拟文件系统(2)

目录项(dentry)是Linux内核中用于记录文件名、索引节点指针及与其他目录项关联关系的内存数据结构,旨在提高文件查找和比较的效率。目录项并非实际存在于磁盘上,而是由内核在内存中创建和维护,通常被称为目录项缓存。通过索引节点可以定位文件,但由于索引节点属性复杂,直接使用效率不高,因此引入目录项。目录项通过LRU表和散列表进行管理,LRU表用于回收最近最少使用的目录项,散列表用于快速查找目录项。文件对象(file结构体)表示进程已打开的文件实例,包含文件路径、索引节点、操作函数等信息。尽管一个文件可能被多

2025-05-21 23:36:37 880

原创 Linux虚拟文件系统(1)

虚拟文件系统(VFS)是Linux内核的一个子系统,它为应用程序提供了一个统一的文件系统接口,使得不同的文件系统可以在同一操作系统中共存,并且应用程序无需了解底层文件系统的具体实现细节。VFS的核心特点包括作为抽象层、提供通用接口以及支持多种文件系统类型。VFS通过四个主要对象实现其功能:超级块(super_block)、索引节点(inode)、目录项(dentry)和文件对象(file)。超级块包含文件系统的元数据信息,索引节点则代表文件系统中的文件或目录,包含操作文件所需的全部信息。VFS通过这些对象和

2025-05-18 22:54:25 1026

原创 Linux内存管理架构(2)

在 Linux 内核中,mm_users 和 mm_count 是与进程的内存描述符 (mm_struct) 相关的两个重要引用计数字段。它们的作用是跟踪和管理 mm_struct 的生命周期,以确保内存资源的正确分配和释放。这些线程由一个主线程创建,并且它们共享同一个 mm_struct。各种处理器自定义的函数 :void arch_pick_mmap_layout(struct mm_struct *mm)负责选择内存区域布局。假设有一个内核线程 K,它临时借用了一个用户进程的 mm_struct。

2025-04-13 23:13:43 1471

原创 Linux内存管理架构(1)

glibc 使用了一种高效的用户态内存管理机制,称为 ptmalloc(Pthreads malloc)。ptmalloc 是基于早期的 dlmalloc(Doug Lea's malloc)改进而来,主要目标是支持多线程环境下的高效内存分配。(1) 主要特点多线程支持: ptmalloc 为每个线程维护独立的堆(arena),减少多线程间的锁争用。内存池化: 小块内存会被分配到内存池中,避免频繁调用系统调用。内存复用: 释放的内存不会立即归还给操作系统,而是保留在内存池中供后续重用。

2025-04-13 20:10:10 968

原创 Linux 内核知识体系

Linux内核主要使用C语言编写,因此需要对C语言有深入的理解,特别是指针、数据结构、动态内存分配等高级特性。内核编译与调试:学习如何下载、配置、编译Linux内核。虚拟化技术:KVM/QEMU、Xen等虚拟化解决方案的基础知识及其在内核中的实现。了解操作系统的概念和基本原理,包括进程管理、内存管理、文件系统、输入输出等。理解CPU架构(如x86, ARM)、汇编语言、中断处理、缓存机制等。并发控制:深入理解锁机制、信号量、读写锁、RCU等同步原语的应用场景。了解分页机制、交换空间、虚拟内存的概念。

2025-04-12 09:49:06 442

原创 任务空间管理 - 内核态结构

物理内存中ZONE_DMA的范围是0-16MB,该区域的物理页面专门供IO设备的DMA使用,之所以要单独管理DMA的物理页面,是因为DMA使用物理地址访问内存不经过MMU,并且需要连续的缓冲区。在系统启动的时候,物理内存的前 1M 已经被占用了,从 1M 开始加载内核代码段,然后就是内核的全局变量、BSS 等,也是 ELF 里面涵盖的。其存在的意义是以32位系统有限的内核空间去访问无限的物理内存空间:借用这段逻辑地址空间,建立映射到想访问的那段物理内存(即填充内核页表),临时用一会,用完后归还。

2025-04-11 23:46:42 950

原创 任务空间管理-用户态内存结构

层次关系:一个进程有一个 mm_struct,它描述了整个进程的虚拟地址空间。mm_struct 中包含多个 vm_area_struct,每个 vm_area_struct 表示地址空间中的一段连续区域。组织方式:mm_struct 使用链表和红黑树来管理所有的 vm_area_struct。这种设计使得内核可以高效地查找、插入和删除 VMA。

2025-04-10 14:52:01 811

原创 驱动开发-入门【1】

在开发板上通过“insmod hello.ko”或modprobe hello.ko(更智能,将驱动依赖的驱动也进行加载)命令可以加载驱动,在加载驱动模块的时候会执行驱动入口的函数,也就是hello程序中的hello_init函数,可通过lsmod查看加载的驱动模块。卸载hello内核模块,可以通过“rmmod hello”命令来卸载驱动模块,同理在卸载驱动模块的时候会执行驱动出口的函数,所以可以看到驱动出口函数打印出来的字符串信息“hello_exit”,可以在该网站下载最新的Linux内核源码。

2024-12-14 21:33:21 654

原创 libevent-Reactor设计模式【1】

一、Libevent概述1、简介Libevent 是一个用C语言编写的、轻量级的开源高性能事件通知库,主要有以下几个亮点:事件驱动( event-driven),高性能;轻量级,专注于网络,不如 ACE 那么臃肿庞大;源代码相当精炼、易读;跨平台,支持 Windows、 Linux、 *BSD 和 Mac Os;支持多种 I/O 多路复用技术, epoll、 poll、 dev/poll、 select 和 kqueue 等;支持 I/O,定时器和信号等事件;注册事件优先级。

2024-12-13 21:34:31 1014 1

原创 QT代码白盒测试-QTestlib(2)

在单元测试工程MyProjectTest的pro文件中添加项目工程中的myclass.h和myclass.cpp文件,并在test_myclasstest.cpp中包含头文件myclass.h,然后开始完成测试用例的编写。3. 在单元测试工程中添加项目工程的源代码和头文件,以便能够访问需要测试的类和函数。1. 在单元测试工程中创建一个测试类,继承自QObject和QTest类。1. 创建一个项目工程,并添加一个类,实现一个getMax函数。3. 在测试函数中创建需要测试的类的对象,并调用需要测试的函数。

2024-12-13 21:20:40 415

原创 QT代码白盒测试-QTestlib(1)

提供了单元测试框架的基本功能,并提供了针对测试的扩展功能。

2024-12-13 21:08:42 961

原创 享元模式【结构型模式C++】

享元模式是一种结构型设计模式,它的主要目的是通过共享对象来减少系统中对象的数量,其本质就是缓存共享对象,降低内存消耗。内部状态和外部状态。内部状态是不会变化的,可以被多个对象共享,而外部状态会随着对象的使用而改变。比如,连接池中的连接对象,保存在连接对象中的用户名、密码、连接URL等信息,在创建对象的时候就设置好了,不会随环境的改变而改变,这些为内部状态。而当每个连接要被回收利用时,我们需要将它标记为可用状态,这些为外部状态。

2024-05-13 19:57:08 1104

原创 数据库设计规范

比如图书和读者,是一个典型的多对多的关系。我们就可以设计一个借书表,包含图书表的主键,以及读者的主键,以及借还标记等字段。学生表是多(N)的一方,会有个字段保存班级表的主键。,因为总金额可以由单价*数量得到,说明总金额是冗余字段,但是,增加总金额这个冗余字段,可以提高查询统计速度,这就是。我们设计表及其字段之间的关系,应尽量满足第三范式,但是有时候,可以适当冗余,来提高效率,比如如下张表。如果此字段关联另外的字段,那么加下划线_连接关联表字段的字段名。,以字段作为外键指向主表(1的这一方)的主键。

2024-05-07 22:30:00 2428

翻译 C++编码规范【参考】

在声明和定义函数的时候,函数的返回值类型应该和函数名在同一行;如果行宽度允许,函数参数也应该放在一行;否则,函数参数应该换行,并进行合理对齐。参数列表的左圆括号总是和函数名在同一行,不要单独一行;右圆括号总是跟随最后一个参数。ReturnType FunctionName(ArgType paramName1, ArgType paramName2) // Good:全在同一行...

2024-05-04 19:45:00 639

原创 外观模式【结构型模式C++】

外观模式是一种结构型设计模式, 能为程序库、 框架或其他复杂类提供一个简单的接口。

2024-04-26 23:42:08 907

原创 装饰器模式【结构型模式C++】

装饰模式是一种结构型设计模式, 允许你通过将对象放入包含行为的特殊封装对象中来为原对象绑定新的行为。2.结构抽象构件(Component)角色:定义一个抽象接口以规范准备接收附加责任的对象。具体构件(Concrete Component)角色:实现抽象构件,通过装饰角色为其添加一些职责。抽象装饰(Base Decorator)角色:继承抽象构件,并包含具体构件的实例,可以通过其子类扩展具体构件的功能。具体装饰。

2024-04-24 23:27:30 671

原创 组合模式【结构型模式C++】

组合模式又叫部分整体模式属于结构型模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。

2024-04-22 22:34:45 532

原创 桥接模式【结构型模式C++】

桥接模式是一种结构型设计模式,是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。这种模式涉及到一个作为桥接的接口,使得实体类的功能独立于接口实现类,这两种类型的类可被结构化改变而互不影响。

2024-04-19 22:56:54 1600

原创 适配器模式【结构型模式C++】

适配器模式是一种结构型设计模式, 又称为变压器模式、包装模式(Wrapper) 将一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。

2024-04-17 23:25:35 609

原创 状态模式【行为模式C++】

状态模式是一种行为设计模式, 让你能在一个对象的内部状态变化时改变其行为, 使其看上去就像改变了自身所属的类一样。

2024-04-15 22:45:52 1038

原创 访问者模式【行为模式C++】

访问者模式是一种行为设计模式, 它能将算法与其所作用的对象隔离开来。访问者模式主要解决的是数据与算法的耦合问题,尤其是在数据结构比较稳定,而算法多变的情况下。为了不污染数据本身,访问者会将多种算法独立归档,并在访问数据时根据数据类型自动切换到对应的算法,实现数据的自动响应机制,并确保算法的自由扩展。访问者模式在实际开发中使用的非常少,因为它比较难以实现并且应用该模式肯能会导致代码的可读性变差,可维护性变差,在没有特别必要的情况下,不建议使用访问者模式。

2024-04-13 09:00:25 2012

翻译 第四章 文件管理 [黑马课程]

因此可考虑让目录表简化,当文件找到对应的目录项时才需要将索引结点调入内存,存放在外存中的索引结点称为磁盘索引结点,当索引结点放入内存后称为内存索引结点(相比磁盘结点需要增加一些信息)。顺序文件:文件中的记录一个个顺序排列(逻辑上),记录可以是定长的or可变长的。索引结点是对文件控制块的优化,在查找各级目录的过程中只需用到文件名这个信息,只有文件名匹配时才需要读出文件的其他信息,索引分配允许文件离散的分布在各个磁盘中,系统会为每个文件建立一张索引表,索引表中记录了文件的各个逻辑块对应的物理块。

2024-04-12 08:45:14 288

原创 策略模式【行为模式C++】

策略模式是一种行为设计模式, 它能让你定义一系列算法, 并将每种算法分别放入独立的类中, 以使算法的对象能够相互替换。策略模式通常应用于需要多种算法进行操作的场景,如排序、搜索、数据压缩等。在这些情况下,不同的算法有不同的优缺点和适用性,因此需要进行选择。通过使用策略模式,我们可以轻松地切换算法,而无需修改客户端代码。这使得代码更加灵活、可扩展、易于维护,减少了重复的代码,并提高了代码的可读性。

2024-04-11 17:39:56 1082

翻译 第五章:IO管理 [黑马课程]

IO设备就是可以将数据输入到计算机,或者可以接收计算机输出数据的外部设备,属于计算机中的硬件部件。按特性分类特点人机交互类外部设备数据传输速度较慢,如鼠标、键盘、打印机等数据存储设备数据传输速度较快,如移动硬盘、光盘等网络通信设备数据传输速度一般,如调制解调器等网络通信按信息交换单位分类特点块设备传输速率较高、可寻址(随机读写某个块),如磁盘等数据传输基本单位为块字符设备传输速率较慢、不可寻址(在IO时常采用中断驱动的方式),如鼠标、键盘等数据传输基本单位为字符。

2024-04-10 13:36:49 271

原创 模板方法模式【行为模式C++】

模板方法模式是一种行为设计模式, 它定义了一个算法的框架,并将具体步骤延迟到子类中实现。在该模式中,父类中定义一个模板方法来描述算法的基本流程,在这个过程中,某些步骤可以通过抽象方法或空置来延迟到子类中实现。通常情况下,当我们处理一些相似的任务时,会发现这些任务之间有很多共性,只是其中一些步骤不同而已。如果每次都重复编写代码,既费时又容易出错。因此,为了解决这个问题,就产生了模板方法模式,它把这些共性代码抽象到父类中,子类只需要覆盖特定的步骤即可。

2024-04-10 13:14:03 2056

原创 备忘录模式【行为模式C++】

备忘录模式是一种行为设计模式, 允许在不暴露对象实现细节的情况下保存和恢复对象之前的状态。备忘录模式将创建状态快照 (Snapshot) 的工作委派给实际状态的拥有者原发器对象。这样其他对象就不再需要从 “外部” 复制编辑器状态了, 编辑器类拥有其状态的完全访问权, 因此可以自行生成快照。模式建议将对象状态的副本存储在一个名为备忘录(Memento)的特殊对象中。除了创建备忘录的对象外, 任何对象都不能访问备忘录的内容。

2024-04-07 22:09:29 550

原创 中介者模式【行为模式C++】

中介者模式是一种行为设计模式, 能让你减少对象之间混乱无序的依赖关系。该模式会限制对象之间的直接交互, 迫使它们通过一个中介者对象进行合作。亦称: 调解人、控制器、Intermediary、Controller、Mediator。

2024-04-06 15:06:03 821

原创 命令模式【行为模式C++】

命令模式是一种行为设计模式, 它可将请求转换为一个包含与请求相关的所有信息的独立对象。该转换让你能根据不同的请求将方法参数化、 延迟请求执行或将其放入队列中, 且能实现可撤销操作。

2024-04-06 11:06:51 1007

原创 迭代器模式【行为模式C++】

迭代器模式是一种行为设计模式, 让你能在不暴露集合(聚合对象)底层表现形式 (列表、 栈和树等) 的情况下遍历集合(聚合对象)中所有的元素。迭代器的意义就是将这个行为抽离封装起来,这样客户端只需要调用合适的迭代器,来进行对应的遍历,而不用自己去实现这一行为。2、结构定义访问和遍历聚合对象中元素的接口,包括获取下一个元素、判断是否还有下一个元素等方法。实现迭代器接口,存储聚合对象的当前状态,负责遍历聚合对象中的元素。定义创建相应迭代器对象的接口,一般是一个集合类,如列表、数组等。

2024-04-06 09:10:02 891

原创 6.C++ 静态成员

在静态成员变量的定义中,不需要加上static关键字。与普通变量不同的是,静态成员变量虽然在类中声明,但需要在类外定义,而非构造函数中定义,定义时注意不加static关键字。

2024-04-04 22:59:12 820

原创 7.C++ 模板(进阶)

1. 当子类继承的父类是一个类模板时,子类在声明的时候,要指定出父类中T的类型。(2)全局函数类外实现:需要提前让编译器知道全局函数的存在。3. 如果想灵活指定出父类中T的类型,子类也需变为类模板。(1)全局函数类内实现:直接在类内声明友元即可。2. 如果不指定,编译器无法给子类分配内存。将对象中的参数变为模板进行传递。将这个对象类型模板化进行传递。直接显示对象的数据类型。

2024-04-03 22:17:13 266

原创 7.C++ 模板(基础)

C++ 早期对模板的支持并不严谨,没有引入新的关键字,而是用 class 来指明类型参数,但是 class 关键字本来已经用在类的定义中了,这样做显得不太友好,所以后来 C++ 又引入了一个新的关键字 typename,专门用来定义类型参数。所谓函数模板,实际上是建立一个通用函数,它所用到的数据的类型(包括返回值类型、形参类型、局部变量类型)可以不具体指定,而是用一个虚拟的类型来代替(这就是类型的参数化。在函数模板中,数据的值和类型都被参数化了,发生函数调用时编译器会根据传入的实参来推演形参的值和类型。

2024-04-03 21:39:08 882

软件开发基于Git Flow的代git码管理规范:Qt项目多分支协作与Conventional Commits提交策略实施

代码管理

2025-12-05

.gitignore语法规范

.gitignore语法规范

2025-12-05

pinctrl与gpio子系统

pinctrl与gpio子系统

2025-08-05

linux驱动设备树动态加载

linux驱动设备树动态加载

2025-08-05

linux驱动设备树内容

linux驱动设备树

2025-08-05

linux驱动学习字符设备

linux驱动学习字符设备

2025-08-05

TCNOpen开源源码实现TRDP通信,包括源码下载,开发环境搭建,编译运行,测试

TCNOPEN的总体目标是提供一个合适的环境,开放的兴趣团体。其中合作伙伴公司可以合作开发符合TCN标准的新组件。 对于每个需求,将启动一个特定的开源项目,该项目将贯穿所有需要的阶段:规范、开发、测试、支持。 第一个项目目前正在进行中,与开发的TRDP模块有关。 TRDP(列车实时数据协议)是TCP或UDP协议与使用网络的应用之间的中间模块。 它地包括一个可选附加的安全层(SDT)。SDT是在不可信通信信道上的端到端协议。 SDT实现IEC62280(En50159),并支持安全数据源与一个或多个安全数据接收器之间的安全相关数据的传输。 TRDP体系结构 TRDP组件包括PDCom, MDCom, TRDP Light, VOS(虚拟操作系统)和Utilities。 PDCom处理过程数据,而MDCom处理TCN上的消息数据通信。 TRDP与网络的其他用户共存,例如流通信(如TCP/IP)和基于尽力而为的通信(如UDP/IP)。 TRDP由两个级别组成:轻量TRDP和全功能TRDP。 两个级别都由不同的可选实用程序支持,例如编组/解包、读取TRDP XML配置或转换IP/URI地址。

2024-04-13

wireshark TRDP插件,支持32位与64位操作系统

wireshark TRDP插件,支持32位与64位操作系统

2022-05-18

空空如也

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

TA关注的人

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