自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 高速缓存的原理

对于系统级别的缓存一致性,需要实现一种缓存一致性总线协议。在现代处理器中,处理器的访问速度已经远远超过了主存储器的访问速度,比如一条加载指令需要上百个时钟周期才能从主存储器读取数据到处理器内部的寄存器中,这会导致使用该数据的指令需要等待加载指令完成才能继续执行, 处理器处于停滞状态, 严重影响程序的运行速度。高速缓存一般是集成在CPU处理器内部的 SRAM(Static Random Access Memory), 相比外部的内存条,它造价昂贵,因此,高速缓存的容量一般比较小,成本高,但是访问速度快。

2025-03-16 10:53:27 450

原创 汇编的伪指令

伪指令是用于对汇编过程进行控制的指令,该类指令并不是可执行指令,没有对应机器码,只用于汇编过程中为汇编程序提供汇编信息,帮助编译器编译。当汇编结束时,伪指令的使命也就结束了。符号定义;数据定义和对齐;汇编控制;汇编宏;段描述;

2025-03-09 17:00:22 480

原创 内存管理——页表、页表项、页目录、多级页表

我们想申请8M内存,我们就创建2个4K的二级页表。在虚拟地址空间里可按照固定大小来分页,典型的页面粒度为 4 KB,8KB或16KB等,而在物理内存中, 空间也分成和虚拟地址空间大小相同的块, 称为页帧(page frame)。因为页表一定要覆盖全部虚拟地址空间,所以在 32 位的环境下,虚拟地址空间共有 4GB,假设一个页的大小是 4KB(2^12),那么就需要大约 100 万 (2^20) 个页,每个「页表项」需要 4 个字节大小来存储,那么整个 4GB 空间的映射就需要有 4MB 的内存来存储页表。

2025-03-09 16:49:28 755

原创 ARMV8的64位指令

ARMv8 体系结构最大的改变是增加了一个新的 64 位的指令集,这是早前 ARM 指令集的有益补充和增强。它可以处理 64 位宽的寄存器和数据并且使用 64 位的指针来访问内存。这个新的指令集称为 A64 指令集,运行在 AArch64 状态。ARMv8 兼容旧的 32 位指令集——A32指令集,它运行在 AArch32 状态。注意:A64 指令集的指令宽度是 32 位,而不是 64 位。

2025-03-08 21:52:46 1017

原创 ARMv8寄存器的介绍

ARMv8中有34个寄存器,包括31个64 位通用寄存器、1个64 位的程序计数(Program Counter, PC)指针寄存器、栈指针(StackPointer, SP)寄存器以及异常链接寄存器(Exception Link Register, ELR)。一个处理器状态寄存器PSTATE来表示当前的处理器状态(processor state),1、通用寄存器AArch64执行状态支持31个64位的通用寄存器,分别是X0-X30寄存器,而AArch32状态支持16个32位的通用寄存器。

2025-03-08 20:48:53 1005

原创 I/O函数

但是有一个例外,如果以O_APPEND方式打开,每次写操作都会在文件末尾追加数据,然后将读写位置移到新的文件末尾。O_NONBLOCK 对于设备文件,以O_NONBLOCK方式打开可以做非阻塞I/O(Nonblock I/O) ,非阻塞I/O在下一节详细讲解。是I/O操作的主体,而ioctl命令传送的是控制信息,其中的数据是辅助的数据。每个打开的文件都记录着当前读写位置,打开文件时读写位置是0,表示文件开头,通常读写多少。的,而使用C标准I/O库时的读写位置是用户空间I/O缓冲区中的位置。

2025-03-02 20:10:00 926

原创 文件描述符(File Descriptor)

内核(kernel)利用文件描述符(file descriptor)来访问文件。文件描述符是非负整数。打开现存文件或新建文件时,内核会返回一个文件描述符。读写文件也需要使用文件描述符来指定待读写的文件。文件描述符是 Linux 中管理文件和 I/O 操作的核心概念。通过文件描述符,程序可以访问文件、管道、套接字等资源。理解文件描述符的工作原理对于编写高效的 Linux 程序至关重要。文件描述符(File Descriptor)简介-优快云博客。

2025-03-02 19:54:35 918

原创 Linux的缓存I/O和无缓存IO

现在我们在用户层建立另一个缓存区(用户层缓存区或者叫流缓存),假设流缓存的长度是50字节,我们用标准C库函数的fwrite()将数据写入到这个流缓存区里面,流缓存区满50字节后在进入内核缓存区,此时再调用系统函数write()将数据写入到文件(实质是磁盘)上标准IO操作fwrite()最后还是要掉用无缓存IO操作write,这里进行了两次调用fwrite()写100字节也就是进行两次系统调用write()函数。linux对IO文件的操作分为不带缓存的IO操作和带缓存的IO操作(标准IO操作)。

2025-03-02 18:14:43 983

原创 MMU原理

现代操作系统普遍采用虚拟内存管理(Virtual Memory Management) 机制,这需要处理器中的MMU(Memory Management Unit,内存管理单元) 提供支持。它是一种负责处理CPU的内存访问请求的计算机硬件。它的功能包括虚拟地址到物理地址的转换、内存保护、中央处理器高速缓存的控制,

2025-03-01 16:55:56 912

原创 CPU的原理

有些寄存器只能用于某种特定的用途,比如eip用作程序计数器,这称为特殊寄存器(Special-purpose Register) ,而另外一些寄存器可以用在各种运算和读写内存的指令中,比如eax寄存器,这称为通用寄存器(General-purpose Register)。中央处理器(Central Processing Unit,简称CPU)总是周而复始地做同一件事:从内存取指令,然后解释执行它,然后再取下一条指令,再解释执行。如x86就是这样的体系结构,目前主流的处理器是32位或64位的。

2025-02-16 22:25:37 938

原创 GPMC介绍

ory Controller)是TI处理器特有的通用存储器控制器接口,是AM335x、AM437x、AM5708、AM5728等处理器专用于与外部存储器设备的接口,如:● 异步SRAM内存和专用集成电路ASIC)设备。● 异步,同步,和页面模式(仅适用于非复用模式)突发NOR闪存设备。● NAND闪存。●ADC器件。

2025-01-25 11:30:20 731

原创 Linux内核编译出来的Image文件解析

一、介绍Linux内核提供了一个用户界面,使我们能够与操作系统进行交互,处理进程管理、内存管理、设备驱动程序和系统安全等任务。在某些情况下,我们需要生成和构造自定义内核镜像,当我们编译自定义内核时,可以将其生成为以下内核镜像之一:vmlinux,.bin,和。内核镜像是包含内核代码和其他组件的二进制表示形式的文件。内核镜像格式因压缩、体系结构和特定用例而异。二、创建image镜像文件在Linux中,通常使用工具如dd或cpio来创建镜像文件。

2025-01-19 21:59:00 977

原创 加载地址、运行地址以及链接地址

加载地址:存储代码的物理地址,在GNU链接脚本里称为LMA。例如,ARM64处理器上电复位后是从异常向量表开始取第一条指令的,所以通常这个地方存放代码最开始的部分,如异常向量表的处理代码。运行地址:程序运行时的地址,在GNU链接脚本里称为VMA。链接地址:在编译、链接时指定的地址,编程人员设想将来程序要运行的地址。程序中所有标号的地址在链接后便确定了,不管程序在哪里运行都不会改变。当。

2025-01-19 18:27:00 972

原创 SD/MMC驱动开发

MMC的全称是”MultiMediaCard”――所以也通常被叫做”多媒体卡”,是一种小巧大容量的快闪存储卡,特别应用于移动电话和数字影像及其他移动终端中。MMC存贮卡只有7pin,可以支持MMC和SPI两种工作模式。SD卡,数字安全记忆卡(SecureDigitalMemoryCard),是用于移动设备的标准记忆卡。SD卡数据传送和物理规范由MMC发展而来,增加了两个主要特色:SD卡强调数据的安全安全,可以设定所储存的使用权限,防止数据被他人复制。另外一个特色就是传输速度比2.11版的MMC卡快。

2025-01-19 17:50:49 569

原创 flash驱动

NANDFlash是一种非易失存储介质(掉电后数据不会丢失),常见的U盘、TF卡/SD卡,以及大部分SSD(固态硬盘)都是由它组成的。

2025-01-19 17:09:48 909

原创 Linux内核的启动

处理器首先执行ROMCode的代码,处理器中还有一部分存储空间即内部SRAM可以执行代码,但是SRAM通常都比较小,不能放下Linux内核的压缩image,这样就需要有个中间过渡的模块,该模块的主要功能是进行系统加载,叫做bootloader.。内核相关的初始化既要有体系结构相关的部分,又要有板级相关的部分。另外现在的处理器从内存解压比从外部存储读取速度快得多,所以通常在内存中解压启动也会快,这就需要Linux内核初始化的时候,能够将压缩的image进行解压,当然解压功能应该由Linux内核提供。

2025-01-15 21:44:23 738

原创 从硬件设备看Linux

DM3730通过各种连接方式连接了各种设备,输入输出设备根据不同的类型大体可以分为电源管理、用户输人、显示输出、图像采集、存储以及无线设备等。我们可以将DM3730与这些设备的数据接口分为总线和单一的数据接口总线。总线的显著特点是单个总线上可以连接多个设备;单一的数据接口只连接单一类型的设备,用户显示LCD输出的DSI接口)。各种不同类型的数据连接接口其设计思想以及功能是不同的,例如IIC通常用于设备的控制,McBSP用于音频数据的传输等。

2025-01-13 19:05:57 550

原创 中断系统的原理

中断是为使单片机具有对外部或内部随机发生的事件实时处理而设置的。中断是指‌CPU在正常运行程序时,由于内部或外部事件的发生,导致CPU中断当前运行的程序,转而去执行其他程序的过程。‌ 中断可以是硬件产生的,也可以是软件产生的。硬件中断通常由外围设备触发,而软件中断则是通过CPU指令集中的一个指令来实现。

2024-10-06 22:06:49 1484 1

原创 PWM 模式

PWM(脉宽调制,Pulse-width modulation)是一种通过调节脉冲信号的宽度来控制电能输出的方法。PWM是一种方波信号,通常在电子和电气工程中用于调节功率输送,控制电机速度,调节LED亮度,以及生成模拟信号等。PWM信号是通过不断地将一个信号在高电平和低电平之间切换而生成的。PWM的核心参数有两个:频率和占空比。频率:PWM信号的开关速度,表示每秒完成的周期次数。频率越高,PWM信号周期越短。占空比:在一个周期内,高电平所占的时间比例。

2024-10-01 16:19:53 1507

原创 TIM(Timer)定时器的原理

硬件定时器的工作原理基于时钟信号源提供稳定的时钟信号作为计时器的基准。计数器从预设值开始计数,每当时钟信号到达时计数器递增。当计数器达到预设值时,定时器会触发一个中断信号通知中断控制器处理相应的中断服务程序。在中断服务程序中,可以执行一些预定的操作。硬件定时器通常由晶体振荡器、计数器、预设值寄存器和中断控制器等关键组成部分构成,晶体振荡器提供稳定的时钟信号源,计数器使用时钟信号进行计数,预设值寄存器用于设置定时器的初始值,中断控制器处理定时器产生的中断信号。

2024-10-01 11:50:12 2072

原创 ADC的原理

模数转换,即Analog-to-Digital Converter,常称ADC,是指将连续变量的模拟信号转换为离散的数字信号的器件,比如将模温度感器产生的电信号转为控制芯片能处理的数字信号0101,这样ADC就建立了模拟世界的传感器和数字世界的信号处理与数据转换的联系。当然,数字信号通过处理器处理后,也可以通过DAC还原回去,但是还原也不可能是百分百的,必然是有损的。

2024-09-29 21:59:23 935

原创 DMA的原理

DMA(Direct Memory Access)是一种允许设备直接与内存进行数据交换的技术,无需‌CPU干预。DMA的主要功能是提供在‌外设和存储器之间或者存储器和存储器之间的高速数据传输。比如使用ADC进行数据采集,可以直接将数据存入存储器中,而无须CPU干预,节省了CPU的资源。DMA传输方式虽然高效,但是,只是减轻了CPU的工作负担;系统总线仍然被占用。特别是在传输大容量文件时,CPU的占用率可能不到10%,但是用户会觉得运行部分程序时系统变得相当的缓慢。

2024-09-28 22:25:16 1585

原创 生成对抗网络(GAN)

生成对抗网络(Generative Adversarial Network,GAN)是一种机器学习模型,由生成器和判别器两部分组成,用于生成逼真的图像、文本或音频等内容。GAN的作用主要包括以下几个方面:图像生成:GAN可以生成高质量的逼真图像,可以应用在图像合成、风格转换、视频生成等领域。数据增强:通过生成对抗网络,可以合成更多的数据样本来增加原始数据集的多样性,提高机器学习模型的泛化能力。

2024-04-24 21:15:58 1948

原创 卷积神经网络(CNN)

卷积神经网络的基本结构由以下几个部分组成:输入层(input layer),卷积层(convolution layer),池化层(pooling layer),激活函数层和全连接层(full-connection layer)。下面以图像分类任务简单介绍一下卷积神经网络结构,具体结构如下图所示。输入层在处理图像的CNN中,输入层一般代表了一张图片的像素矩阵。可以用三维矩阵代表一张图片。三维矩阵的长和宽代表了图像的大小,而三维矩阵的深度代表了图像的色彩通道。

2024-04-17 21:03:12 1064

原创 图像检索与识别——词袋模型(Bag-of-features models)

计算机视觉单词袋是一种描述计算图像之间相似度的技术,常用于用于图像分类当中。该方法起源于文本检索(信息检索),是对NLP“单词袋”算法的扩展。在“单词袋”中,我们扫描整个文档,并保留文档中出现的每个单词的计数。然后,我们创建单词频率的直方图,并使用此直方图来描述文本文档。在“视觉单词袋”中,我们的输入是图像而不是文本文档,并且我们使用视觉单词来描述图像。

2024-03-06 20:43:06 1315

原创 机器学习之特征工程

特征工程(Feature Engineering)特征工程是将原始数据转化成更好的表达问题本质的特征的过程,使得将这些特征运用到预测模型中能提高对不可见数据的模型预测精度。特征工程简单讲就是发现对因变量y有明显影响作用的特征,通常称自变量x为特征,特征工程的目的是发现重要特征。如何能够分解和聚合原始数据,以更好的表达问题的本质?这是做特征工程的目的。特征工程做的好,后期的模型调参更容易甚至不用调参,模型的稳定性,可解释性也要更好。

2024-01-11 20:58:51 1192 2

原创 机器学习之独热编码(One-Hot)

独热编码是指将离散型的特征数据映射到一个高维空间中,每个可能的取值都对应于高维空间的一个点,在这些点上取值为1,其余均为0,因此独热编码也被称为“一位有效编码”或“One-of-K encoding”。回到一开始的例子,性别特征:["男","女"],按照N位状态寄存器来对N个状态进行编码的原理:性别特征:["男","女"](这里N=2 二维数据)男 => 10女 => 01地区特征:["北京","上海,"深圳"](这里N=3,三维数据):北京 => 100上海 => 010。

2024-01-11 20:19:39 1404 1

原创 软件架构之事件驱动架构

事件驱动的架构是围绕事件的发布、捕获、处理和存储(或持久化)而构建的集成模型。某个应用或服务执行一项操作或经历另一个应用或服务可能想知道的更改时,就会发布一个事件(也就是对该操作或更改的记录),另一个应用或服务便可以获取和处理该事件,继而执行更多操作。

2024-01-10 20:31:58 1125 1

原创 python的切片(slice)

在Python中,切片(slice)是对序列型对象(如list, string, tuple)的一种高级索引方法。普通索引只取出序列中 一个下标 对应的元素,而切片取出序列中一个范围对应的元素。通俗一点就是在一定范围里面,用刀切出一部分,达到自己需要的一部分。

2023-12-23 17:21:27 1132

原创 软件设计方法——领域驱动设计(DDD)

要做到这一点,离不开团队各个角色的沟通与协作。(2)值对象(Value Object):一个没有概念上标识符描述一个领域方面的对象,这些对象是用来表示临时的事物,或者可以认为值对象是实体的属性,这些属性没有特性标识但同时表达了领域中某类含义的概念。(6)仓储(Repository):是用来管理实体的集合,仓储里面存放的对象一定是聚合,原因是domain是以聚合的概念来划分边界的;(2)核心子域(Core Domain):子领域中最核心的叫核心子域,团队的核心资源应该用在核心子域上,因为它是产品成败的关键。

2023-12-03 21:15:47 2646 1

原创 软件理论——演进式架构设计

与传统的瀑布式设计方法相比,演进式设计更加灵活和可适应。在瀑布式设计中,设计通常是在项目的早期阶段完成的,并且需要经过大量的计划和准备。但是,在演进式设计中,设计和开发是相互交织的,随着需求的变化,设计也随之变化。通过演进式设计,开发人员可以更快地响应变化的需求,同时也可以更好地控制开发成本。1. 恰到好处的设计:根据当前需求进行必要的设计,但不必过度设计。3. 识别和重构疏漏:在迭代过程中识别和重构设计中的疏漏或错误。2. 逐渐迭代:在项目的不同阶段,逐步改进设计。

2023-12-03 20:54:50 841

原创 软件设计开发技术的演进

1966 过程化编程:取消goto,结构化编程,流程图建模,软件 = 算法 + 数据结构。2010+ 编程语言的演进: C++11,java8,Go,异步与并发,安全性。1995 4+1视图:场景视图,逻辑视图,开发视图,运行视图,物理视图。2007 MBSE SysML:建模语言,建模工具,建模方法,形式验证。2001 敏捷开发:TDD,重构,持续继承,代码表达力,演进式设计。1997 UML:用例图,静态图,行为图,交互图,实现图。1980+ 面向对象编程: C++,逻辑复用,抽象接口。

2023-11-22 21:05:04 402

原创 从业务到软件架构——软件建模

1)泛化: 指的是类之间的继承或者实现关系,继承使用空心三角箭头+实线表示[<|--],实现使用空心三角箭头+虚线表示[<|..],生命周期:在定义类关系时就必须确定,一开始有效。5)依赖:表示一个类需要依赖另一个类做方法的返回值、形参、局部变量或者调用另外一个类方法的依赖关系,使用箭头+虚线表示[..>],生命周期:在类的函数调用时有效。行为事物(交互、状态机);3)详细设计:使用逻辑视图(类图、对象图)和行为视图(状态图、活动图、合作图、顺序图),去描述实现系统的静态结构和动态结构方案。

2023-11-08 21:49:12 211

原创 估计、偏差和方差

统计领域为我们提供了很多工具来实现机器学习目标,不仅可以解决训练集上的任务,还可以泛化。基本的概念,例如参数估计、偏差和方差,对于正式地刻画泛化、欠拟合和过拟合都非常有帮助。

2023-09-29 11:50:02 1185

原创 机器学习的超参数 、训练集、归纳偏好

超参数(Hyperparameters)和验证集(Validation Set)是机器学习中重要的概念,用于调整模型和评估其性能。超参数: 超参数是在机器学习模型训练过程中需要手动设置的参数,而不是从数据中学习得到的。这些参数影响模型的学习和泛化能力,例如学习速率、正则化项的强度、模型复杂度等。选择适当的超参数对于模型的性能和泛化能力至关重要。树的数量或树的深度矩阵分解中潜在因素的数量学习率(多种模式)深层神经网络隐藏层数k均值聚类中的簇数。

2023-09-29 11:23:27 620

原创 ON_COMMAND和ON_MESSAGE的区别

ON_COMMAND主要用于处理用户界面上的命令消息,例如菜单项、工具栏按钮等。ON_MESSAGE主要用于处理自定义消息,通常用于应用程序特定的通信或自定义行为。根据消息的类型和用途,你可以选择使用适当的宏来建立消息映射,以便正确处理不同类型的消息。ON_COMMAND和ON_MESSAGE的区别_Andrewniu的博客-优快云博客。

2023-09-10 12:14:26 1084

原创 BEGIN_MESSAGE_MAP,END_MESSAGE_MAP和ON_COMMAND

在MFC中,消息响应需要BEGIN_MESSAGE_MAP,END_MESSAGE_MAP和ON_COMMAND这些宏,这些宏的定义通常位于afxwin.h头文件中。

2023-09-10 12:06:15 544

原创 MFC中的类继承图的基本框架

在类的层次结构中,应用程序类CWinApp是一个基于MFC应用程序的最外层对象容器,它不仅拥有诸如实例句柄等需要被传送到WinMain()函数中去的参数,还包含了应用程序的主框架窗口,当主框架窗口被关闭时,应用程序也就跟着结束了。CView类是在使用文档/视图结构的应用程序中视图对象的基类,它是用户的主要操作界面。从图中可知,在MFC中大多数的类都派生于CObject类,它的主要作用是为子类提供一些基本的功能,这些派生类构成了MFC应用程序的基本框架,它们各自的功能描述如表1所示。包含应用程序的数据集。

2023-09-09 10:42:34 693

转载 std::move失效问题

在C++中,std::move是一个用于将对象转移所有权的函数模板,它将对象的状态从一个对象转移到另一个对象,通常用于优化移动语义。从代码可以看出,std::move本质上是调用了static_cast做了一层强制转换,强制转换的目标类型是。那么,为什么我们通常使用std::move实现移动语义,可以将一个对象的数据移给另外一个对象?结合本文最初的问题,在lambda中move没有生效,显然也是std::move强转的类型不是。然后触发了移动构造函数,在移动构造函数中,完成了对象b的数据到对象a的移动。

2023-09-06 22:00:05 748

原创 DECLARE_DYNCREATE(DECLARE_DYNAMIC)与IMPLEMENT_DYNCREATE(IMPLEMENT_DYNAMIC)

主要用于支持RTTI。你可以根据你的需求选择适当的宏组合来满足你的类的需求。看源码,发现这两组宏的实现是有细微差别的,需要配合使用。主要用于支持对象的动态创建和RTTI,而。

2023-09-02 11:25:53 359

HalconShowTest (1) (1).zip

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

2020-06-09

WindowsFormsApp1.zip

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

2019-10-30

RulerControlForWPF-master.zip

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

2019-10-11

空空如也

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

TA关注的人

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