- 博客(82)
- 收藏
- 关注
原创 fb设备驱动框架分析
在Linux中,每个字符设备都有一个唯一的主设备号。你可以静态地分配一个主设备号,或者动态地从内核获取一个未使用的主设备号(一般使用动态获取即可)。
2024-05-10 19:14:42 1142
原创 Linux内核中的内联汇编
内联汇编是一种在高级编程语言(如C或C++)中直接嵌入汇编代码的技术。这种方法允许程序员在源代码中直接插入汇编指令,从而实现对底层硬件的更直接控制和优化。内联汇编通常使用asm关键字将汇编代码嵌入到C/C++源代码中。
2024-05-06 13:27:33 946
原创 Linux内核中的链表浅析
Linux内核中经常使用双向链表数据结构来管理各种资源和数据。双向链表允许双向遍历,即可以从头到尾,也可以从尾到头。每个链表节点都包含指向前一个节点和后一个节点的指针。
2024-05-05 17:10:29 250
原创 Linux内核中的进程调度-调度器基础
本文全面探讨了Linux内核的调度器机制,首先从基础概念入手,阐述了调度器在操作系统中扮演的角色——负责管理和协调系统中各个进程对CPU资源的访问,确保系统整体性能和响应能力。文章深入解析了Linux内核对调度器的具体实现。
2024-04-01 12:01:28 1641
原创 Linux内核中的进程调度-进程调度基础
在深入探讨Linux内核的精妙世界中,进程调度无疑是最具挑战性也最为关键的一个环节。它作为操作系统核心功能的一部分,犹如交响乐团中的指挥家,精准而高效地协调着系统中各个进程的执行顺序和时间分配,确保整个系统的性能表现与资源利用达到最佳平衡。Linux内核的进程调度器不仅负责决定哪个进程将在CPU上运行,何时运行,还涉及到优先级管理、实时性保证、多处理器调度策略等诸多复杂问题。
2024-03-26 21:20:02 1245 1
原创 Linux内核架构和基础概念
随着Linux内核在全球市场份额的持续扩大,其影响力已深深渗透至各行各业,尤其在服务器领域乃至我们所熟知的前沿行业,更是彰显出无可匹敌的重要性。因此,本系列文章旨在系统性地记录我深入探索与学习Linux内核过程中的心得体会与关键笔记。本文主要是描述一下内核学习过程中的一些常用的概念,宏内核和微内核,内核架构等等。
2024-03-26 11:29:53 1607
原创 Qt中对主窗口的一些基本操作
一,给主窗口添加背景我们在做Qt项目的时候,难免需要在主场口上面添加背景图片,一般有两种方法来实现这一功能,可以在主窗口上面粘贴一个很大的QLabel然后在QLabel上面绘制图片,一般不会这样做,另外一种放法我们就需要重写绘制事件函数。paintEvent事件是在窗口状态改变之后处罚的,窗口的状态改变,可以是大小改变,也可以是别的。如下:头文件:protected: //只要窗口状态改变自动调用此函数 //需要绘制窗口必须通过此函数实现 //重新绘图函数 void
2021-06-18 18:51:48 534
原创 深度CV基础——图像噪声和滤波
一,图像噪声1.图像噪声的概念:图像噪声是图像在获取或是传输过程中受到随机信号干扰,妨碍人们对图像理解及分析处理的信号。很多时候将图像噪声看做多维随机过程,因而描述噪声的方法完全可以借用随机过程的描述, 也就是使用随机过程的描述,也就是用它的高斯分布函数和概率密度分布函数。图像噪声的产生来自图像获取中的环境条件和传感元器件自身的质量,图像在传输过程中产生图像噪声的主要因素是所用的传输信道受到了噪声的污染。2.信噪比:在噪声的概念中,通常采用信噪比(Signal-Noise Rate, SNR)衡量
2021-05-02 15:45:10 2739
原创 深度学习基础——使用keras全连接实现mnist
概述:一,数据集介绍:Mnist数据集分为两部分,分别含有60000张训练图片和10000张测试图片,图片内容就是0-9的数字。每一张图片包含28*28个像素。注:对于mnist数据集在keras的datasets里面存在直接导入即可,第一次可能需要下载有点慢。二,使用全连接层实现mnist数据集的分类1.导入需要的模块# 常用的科学计算库import numpy as np# 导入我们所用到的mnist数据集from keras.datasets import mnist# 导入所用
2021-04-06 00:34:45 762
原创 Qt中的线程详解
概述:在多核时代,CPU 的主频已经进入瓶 颈,另辟蹊径地提高程序运行效率就是使用线程,充分利用多核的优势。线程可以看做是“轻量级进程”,线程即可以由操作系统管理,也可以由应用程序管1.为什么要使用线程:我们都知道,进程线程的概念是非常重要的,也可以看看Linux下的线程,一般是在多任务的时候需要用到线程进程,说简单一点处理多核可以跑多个while(1)之外,进程线程也可以跑多个while(1)我们使用一个定时器和LCD显示定时器的计数.比如以下示例:Widget::Widget(QWidget
2021-02-27 13:50:44 10325 1
原创 STL中的算法简述
1.函数对象:概述:重载函数调用操作符的类,其对象常称为函数对象(function object),即它们是 行为类似函数的对象,也叫仿函数(functor),其实就是重载“()”操作符,使得类对象 可以像函数那样调用。1.1注意:.函数对象(仿函数)是一个类,不是一个函数。函 数对象(仿函数)重载了”() ”操作符使得它可以像函数一样调用。1.2分类:假定某个类 有一个重载的 operator(),而且重载的 operator()要求获取一个参数,我们就将这 个类称为“一元仿函数”(unary
2021-02-25 22:14:27 179
原创 STL中常用的容器——stack,queue和list容器
一,stack容器1,stack容器概述:stack 是一种先进后出(First In Last Out,FILO)的数据结构,它只有一个出口,形式 如图所示。stack 容器允许新增元素,移除元素,取得栈顶元素,但是除了最顶端 外,没有任何其他方法可以存取 stack 的其他元素。换言之,stack 不允许有遍历 行为。 有元素推入栈的操作称为:push,将元素推出 stack 的操作称为 pop.如下:2.stack迭代器Stack 所有元素的进出都必须符合”先进后出”的条件,只有 stac
2021-02-21 19:13:51 840
原创 STL中常用的容器——deque容器
1.基本概念:Vector 容器是单向开口的连续内存空间,deque 则是一种双向开口的连续线性空 间。所谓的双向开口,意思是可以在头尾两端分别做元素的插入和删除操作,当 然,vector 容器也可以在头尾两端插入元素,但是在其头部操作效率奇差,无法被 接受。2.Deque容器和vector容器比较:Deque 容器和 vector 容器最大的差异,一在于 deque 允许使用常数项时间对头端 进行元素的插入和删除操作。二在于 deque 没有容量的概念,因为它是动态的以 分段连续空间组合而成,随时
2021-02-21 11:39:58 230
原创 STL中常用的容器——vector容器
1,基本概念vector 的数据安排以及操作方式,与 array 非常相似,两者的唯一差别在于空间的 运用的灵活性。Array 是静态空间,一旦配置了就不能改变,要换大一点或者小一 点的空间,可以,一切琐碎得由自己来,首先配置一块新的空间,然后将旧空间的 数据搬往新空间,再释放原来的空间。Vector 是动态空间,随着元素的加入,它 的内部机制会自动扩充空间以容纳新元素。2,vector的迭代器:Vector 维护一个线性空间,所以不论元素的型别如何,普通指针都可以作为 vector 的迭代器,因为
2021-02-20 12:56:18 256
原创 STL中的迭代器举例详解
介绍了STL中的迭代器访问容器和迭代器配合算法去访问容器,容器介绍了存储基础类型的容器和存储自定义类型的容器以及存储容器的容器。
2021-02-19 08:00:10 579
原创 C++中的STL简单介绍
一,STL基础概念STL(Standard Template Library,标准模板库),是惠普实验室开发的一系列软件的 统 称。现在主要出现在 c++中,但是在引入 c++之前该技术已经存在很长时间 了。STL 从广义上分为: 容器(container) 算法(algorithm) 迭代器(iterator),容器 和算法之间通过迭代器进行无缝连接。STL 几乎所有的代码都采用了模板类或者 模板函数,这相比传统的由函数和类组成的库来说提供了更好的代码重用机会。 STL(Standard Templa
2021-02-18 18:50:41 7973 1
原创 Python中的numpy模块简述
简要说明了Python语言的numpy模块的基本用法,概括了一些矩阵的操作,元素操作和利用索引值操作最后介绍了矩阵的合并和分割。
2021-01-23 21:54:17 581 3
原创 Qt中使用Tcp传输文件
概述:TCP提供一种面向连接的、可靠的字节流服务。面向连接意味着两个使用TCP的应用(通常是一个客户和一个服务器)在彼此交换数据包之前必须先建立一个TCP连接。这一过程与打电话很相似,先拨号振铃,等待对方摘机说“喂”,然后才说明是谁。在一个TCP连接中,仅有两方进行彼此通信。TCP传输数据的时候是很少出现丢包情况的,因为它本身的特点,看百度输出文件的过程:实现服务端选择文件给客户端发送:过程如下:...
2021-01-16 21:26:44 3287 8
原创 Qt中的QFile读写文件
概述:文件操作是应用程序必不可少的部分。Qt 作为一个通用开发库,提供了跨平台 的文件操作能力。Qt 通过 QIODevice 提供了对 I/O 设备的抽象,这些设备具有 读写字节块的能力。下面是 I/O设备得类图(Qt5):1,QIODevice:所有 I/O 设备类的父类,提供了字节块读写的通用操作以及基本接口;2,QFileDevice:Qt5 新增加的类,提供了有关文件操作的通用实现。3,QFlie:访问本地文件或者嵌入资源;4,QTemporaryFile:创建和访问本地文件系统的临时
2020-12-27 20:41:33 2308 1
原创 Qt中的对话框(二)——文件对话框
编写一个简单的文本 文件编辑器,我们将使用 QFileDialog 来打开一个文本文件,并将修改过的文件 保存到硬盘。
2020-12-23 20:37:28 1080
原创 Qt中的对话框(一)
对话框概述:对话框是 GUI 程序中不可或缺的组成部分。很多不能或者不适合放入主窗口的 功能组件都必须放在对话框中设置。对话框通常会是一个顶层窗口,出现在程序 最上层,用于实现短期任务或者简洁的用户交互。Qt中对话框实现使用的是 QDialog 类。就像主窗口一样,我们通常会设计一个类继 承 QDialog。关于QDialog(及其子类,以及所有 Qt::Dialog 类型的类)其 parent 指针:如果 parent 为 NULL,则该对话框会作为一个顶 层窗口,否则则作为其父组件的子对话框(
2020-12-23 17:27:38 808
原创 Qt中的布局管理器
概述:所谓 GUI 界面,归根结底,就是一堆组件的叠加。我们创建一个窗口,把按钮放上面,把图标放上面,这样就成了一个界面。在放置时,组件的位置尤其重要。我们必须要指定组件放在哪里,以 便窗口能够按照我们需要的方式进行渲染。这就涉及到组件定位的机制。Qt 提供了两种组件定位机制:绝对定位和布局定位。绝对定位:绝对定位就是一种最原始的定位方法:给出这个组件的坐标和长宽值。这样,Qt 就知道该把组件放在哪里以及如何设置组件的大小。但是这样做带来的一个问题是,如果用户改变了窗 口大小,比如点击最大化按钮或者使
2020-12-22 19:46:16 263 1
原创 Qt中的QMainWindow学习
概述:QMainWindow 是 Qt 框架带来的一个预定义好的主窗口类。一些经典的主窗口,通常是由一个标题栏,一个菜单栏,若干工具栏和一个任务栏。在这些子组件之间则是我们的工作区(文本编辑器的文本编辑区)。事实上QMainWindow 就是这样的 布局。比如下面的EditPlus布局1,QMainWindow的组成其实对于QMainWindow主要是下面的几部分<1>主窗口的最上面是 Window Title,也就是标题栏,通常用于显示标题和控制按钮,比如最大化、最小化和关闭等。
2020-12-22 19:14:16 543
原创 Qt中的QlineEdit
概述:QLineEdit 类代表编程框,它可以让用户输入一个单行文本。类似于登录窗口中的账号和密码的输入框(行编辑)1,构造函数:QLineEdit (QWidget *parent = 0); QLineEdit(const QString &contents, QWidget *parent = 0);其中 contents 表示编辑框中显示的内容。2,属性(1)alignment 属性表示显示文本的对齐方式,相关成员函数如下:int maxLength() const; //
2020-12-17 11:18:51 3636 2
原创 Qt中的信号和槽详解
概述:信号和槽是一种高级接口,应用于对象之间的通信,它是 QT 的核心特性。要正确的处理信号和槽,必须借助一个称为 moc(Meta Object Compiler)的 QT 工具,该工具是一个 C++ 预处理程序,它为高层次的事件处理自动生成所需要的附加代码。 信号和槽能携带任意数量和任意类型的参数。我们可以将很多信号与单个的槽进行连接,也可以将单个的信号与很多的槽进行连接,(当这个信号被发射时,这些槽将会一个接一个地 执行,但是它们执行的顺序将会是随机的、不确定的,我们不能人为地指定哪个先执行、哪个后
2020-12-15 18:06:47 7355
原创 Qt中的Qlabel类(标签类)详解
概述:QLabel是QT界面中的标签类,它从QFrame下继承,QLabel 类代表标签,它是一个用于显示文本或图像的窗口部件。构造函数QLabel 类支持以下构造函数:QLabel(QWidget *parent = 0, Qt::WindowFlags f = 0); QLabel(const QString &text, QWidget *parent = 0, Qt::WindowFlags f= 0); 其中第二个构造函数能够同时通过参数 text 给出要显示的文本,因此是最
2020-12-14 20:32:22 44120 1
原创 Qt完整工程创建和项目文件概述
一,Qt工程创建1,点击创建爱你文件或项目2,弹出 New Project 对话框,选择 Qt Widgets Application3,选择【Choose】按钮,弹出如下对话框注意:文件路径尽量不要包含中文路径4,设置项目名称和路径,按照向导进行下一步选择编译套件5,选择基类:注:一般选QWidget QWIdget基类主要是窗口控件QMainWindow 基类类似于文件编辑器的窗口,有菜单项和工具项等QDialog基类主要是对话框等向导会默认添加一个继承自 CMainW
2020-12-14 19:32:10 1291
原创 Qt的概念和下载以及QT Creator 快捷键
一,Qt概述:Qt 是一个跨平台的 C++图形用户界面应用程序框架。它为应用程序开发者提供建立艺术级图形界面所需的所有功能。它是完全面向对象的,很容易扩展,并且允许真正的组件编程。二,Qt的下载与安装下载地址:http://www.qt.io/download-open-source/Linux HostQt 5.5.0 for Linux 32-bit (535 MB) (info)Qt 5.5.0 for Linux 64-bit (532 MB) (info)Qt 5.5.0
2020-12-14 18:26:03 316
原创 C语言中的位操作学习总结
概述:在学习一些嵌入式设备特别是单片机的时候,经常会用到一些逻辑操作(操作寄存器),所以免不了使用一些位操作运算符。一些常用道德位操作运算符如下:比如我们操作一个寄存器的时候我们如果想要把某一位置一,并且不能影响到别的bit位时,我们就不能直接给一个二进制数,比如我们需要把bit5置1,就不能直接让寄存器的值等于0x20因为如果这样的话,我们相当于给其他的位置也赋值了。所以就只能使用TEST |= 0X20;位与&在寄存器操作的时候采用位与运算的时候和1相与值不变,和0相与值必为
2020-11-21 02:44:25 256
原创 C++语言中的异常
概述:处理一个程序异常的基本思想是让一个函数在发现了自己无法处理的错误时抛出(throw)一个异常,然后它 的(直接或者间接)调用者能够处理这个问题。也就是《C++ primer》中说的:将 问题检测和问题处理相分离。 一种思想:在所有支持异常处理的编程语言中(例 如 java),要认识到的一个思想:在异常处理过程中,由问题检测代码可以抛出一 个对象给问题处理代码,通过这个对象的类型和内容,实际上完成了两个部分的通 信,通信的内容是“出现了什么错误”。当然,各种语言对异常的具体实现有着或多 或少的区别,但
2020-11-21 02:06:09 263
原创 C++语言中的类型转换(静态,动态,常量)
概述:类型转换(cast)是将一种数据类型转换成另一种数据类型。例如,如果将一个整型 值赋给一个浮点类型的变量,编译器会暗地里将其转换成浮点类型。 转换是非常 有用的,但是它也会带来一些问题,比如在转换指针时,我们很可能将其转换成一 个比它更大的类型,但这可能会破坏其他的数据。 应该小心类型转换,因为转换 也就相当于对编译器说:忘记类型检查,把它看做其他的类型。无论什么原因,任何一个程序如果使用很多类型转换都值得怀疑. 标准 c++提供了一个显示的转换的语法,来替代旧的 C 风格的类型转换。 使用 C
2020-11-15 13:28:00 643
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人