- 博客(109)
- 收藏
- 关注
转载 linux自由软件安装--configure脚本
但如果你进行源码包安装的时候没有指定位置(默认值一般为/usr/local/),或指定的位置为--prefix=/usr/local,则这时候你安装软件生成的文件将分别存储在/usr/local/里面的bin、lib或ect等目录中,这时候卸载起来就相对麻烦一点了。上面的意思是将该软件安装在 /usr 下面,执行文件就会安装在 /usr/bin (而不是默认的 /usr/local/bin),资源文件就会安装在 /usr/share(而不是默认的/usr/local/share.
2024-09-23 13:16:26 136
原创 运用海康SDK发生的的错误代码分析
修改完第一个结构体类型后,再修改它的结构体成员,并在后面sprintf_s的传参中传入char* pcImagePath类型的参数;SaveImageToFile函数需要的参数类型为MV_SAVE_IMAGE_TO_FILE_PARAM_EX。关于文件路径参数可以按自己的实际情况修改,至此修改完成。时出现保存图片的错误,可以此篇为参考修改。可能也有朋友在使用这位大佬的代码。因为在下面第349行代码中。
2024-08-21 20:48:39 366 5
原创 QT入门(二)信号槽
然后在mainwindow源文件中实例化对象,连接信号槽,就发送信号触发槽函数。所以需要指定父对象,在父对象析构时,new的子对象也会被析构,防止内存泄漏。在mainwindow.h头文件中包含新建类的头文件、声明类、声明类对象。在此事例中,需要在学校类中声明信号、在学生类中声明并定义槽函数。
2024-08-05 14:55:15 230
原创 QT入门(一)C++基础和QT启动文件分析
是成员列表的初始化,要注意初始化的顺序符合mainwindow.h中class mywindow的顺序。其中class MyWindow和Ui:MyWindow是不一样的,印务诶实在不同的命名空间。
2024-08-05 11:53:34 386
原创 51、回溯之N皇后
1、棋盘的生成std::vector<std::string> chessboard(n, std::string(n, '.'));创建一个n×n的棋盘。3、终止条件的判断,棋盘是n行的,为回溯函数传入的行数是从0开始,所以当行数row==n时,就将棋盘放入result中,结束返回。每一种解法包含一个不同的 n 皇后问题 的棋子放置方案,该方案中 'Q' 和 '.' 分别代表了皇后和空位。n 皇后问题 研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。
2024-07-17 10:35:46 232
原创 从零写UVC摄像头驱动(二)数据传输
当USB插上主机,就会产生两个接口(VC和VS),然后获取到USB描述符并解析,从而设置摄像头(比如分辨率、格式);然后分配缓冲区,启动摄像头,便从USB得到摄像头采集数据,保存到缓冲区供应用程序使用。详细过程看这两篇:。我们在设置FORMAT时只是简单的使用video->streaming->format[fmt->index]等数据,这些数据哪来的?b. 启动ubuntu,修改/etc/default/grub。应是设备被枚举时设置的,也就是分析它的描述符时设置的。
2024-07-15 16:44:55 490
原创 从零写UVC摄像头驱动(三)设置属性
uvc_ctrl.c里数组: static struct uvc_control_info uvc_ctrls[].entity = UVC_GUID_UVC_PROCESSING, // 属于哪个entity(比如PU).selector = PU_BRIGHTNESS_CONTROL, // 用于亮度。
2024-07-15 16:44:42 635
原创 Linux--USB驱动开发(二)插入USB后的内核执行程序
USB设备描述符(usb_device_descriptor)USB配置描述符(usb_config_descriptor)USB接口描述符(usb_interface_descriptor)USB端点描述符(usb_endpoint_descriptor)一个设备描述符可以有多个配置描述符;一个配置描述符可以有多个接口描述符(比如声卡驱动就有两个接口:录音接口和播放接口)一个接口描述符可以有多个端点描述符;
2024-07-12 13:05:10 1006
原创 从零写UVC摄像头驱动(一)驱动框架
probe:2.1. 分配video_device:video_device_alloc2.2. 设置.fops.ioctl_ops (里面需要设置11项)如果要用内核提供的缓冲区操作函数,还需要构造一个videobuf_queue_ops2.3. 注册: video_register_deviceid_table: 表示支持哪些USB设备UVC驱动:drivers\media\video\uvc\
2024-07-11 13:20:13 481
原创 远心镜头简介
普通工业镜头的畸变一般在1%~2%,这样的畸变通常会影响检测精度(例如实际长度为100mm的物体,使用这种镜头测得的尺寸可能是101mm~102mm;与可通过改变工作距离和重新手动聚焦来更改图像比例的普通镜头相比,远心镜头的图像比例始终不变。大家都有这种印象,一个物体在人眼看来,会有近大远小的现象。这是因为物体近的时候,在视网膜上投影大,小的时候,投影小。镜头使用,它的主要特点是在远心视角下,没有入射角引起的测量误差,与标准镜头相比,远心透视的镜头前面的光线与光轴平行。为了解决这个问题,就产生了远心镜头。
2024-07-07 21:13:07 509
原创 669、修剪二叉搜索树
给定一个二叉搜索树,同时给定最小边界L 和最大边界 R。通过修剪二叉搜索树,使得所有节点的值在[L, R]中 (R>=L)。你可能需要改变树的根节点,所以结果应当返回修剪好的二叉搜索树的新的根节点。题解:与二叉搜索树删除节点操作一样,不同的是要遍历整个树,需要注意的是单层逻辑的实现。返回修剪后的节点嫁接到上层节点。
2024-07-06 22:23:44 226
原创 Linux--USB驱动开发(一)USB简介
USB全称为,翻译过来就是通用串行总线。由英特尔与众多电脑公司提出来,用于规范电脑与外部设备的连接与通讯。目前 USB接口已经得到了大范围的应用,已经是电脑、手机等终端设备的必配接口,甚至取代了大量的其他接口。
2024-07-06 14:37:25 1291
原创 450、删除二叉搜索树中的节点
是 C++11 引入的一种关键字,用于自动推导变量的类型。编译器会根据变量的初始化表达式来推断变量的类型。对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。中通过递归返回值来加入新节点, 这里也可以通过递归返回值删除节点。遇到空返回,其实这也说明没找到删除的节点,遍历到空节点直接返回了。1)对单层递归逻辑即找到key值时的五种情况的分析。这里就把二叉搜索树中删除节点遇到的情况都搞清楚。节点的右子节点赋值给一个自动类型推导的变量。给定一个二叉搜索树的根节点。
2024-07-04 22:02:19 239
原创 Linux--V4L2摄像头驱动框架及UVC浅析
对于一个usb摄像头,它的内核驱动源码位于/drivers/media/usb/uvc/核心层:V4L2_dev.c文件硬件相关层: uvc_driver.c文件本篇记录基于对6.8.8.8内核下vivid-core.c文件(虚拟视频驱动程序)的分析,梳理Linux系统中vedio视频设备的驱动框架。
2024-07-04 14:50:07 1359
原创 235、二叉搜索树的最近公共祖先
重点在return上,满足条件进入左子树递归时,就只会一直沿着左边递归,有结果了就直接结束函数返回或者满足条件进入了向右方向的递归,总之,递归了一条线然后就返回。中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(例如,给定如下二叉搜索树: root = [6,2,8,0,4,7,9,null,null,3,5]本题就是标准的搜索一条边的写法,遇到递归函数的返回值,如果不为空,立刻返回。
2024-07-03 22:28:45 232
原创 Linux--平台设备、平台驱动框架的注册源码分析
设备树dts文件中定义了设备节点,描述了硬件信息,比如寄存器信息,引脚信息等,内核将从设备树中解析得到的platform_device注册到平台总线中。具体设备树在内核中的编译流程可以看。
2024-07-03 21:07:45 928
原创 Linux--V4L2应用程序开发(二)改变亮度
创建一个新线程用来控制亮度,线程通过读取用户输入来增加或减少亮度值,并使用ioctl函数将新亮度值设置到视频设备。
2024-07-02 16:10:23 344
原创 501、二叉搜索树中的众数
所以其实不用遍历两遍:先遍历一遍找到长度最大的,再遍历一遍符合把这个长度val输出。先设立一个maxCount值,并从一开始就将符合的值放进去,之后动态的改变maxCount,当遍历得到的count比现在的maxcount更大时,就更新maxcount,并且把之前放进reslut的值都清空,把新的放进去。要点:重点在单层逻辑的处理中,因为是搜索树,所以按照中序遍历的话节点的值是递增的,所以形象化的可以将二叉树想成一段一段递增的数列,要找到众数,就是找到哪一段或几段是最长的。,找出并返回 BST 中的所有。
2024-07-01 22:24:32 405
原创 Linux--V4L2应用程序开发(二)获取数据
ioctl VIDIOC_REQBUFS:申请buffer,APP可以申请很多个buffer,但是驱动程序不一定能申请到ioctl VIDIOC_QUERYBUF和mmap:查询buffer信息、映射如果申请到了N个buffer,这个ioctl就应该执行N次执行mmap后,APP就可以直接读写这些bufferioctl VIDIOC_QBUF:把buffer放入"空闲链表"如果申请到了N个buffer,这个ioctl就应该执行N次ioctl VIDIOC_STREAMON:启动摄像头。
2024-06-28 16:20:16 803
原创 617、合并二叉树
想象一下,当你将其中一棵覆盖到另一棵之上时,两棵树上的一些节点将会重叠(而另一些不会)。你需要将这两棵树合并成一棵新二叉树。合并的规则是:如果两个节点重叠,那么将这两个节点的值相加作为合并后节点的新值;要求合并从根节点开始,那么就选择前序遍历,在tree1的基础上将tree1的节点重新修改。null 的节点将直接作为新二叉树的节点。合并过程必须从两个树的根节点开始。返回合并后的二叉树。
2024-06-26 19:30:32 175
原创 Linux--V4L2应用程序开发(一)数据采集及问题
Video for Linux two(Video4Linux2)简称V4L2,是V4L的改进版。(Video4Linux2)是 Linux 内核中用于捕获视频数据的框架和 API。它提供了一套标准化的接口,方便开发者与各种视频硬件设备进行交互,并支持丰富的视频格式和功能。通过使用 V4L2,开发者可以构建高效的视频捕获和处理应用程序。方式(mmap)、方式(read)和。内存映射的方式采集速度较快,一般用于连续视频数据的采集,实际工作中的应用概率更高;
2024-06-24 16:45:48 1452
原创 106、从中序与后序遍历序列构造二叉树
题解:要充分理解中序和后序的概念,后序的最后一个值就是根节点的值,由此找到根节点,再根据这个信息去分割中序数组,可以将中序数组分割为左中序和右中序,分割完成后左中序、右中序数组的大小就确定了。用这个大小也就可以去分割后序数组(注意是将后序最后一个元素去掉后分割,也就是将根节点剔除),同样后序数组也可以分割为左后序,右后序。这样将左中序、左后序组合,右中序,右后序组合进行递归,每次递归返回一个root节点,也就是最后会返回二叉树的根节点,完成整个二叉树的构建。是向量的构造函数,用于指定新向量的初始化方式。
2024-06-21 21:22:35 318
原创 112、路径总和
1、注意回溯是发生在遍历完一个节点后在回溯,而不是在单层递归逻辑中,否则就相当于每次递归什么都没做。2、若采用递减判断,主函数传参传入的是减去了根节点值的目标值。的路径,这条路径上所有节点值相加等于目标和。和一个表示目标和的整数。是指没有子节点的节点。
2024-06-20 22:28:29 316
原创 Linux--视频推流及问题
方案一:·mjpg-streamer,它运行在ARM板上·在手机上使用浏览器直接观看视频方案二:推流端(Fmpeg)--rtmp-->Nginx(流媒体服务器)--rtmp/httpflv/hls-->浏览器、播放器此篇文章记录方案二的具体细节。
2024-06-20 21:30:35 1336
原创 513、找二叉树左下角的值
题解:层序遍历简单,此篇记录递归法,要注意左下角的值并不一定是左叶子节点,遍历思路形象化就是按先左后右的顺序遍历每一条分支,若遍历到叶子结点,看此时深度有没有超过之前的值,超过了就记录下来节点val,若没有就开始遍历下一条分支。关于深度的计算,一种是return1+递归,一种如题中所示单层递归逻辑中depth++。
2024-06-19 21:29:39 181
原创 404、左叶子之和
在递归中,在单层递归逻辑中,开始递归前决不能用ruturn来记录获得的值,否则递归就不会开始。题解:可以采用后序递归遍历的方式,先将左右子树的左叶子节点值计算出来,最后相加。当遍历到左叶子节点的父节点时就开始处理,将左叶子节点的值记录下来。
2024-06-19 20:17:53 219
原创 音视频的编解码基础总结
日常生活中我们会遇到各种后缀的音视频文件,比如:avi,rmvb,mp4,flv,mkv等等,这些后缀名代表的其实是一种,何为封装格式?就是把视频数据和音频数据打包成一个文件的规范。仅仅靠看文件的后缀,很难能看出具体使用了什么。总的来说,不同的封装格式之间差距不大,各有优劣。
2024-06-18 15:34:50 1465
原创 Linux--(三)MQTT协议参数
QoS是的缩写,所以中文名便是服务质量。一个物联网通信中有些信息非常重要,我们需要确保这类重要信息可以准确无误的发送和接收,而有些信息则相对不那么重要,这类信息如果在传输中丢失不会影响系统的运行;QoS 便用于告诉客户端或服务器哪些信息是重要信息,需要准确无误的传输、不可丢失;哪些信息不是那么重要,即使在传输过程中丢失也无妨!MQTT设计了一套保证消息稳定传输的机制,包括消息应答、存储和重传。在这套机制下,提供了三种不同级别的 QoS),也就是MQTT协议有三种服务质量等级:⚫。
2024-06-17 16:10:39 812
原创 Linux--Mosquitto服务器
Mosquitto是一个开源的消息代理,它提供了一个服务器,用于处理发布者和订阅者之间的消息传递。它也提供了一些客户端库,可以在C,Python,Java等语言中使用,实现了MQTT (Message Queuing Telemetry Transport) 协议,以便开发人员可以在他们的应用程序中使用MQTT。MQTT是一个基于发布/订阅模型的协议,它需要一个中间的消息代理来接收发布者的消息,并将这些消息路由到合适的订阅者。Mosquito 是轻量级的,适用于从低功耗单板计算机到全服务器的所有设备。
2024-06-17 15:07:36 176
原创 110.平衡二叉树
是指该树所有节点的左右子树的深度相差不超过 1。可以采用递归遍历每一个节点,得到其高度,在判断高度时不可避免的要用到其左右子树的高度,所以可以顺便判断出左右子树的高度相差是否大于1,若大于1,则该节点不是平衡的,整个子树也就不是平衡的。其中对节点的左右子树高度递归判断有漏洞,因为在递归的单层逻辑里对左右两个方向都做了判断,所以int LeftHeight = GetHeight(cur->left);这一语句是正确的判断整个左子树的情况,而不是单线的左子树。给定一个二叉树,判断它是否是 平衡二叉树。
2024-06-15 22:54:11 205
原创 Linux--MQTT(二)通信基本原理
订阅”信息这一操作很像我们在使用微信时“关注”了某个公众号,当公众号的作者发布新的文章时,微信官方会向关注了该公众号的所有用户发送信息,告诉他们有新文章更新了,以便用户查看。而对于订阅消息的客户端来说,可通过订阅“主题”来订阅消息,这样当其它客户端或自己(当前客户端)向该主题发布消息时,MQTT 服务端就会将该主题的信息发送给该主题的订阅者(客户端)。只有在客户端订阅该主题后,服务端接收到该主题的新消息时,服务端才会将最新接收到的该主题消息推送给客户端。客户端要想接收消息,首先要订阅该消息的主题。
2024-06-15 15:15:00 961
原创 Linux--MQTT(一)简介
MQTT 5.0 在 MQTT 3.1.1 的基础上增加了许多新功能和改进,使协议更加灵活、健壮和适应现代物联网应用的需求。这些改进包括属性机制、改进的错误报告、共享订阅、会话和消息的过期间隔、用户自定义属性、流量控制、增强的订阅选项以及具体的断开原因码等。通过这些特性,MQTT 5.0 提供了更强的可扩展性和可管理性,适用于更加复杂和多样化的应用场景。
2024-06-14 23:01:46 1097 1
原创 222、求出完全二叉树的节点
的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。要充分利用二叉树的特性,也就是对遍历过程中的两种情况的处理,理解完全二叉树中满二叉树的情况,理解每次递归中+1的叠加。2)可以利用完全二叉树的性质来做,完全二叉树只有两种情况,情况一:就是满二叉树,情况二:最后一层叶子节点没有满。,求出该树的节点个数。
2024-06-11 22:21:29 382
原创 Linux信号基础
也可以把它称为软件中断。信号与硬件中断的相似之处在于能够 打断程序当前执行的正常流程,其实是在软件层次上对中断机制的一种模拟。大多数情况下,是无法预测信号达到的准确时间,所以,信号提供了一种处理异步事件的方法。总的来看,信号的目的都是用于通信的,当发生某种情况 下,通过信号将情况“告知”相应的进程,从而达到同步、通信的目的。信号由谁接收就由谁处理,当信号到达后,进程会对信号进行相应的处理,处理方式有3种。1)忽略该信号 2)捕获信号,进程收到信号后执行预先绑定好的信号处理函数。
2024-06-10 16:21:55 580
原创 94、二叉树的迭代遍历
实现对二叉树的前后序非递归遍历,然后递归返回的时候,从栈顶弹出上一次递归的各项参数,所以这就是递归为什么可以返回上一层位置的原因。所以可以用栈的方式实现遍历。
2024-06-09 23:07:44 262
原创 文件属性与目录
符号链接文件( link )类似于 Windows 系统中的快捷方式文件,是一种特殊文件,它的内容指向的是另 一个文件路径,当对符号链接文件进行操作时,系统根据情况会对这个操作转移到它指向的文件上去,而不是对它本身进行操作,譬如,读取一个符号链接文件内容时,实际上读到的是它指向的文件的内容。,链接文件可以通过这个路径找到被链接的源文件,它们之间类似于一种“主从”关系,当源文件被删除之后,软链接文件依然存在,但此时它指向的是一个无效的文件路径,这种链接文件被称为悬空链接。,当系统关机时,设备文件都会消失;
2024-06-08 10:44:07 835
原创 104、二叉树的最大深度
题解:所谓深度,就是树中某节点距离根节点的距离,如图中根节点3的深度为1,那节点7的深度为3,所谓高度,就是树中某节点距离末端叶子结点的距离,如图中7的高度为1,则节点3的高度为3,。有了这个认识,那么二叉树中的最大深度其实也就是根节点的高度。虽然知道每递归一次,高度就要+1(注意此时其实计算的是根节点的高度,因为是从递到末端节点才归来逐渐加1),要注意这个1要怎么加,要与递归相联系才能累加。是指从根节点到最远叶子节点的最长路径上的节点数。确定递归函数的参数和返回值;确定单层递归的逻辑;
2024-06-07 19:52:13 208
原创 Linux--标准IO库
从图中自上而下,1)首先应用程序调用标准I/O库函数将用户数据写入到stdio缓冲区中,stdio缓冲区是 由 stdio库所维护的用户空间缓冲区。2)针对不同的缓冲模式,当满足条件时,stdio库会调用文件I/O(系统 调用 I/O)将stdio缓冲区中缓存的数据写入到内核缓冲区中,内核缓冲区位于内核空间。3)最终由内核向磁 盘设备发起读写操作,将内核缓冲区中的数据写入到磁盘(或者从磁盘设备读取数据到内核缓冲区)。应用程序调用库函数可以对stdio。
2024-06-07 15:51:31 1247
原创 226、翻转二叉树
题解:可以采用递归的方式进行翻转。前序递归:中->左->右 ,后序递归:左->右->中,中序递归不行,中序:左中右,当左边翻转完后,根节点再翻转,就把已经处理过的左边翻到右边,接着处理右边。,翻转这棵二叉树,并返回其根节点。函数在C++中用于交换两个变量的值。2、注意对传入参数异常情况的的判断;给你一棵二叉树的根节点。
2024-06-06 19:43:36 211
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人