自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 linux内核:从0开始(1)基本操作+文件系统

COPYING文件是内核许可证,CREDITS是开发了很多内核代码的开发者列表,MAINTAINERS是维护者列表,它们负责维护内核子系统和驱动程序,makefile是基本内核的makefile。

2024-05-14 20:29:46 206 1

原创 linux学习:多媒体开发库SDL+视频、音频、事件子系统+处理yuv视频源

sdl是一个跨平台的底层开发库,提供操作诸如音频、 键盘、鼠标、游戏杆以及显卡等硬件的方法,被很多多媒体播放器、模拟器和流行游戏所使 用,SDL 支持 Windows、MacOS、Linux、iOS 以及 Android,也就是说你目所能及的 几乎所有平台它都能运行,并且 SDL 是开源的,完全由 C 语言编写,

2024-05-13 20:11:31 1100

原创 linux学习:视频输入+V4L2

V4L2 是 Linux 处理视频的最新标准代码模块,这其中包括对视频输入设备的处理,比 如高频头(即电视机信号输入端子)或者摄像头,还包括对视频输出设备的处理。一般而言, 最常见的是使用 V4L2 来处理摄像头数据采集的问题我们平常所使用的摄像头,实际上就是一个图像传感器,将光线捕捉到之后经过视频芯 片的处理,编码成 JPG/MJPG 或者 YUV 格式输出。而通过 V4L2 我们可以很方便地跟摄像 头等视频设备“沟通”,比如设置或者获取它们的工作参数。

2024-05-13 00:29:32 970

原创 linux学习:linux视频输出+FRAME BUFFER+jpeg库+lcd上显示

framebuffer 是一种很底层的机制,在 Linux 系统中,为了能够屏蔽 各种不同的显示设备的具体细节,Linux 内核提供的一个覆盖于显示芯片之上的虚拟层,将 显卡或者显存设备抽象掉,提供给一个统一干净又抽象的编程接口,使得内核可以很方便地 将显卡硬件抽象成一块可直接操作的内存,而且还提供了封装好的各种操作和设置,大大提 高内核开发的效率。这个大小决定了映射内存的宽度。这个结构体保存显示设备不能被修改的信息,比如显存(或起到显存作用的内存)的起 始物理地址、扫描线尺寸、显卡加速器类别等。

2024-05-12 20:50:06 781

原创 linux学习:音视频编程+alsa声音架构

0,0 中的第一个 0 是系统中声卡的编号,第二个 0 是设备的 编号,而最后一个 0 代表标准打开模式,除此之外还可以是 SND_PCM_NONBLOCK 或者 SND_PCM_ASYNC,前者代表非阻塞读写 PCM 设备,后者代表声卡系统以异步方式工作: 每当一个周期(period)结束时,将触发一个。如果使用 8 个 bit (即一个字节)来描述采样值,那么能表达的值的范围是 256,如果使用 16 个 bit 来描述, 范围就被扩展为 65536,描述一个采样值所使用的位数,也被称为分辨率。

2024-05-07 18:37:46 686

原创 linux学习:线程池

一个进程中的线程就好比是一家公司里的员工,员工的数目应该根据公司的业务多少来 定,太少了忙不过来,但是太多了也浪费资源,最理想的情况是:让进程有一些初始数目的 线程(所谓的线程池),当没有任务的时候这些线程自动进入睡眠,有了任务他们会立即执 行任务,不断循环。进程还应该可以根据自身任务的繁重与否来增删线程的数目,当所有的 任务都完成了之后,所有的线程还能妥当地收官走人,不带走一片云彩。

2024-05-06 19:55:18 382 2

原创 linux学习:线程安全(信号量+互斥锁读写锁+条件变量+可重入函数)

这样的信号量其实是一个特殊的文件,创建成功之后将会被放置在系统的一个特殊的 虚拟文件系统/dev/shm 之中,不同的进程间只要约定好一个相同的名字,他们就可以通 过这种有名信号量来相互协调,在进程退出之后 他们并不会自动消失,而需要手工删除并释放资源。信号量分为两种,分别是无名信号量和有名信号量, 这两种信号量比之前介绍的 system-V 的信号量机制要简洁,虽然没有后者的应用范围那么广泛,但是 POSIX 良好的设计使得他们更具吸引力。使用条件变量,来实现前面所述的小楠和她的兄弟姐妹取钱的逻辑。

2024-04-29 21:53:11 915

原创 linux学习:线程

以上 API 都是针对线程属性操作的,所谓线程属性是类型为 pthread_attr_t 的 变量,设置一个线程的属性时,通过以上相关的函数接口,将需要的属性添加到该类型 变量里面,再通过 pthread_create( )的第二个参数来创建相应属性的线程。而在线程接受取消请求的情况下,如何停下来又取决于两种不同的响应取消请求的策略 ——延时响应和立即响应,当采取延时策略时,线程并不会立即退出,而是要遇到所谓的“取 消点”之后,才退出。而“取消点”,指的是一系列指定的函数。

2024-04-25 17:12:19 736

原创 linux学习:进程通信(信号量)

信号量跟前面的 MSG 和 SHM 有极大的不同,SEM 不是用来传输数据的, 而是作为“旗语”,用来协调各进程或者线程工作的。

2024-04-18 18:12:41 648

原创 linux学习:进程通信(system-V IPC+消息队列+共享内存)

消息队列、共享内存和信号量被统称为 system-V IPC,V 是罗马数字 5,是 Unix 的 AT&T 分支的其中一个版本,一般习惯称呼他们为 IPC 对象,这些对象的操作接口都比较 类似,在系统中他们都使用一种叫做 key 的键值来唯一标识,而且他们都是“持续性”资 源——即他们被创建之后,不会因为进程的退出而消失,而会持续地存在,除非调用特殊的函数或者命令删除他们。跟文件类型,进程每次“打开”一个 IPC 对象,就会获得一个表征这个对象的 ID,进 而再使用这个 ID 来操作这个对象。

2024-04-16 14:00:01 912

原创 linux学习:进程通信(管道+信号)

输出结果中,省略的部分是严格从大到小的实时信号,可见如果一个进程如果同 时收到多个实时信号时,他们的响应次序是按照信号值由大到小排队的。说明非实时信号是不可靠的,在传递的过程中有可能被丢弃。前面 31 个信号都有一个特殊的名字,对应 一个特殊的事件,比如 1 号信号 SIGHUP(Signal Hang UP),表示每当系统中的一个 控制终端被关闭(即挂断,hang up)时,即会产生这个信号,有时会将他们称为非实时 信号,这些信号都是从 Unix 系统继承下来的,他们还有个名称叫“不可靠信号”

2024-04-16 10:22:07 989

原创 linux学习:进程(新建+运行某文件+退出处理函数+等待)

进程是由进程控制块、程序段、数据段三部分组成进程有都有一个父进程,除了init,父进程可以创建子进程每个进程都有一个PID,可以用ps来查看,等于进程的身份证pid是本身进程的pid,ppid是父进程的pid。

2024-04-15 16:54:15 984

原创 linux学习:输入设备+tslib库控制触控屏应用接口

连接操作系统的输入设备,可不止一种,也许是一个标准 PS/2 键盘,也许是一个 USB 鼠标,或者是一块触摸屏,甚至是一个游戏机摇杆,Linux 在处理这些纷繁各异的输入设备的时候,采用的办法还是找中间层来屏蔽各种细节在 Linux 的内核中,对输入设备的使用,实际上运用了 3 大块来管理,他们分别是所 谓的输入设备驱动层、输入子系统核心层,以及事件触发层。

2024-04-15 13:53:23 743

原创 linux学习:目录检索

Linux 中目录就是一组由文件名和索引号组成的索引表,目录下的文件的真正内容存储 在分区中的数据域区域。目录中索引表的每一项被称为“目录项”,里面至少存放了一个文 件的名字(不含路径部分)和索引号(分区唯一),当我们访问某一个文件的时候,就是根 据其所在的目录的索引表中的名字,找到其索引号,然后在分区的 i-node 节点域中查找到 对应的文件 i 节点的。操作目录跟标准 IO 函数操 作文件类似,也是先获得“目录指针”,然后读取一个个的“目录项”获取目录指针,并打印该目录下所有文件的名字。

2024-04-15 10:36:32 270

原创 linux学习:文件属性

在操作文件的时候,经常需要获取文件的属性,比如类型、权限、大小、所有者等等, 这些信息对于比如文件的传输、管理等是必不可少的,而这些信息这三个函数的功能完全一样,区别是:stat( )参数是一个文件的名字,而 fstat( )的参数是一个已经被打开了的文件的描述符 fd,而lstat( )则可以获取链接文件本身的属性。

2024-04-15 01:09:11 697

原创 linux学习:标准IO

系统 IO 的最大特点一个是更具通用性,不管是普通文件、管道文件、设备节点文件、 套接字文件等等都可以使用,另一个是他的简约性,对文件内数据的读写在任何情况下都是 不带任何格式的,而且数据的读写也都没有经过任何缓冲处理,这样做的理由是尽量精简内 核 API,而更加丰富的功能应该交给第三方库去进一步完善。

2024-04-12 23:54:41 964

原创 linux学习:文件类型、文件操作、系统IO、内存映射

在几百个 Linux 系统调用中,有一组函数是专门针对文件操作的,比如打开文件、关 闭文件、读写文件等,这些系统调用接口就被称为“系统 IO”,相应地,在几千个标准 C 库函数中,有一组函数也是专门针对文件操作的,被称为“标准 IO”,他们是工作在不同 层次,但都是为应用程序服务的函数接口。该函数在进程的虚拟内存空间 中映射出一块内存区域,用以对应指定的一个文件,该内存区域上的数据跟对应的文件的数 据是一一对应的,并在一开始的时候用文件的内容来初始化这片内存。文件信息的最左边一栏是各种文件类型的缩写。

2024-04-12 14:39:42 1007

原创 linux学习:队列

我们对队列里的元素操作是有严格限制的:插入一个新节点,必须插入到 指定的一端,而删除一个已有节点,则必须在另一端进行。当我们对一个线性表严格地执行 这样的限制的话,这种线性表就是一种特殊的线性表,称之为队列。为了方便描述,将队列 的插入称为入队,删除称为出队。可以插入节点的那一端称之为队尾,另一端则称之为队头队列这种逻辑结构同样可以使用顺序存储或者使用链式存储,使用顺序存储时,由于出 队入队分别在两端进行,为了避免数据的成片移动造成效率损失,可以考虑使用两个分别指 示队头和队尾的偏移量,来辅助队列操作。

2024-04-12 00:57:44 547

原创 linux学习:栈(汉诺塔游戏)

第一根上面套着 64 个圆的金片,最大的一个在底下,其余一个比一个小,依次叠上去,庙里的众僧不倦地 把它们一个个地从这根棒搬到另一根棒上,规定可利用中间的一根棒作为帮助,但每次只能 搬一个,而且大的不能放在小的上面。每次只能拿最上面的一个,然后放的时候也必须放到最上面,这 个逻辑其实就是栈。

2024-04-11 23:30:57 210

原创 linux学习:栈

struct node // 栈节点结构体int data;struct linked_stack // 栈管理结构体int size;

2024-04-11 22:46:21 267

原创 linux学习:结构体、联合体、枚举

每一款不同的处理器,存取内存数据都会有不同的策略,如果是 32 位的 CPU,一般 来讲他在存取内存数据的时候,每次至少存取 4 个字节(即 32 位),也就是按 4 字节对齐 来存取的。可见,如果对一个 double 型数据的地址不作要求,那么 CPU 就有可能为此付出代价: 需要三个指令周期才能将区区 8 个字节搬到家里来,这显然很不环保,环保的做法是:令 其地址至少是 4 的整数倍(即 4字节对齐)short为2,double为4,char为1,取最大的4为m,所以该x的大小为12。

2024-04-11 16:25:22 413

原创 linux学习:内存(栈,堆,数据段,代码段)

数据段实际上分为三部分,地址从高到底分别是.bss 段、.data 段和.rodata 段,三个 数据段各司其职:.bss 专门用来存放未初始化的静态数据,它们都将被初始化为 0,.data 段专门存放已经初始化的静态数据,这么初始值从程序文件中拷贝而来,而.rodata 段用来 存放只读数据,即常量,比如进程中所有的字符串、字符常量、整型浮点型常量等。跟栈一样,会随着进程的运行而不断地增大或缩小。堆内存被称为内存中的自由区,这是一个非常重要的区域,因为在此区域定义的内存的 生命周期我们是可以控制的,

2024-04-11 16:01:42 756

原创 linux学习:c的位运算符与优先级

位运算符优先级

2024-04-10 00:14:31 140

原创 linux学习:Makefile学习

A = apple继续上方编译多个.ca.o:a.cb.o:b.cx.o:x.cy.o:y.cCFLAGS、CC、MAKE、Shell 等等,这些变量已经有了系统预定义好的值,当然我们 可以根据需要重新给他们赋值,例如 CC 的默认值是 gcc,当我们需要使用 c 编译器的时候 可以直接使用他a.o:a.cb.o:b.cx.o:x.cy.o:y.c如果是要编译arm,只需修改CC递归定义方式B = China。

2024-04-09 00:44:04 927

原创 linux学习:gcc编译

用gcc 这个工具编译 hello.c,并且使之生成一个二进制文件 hello。其中 –o 的意义是 output,指明要生成的文件的名称,如果不写 –o hello 的话会生成默 认的一个 a.out 文件。

2024-04-08 01:37:44 417

原创 linux学习:shell脚本

目录要求注意变量变量的定义和赋值变量的引用变量的种类设置环境变量特殊符号引号竖杠(管道)和大于小于号(重定向)字符串处理测试语句脚本语法判断循环函数trap要把 Shell 命令放到一个“脚本”当中,有一个前提:脚本的第一行必须写成类似这样 的格式: #!/bin/bash这是给系统指定一款 Shell 解释器脚本文件缺省是没有执行权限的,要使得脚本可以执行必须给他添加权限赋值号的两边没有空格!在 Shell 脚本中,任何时候要给变量赋值,赋值号两 边一定不能有空格变量名也有类似于 C 语言那样的规定:只能

2024-04-08 01:22:49 954

原创 linux学习:sed脚本

流编辑器, 自然要涉及文件,实际上,sed 的工作就是把文件或字符串里面的文字经过一系列编辑命令 转换为另一种格式输出,文档就像河流的源头,sed 就像卡在河流中间的过滤器,所有的文 本经过 sed 过滤之后形成另一个样子。sed 就是这样的一种东西。

2024-04-07 20:18:33 289

原创 linux学习:awk和RE

其中,$0~/Brown/是一个条件,表示所指定 的域(这里是$0)要匹配的规则(这里是 Brown),也就是说,grade.txt 中的一行只要 包含有单词 Brown,就会被选出来然后打印出来。从 file 中每次读取一行,然后针对这一行判断条件 1,成立则执行动作 1, 否则不执行,然后判断条件 2,成立则执行动作 2,否则不执行,以此类推。awk是一种用于处理文本的编程语言工具,他扫描文件中的每一行,查找与命令行中所给定内容相匹配的模式,如果发现匹配内容,则进行下一个编程步骤。

2024-04-07 19:31:43 1035

原创 qt学习:窗体无状态栏-关闭-移动

【代码】qt学习:窗体无状态栏-关闭-移动。

2024-03-05 20:56:11 293

原创 qt学习:雷达

目录步骤添加头文件定义类成员数据和函数配置定时器重写绘图事件函数定义类成员数据和函数配置定时器重写绘图事件函数

2024-03-04 23:21:35 178

原创 qt学习:QPaintEvent绘图事件+QPainter画家

触发事件便会执行paintEvent(QPaintEvent *),我们可以重写QWidget 的 paintEvent(QPaintEvent *) 方法来处理绘制逻辑。

2024-03-04 21:11:17 642

原创 qt学习:网络调试助手客户端+服务端

添加模块构造函数连接按钮收到来自服务器的数据触发发送按钮断开按钮向textEditRev文本编辑器中插入指定颜色的文本服务端步骤ui界面配置 添加模块自定义一个继承与复选框类的类,重写鼠标点击事件,定义自定义信号构造函数新的TCP连接请求时触发新的数据接收时触发当连接的状态断掉时触发当 QTcpSocket 的连接状态发生变化时,stateChanged信

2024-03-04 15:52:54 418

原创 qt学习:串口调试助手

步骤配置ui界面注意选择串口的复选框是继承自带的复选框的自定义复选框 隐藏面板按钮是隐藏多文本页面 隐藏历史按钮是隐藏历史记录页面新建一个自定义复选框类MyComboBox,并继承自带的复选框类重写一个鼠标左键按下事件,按下就发送信号#include "mycombobox.h"#include <QMouseEvent>MyComboBox::MyComboBox(QWidget *parent):QComboBox(parent){}//创建一个继承

2024-03-01 20:08:55 654

原创 qt学习:实战 记事本 + 快捷键 + 鼠标滚轮 + 打开读取写入关闭文件

在.h里public:QFile file;//文件描述符//增加当前字体大小函数//减小当前字体大小函数//在用户按下 Ctrl 键的同时滚动鼠标滚轮时,执行放大或缩小操作//槽函数//多选框变化后发出信号绑定槽函数来改变编码//编辑框的光标位置发生变化时发出信号绑定槽函数来改变对应有多少字符多少行。

2024-03-01 00:37:27 810

原创 c++学习:虚继承

虚继承是C++中一种特殊的继承方式,主要用来解决多重继承中的菱形继承问题。在菱形继承结构中,一 个类继承自两个具有共同基类的类时,会导致共同基类的成员在派生类中存在两份拷贝,这不仅会导致 资源浪费,还可能引起数据不一致的问题。虚继承通过确保共同基类的单一实例存在于继承层次中,来解决这一问题。

2024-02-29 20:59:23 173

原创 c++学习:多重继承

多重继承是一种允许一个类同时继承多个基类的特性。这意味着派生类可以继承多个基类的属 性和方法。多重继承增加了语言的灵活性,但同时也引入了额外的复杂性,特别是当多个基类具有相同 的成员时。在多重继承中,派生类继承了所有基类的特性。这包括成员变量和成员函数。如果不同的基类有相同名 称的成员,则必须明确指出所引用的是哪个基类的成员。Derived 类同时继承了 ClassA 和 ClassB。因此,它可以使用这两个类中定义的方法。

2024-02-29 20:55:30 179

原创 c++学习:虚函数

virtual 和 override 关键字用于支持多态,尤其是在涉及类继承和方法重写的情况下。正 确地理解和使用这两个关键字对于编写可维护和易于理解的面向对象代码至关重要。

2024-02-29 20:52:03 278

原创 c++学习:继承

继承是面向对象编程(OOP)中的一个核心概念,特别是在C++中。它允许一个类(称为派生类或子 类)继承另一个类(称为基类或父类)的属性和方法。继承的主要目的是实现代码重用,以及建立一种 类型之间的层次关系。

2024-02-29 16:30:03 1164

原创 c++学习:静态成员

何使用静态成员变量来计数一个类的实例数量。

2024-02-29 14:45:51 307

原创 c++学习:析构函数

析构函数是C++中的一个特殊的成员函数,它在对象生命周期结束时被自动调用,用于执行对象销毁前的清理工作。析构函数特别重要,尤其是在涉及动态分配的资源(如内存、文件句柄、网络连接等)的情况下。

2024-02-29 14:28:51 152

qt学习:停车场管理系统+摄像头+http识别车牌+sqlite3数据库

qt学习:停车场管理系统+摄像头+http识别车牌+sqlite3数据库 https://blog.csdn.net/weixin_59669309/article/details/135944139?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22135944139%22%2C%22source%22%3A%22weixin_59669309%22%7D

2024-02-01

qt-无边框ui界面4

qt-无边框ui界面1

2024-01-21

qt-无边框ui界面3

qt-无边框ui界面1

2024-01-21

qt-无边框ui界面2

qt-无边框ui界面1

2024-01-21

qt-无边框ui界面1

qt-无边框ui界面1

2024-01-21

stm32学习:hal库usart+esp8266+tcp+onenet+可以远程监督家里情况

stm32学习:hal库usart+esp8266+tcp+onenet+可以远程监督家里情况

2023-12-14

stm32学习:DHT11+0.96寸oled屏

stm32学习:DHT11+0.96寸oled屏

2023-12-11

python学习:pandas+统计科目总分+生成奖状

python学习:pandas+统计科目总分+生成奖状

2023-11-30

python学习:pandas+统计科目总分+生成奖状

python学习:pandas+统计科目总分+生成奖状

2023-11-30

python学习:pandas+统计科目总分+生成奖状

python学习:pandas+统计科目总分+生成奖状

2023-11-30

python学习:pandas+统计科目总分+生成奖状

python学习:pandas+统计科目总分+生成奖状

2023-11-30

python学习:csv+实战

python学习:csv+实战

2023-11-29

空空如也

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

TA关注的人

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