自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 c++ 实现http简易服务器

1 说明1)涉及到http协议get和post的解析2)epoll的使用3)linux系统api的使用4)html相关知识后续会继续完善epoll_server.c#include "epoll_server.h"const char* get_file_type(const char* name){ char* dot; //自右向左查找"."字符,如果不存在返回null /*查找一个字符c在另一个字符串str中末次出现的位置(也就是从str的右侧开始查找字符c首次出现的位置)

2020-05-21 19:01:22 1755 2

原创 力扣刷题总结之双指针

双指针思想双指针,指的是在遍历对象的过程中,不是普通的使用单个指针进行访问,而是使用两个相同方向(快慢指针)或者相反方向(对撞指针)的指针进行扫描,从而达到相应的目的 。双指针是很多算法的基础,如归并排序、滑动窗口、字符匹配(左右括号匹配)等。滑动窗口即维持一段区间。在很多情况下,双指针能帮助我们找到空间或是时间复杂度更低的解。比单个指针来回移动的效率从o(n2)提高到o(n)。算法框架...

2020-04-21 08:38:01 532

原创 力扣刷题总结之回溯

回溯算法思想解决⼀个回溯问题,实际上就是⼀个决策树的遍历过程。你只需要思考 3 个问题:1、路径:也就是已经做出的选择。2、选择列表:也就是你当前可以做的选择。3、结束条件:也就是到达决策树底层,⽆法再做选择的条件。如果你不理解这三个词语的解释,没关系,我们后⾯会⽤「全排列」和「N皇后问题」这两个经典的回溯算法问题来帮你理解这些词语是什么意思,现在你先留着印象。代码⽅⾯,回溯算法的框架...

2020-04-20 12:26:30 562

原创 力扣刷题总结之滑动窗口思想

滑动窗口算法通用思想:什么是滑动窗口?其实就是一个队列,比如例题中的 abcabcbb,进入这个队列(窗口)为 abc 满足题目要求,当再进入 a,队列变成了 abca,这时候不满足要求。所以,我们要移动这个队列!如何移动?我们只要把队列的左边的元素移出就行了,直到满足题目要求!一直维持这样的队列,找出队列出现最长的长度时候,求出解!滑动窗口算法的思路是这样:我们在字符串 S 中使用...

2020-04-20 10:55:00 374

原创 力扣刷题总结之BFS

BFS基本思想虽然题目千变万化,但是考察点永远是那几个。本题给出了一个场景:求 每个 1 到 0 的最短的曼哈顿距离。其中曼哈顿距离就是只能沿着横、竖到达另外一个点走的步数。在一个图中,能从一个点出发求这种最短距离的方法很容易想到就是 BFS,BFS 的名称是广度优先遍历,即把周围这一圈搜索完成之后,再搜索下一圈,是慢慢扩大搜索范围的。图左边是BFS,按照层进行搜索;图右边是 DFS,先一路...

2020-04-20 10:52:48 815

原创 OpenCV学习实践---人脸识别

1 绪论opencv支持3种人脸识别的算法,分别是:Eigen Faces PCA(特征脸方法)Fisher Faces LDA(线性判别分析)Local Binary Pattern Histograms(LBP 局部二值模式直方图)2 原理介绍2.1 EigenFaces原理简介Eigenfaces就是特征脸的意思,是一种从主成分分析(Principal Comp...

2020-03-24 09:49:14 1659

原创 OpenCV特征提取与检测(二)

1 SURF特征检测1.1 绪论SURF(SpeededUp Robust Features)加速版的具体鲁棒性的特征。Bay在2006年首次提出了,SURF是尺度不变特征变换算法(SIFT算法)的加速版。一般来说,标准的SURF算子比SIFT算子快了好几倍。并且在多幅图片下具有更好的稳定性。SURF最大的特征在于采用了harr特征以及积分图像的概念。大大加快了程序的运行时间。SURF可以用于...

2020-03-23 11:03:27 778

原创 OpenCV特征提取与检测(一)

1 Harris角点检测1.1 绪论角点通常被定义为两条边的交点,或者说,角点的局部邻域应该具有两个不同区域的不同方向的边界。角点检测(Corner Detection)是计算机视觉系统中获取图像特征的一种方法,广泛应用于运动检测、图像匹配、视频跟踪、三维重建和目标识别等,也可称为特征点检测。它们在图像中可以轻易定位,同时它们在人造物体中场景中,如门窗,桌子等中随处可见。因为角点位于两条边缘...

2020-03-14 16:46:50 1012

原创 OpenCV基本函数与原理(五)

1模板匹配1.1绪论模板匹配就是在整个图像区域发现与给定子图像匹配的小块区域。所以模板匹配首先需要一个模板图像T(给定的子图像)。另外需要一个待检测的图像-源图像S。工作方法,在带检测图像上,从左到右,从上向下计算模板图像与重叠子图像的匹配度,匹配程度越大,两者相同的可能性越大。模板匹配是一种最原始、最基本的模式识别方法,研究某一特定对象物的图案位于图像的什么地方,进而识别对象物,这就...

2020-03-12 11:58:50 764

原创 2020腾讯实习生客户端三轮面经

1基本情况介绍于19年12月份投递腾讯实习生,在20年3月9号收到面试电话通知,上午11点左右电话通知,预约当天15点左右面试。面试整体难度不大,但由于本人最近在学习linux内核驱动、OpenCV等知识,加上今年特殊情况,在家里呆的时间过长,有点懈怠,基本算是凉经。坚持本心,方得始终,加油,一定要把握好每一次的机会。(毕竟半路出家)2基本问题介绍很难受,问了很多剑指Offer上面的编程题...

2020-03-10 22:25:20 1725 1

原创 OpenCV基本函数与原理(四)

1 霍夫变换霍夫变换是一个特征提取技术。其可用于隔离图像中特定形状的特征的技术,应用在图像分析、计算机视觉和数字图像处理领域。目的是通过投票程序在特定类型的形状内找到对象的不完美实例。这个投票程序是在一个参数空间中进行的,在这个参数空间中,候选对象被当作所谓的累加器空间中的局部最大值来获得,所述累加器空间由用于计算霍夫变换的算法明确地构建。最基本的霍夫变换是从黑白图像中检测直线(线段)。Houg...

2020-03-10 21:59:12 509

原创 OpenCV基本函数与原理(三)

1自定义线性滤波1.1卷积概念卷积是图像处理中一个操作,是kernel在图像的每个像素上的操作。Kernel本质上一个固定大小的矩阵数组,其中心点称为锚点(anchor point)卷积如何工作:把kernel放到像素数组之上,求锚点周围覆盖的像素乘积之和(包括锚点),用来替换锚点覆盖下像素点值称为卷积处理。数学表达如下:例子:Sum = 8x1+6x1+6x1+2x1+8x1...

2020-03-09 21:58:34 406

原创 OpenCV基本函数与原理(二)

1形态学操作图像形态学操作 :基于形状的一系列图像处理操作的合集,主要是基于集合论基础上的形态学数学。形态学的应用:消除噪声、边界提取、区域填充、连通分量提取、凸壳、细化、粗化等;分割出独立的图像元素,或者图像中相邻的元素;求取图像中明显的极大值区域和极小值区域;求取图像梯度。形态学图像处理的基本运算有:膨胀、腐蚀、开操作和闭操作,击中与击不中变换,TOP-HAT变换,黑帽变换等 。在讲各...

2020-03-08 12:13:05 423

原创 OpenCV基本函数与原理(一)

1 加载、显示、修改、保存图像1.1加载图像(cv::imread)函数原型:Mat imread(const String& filename,int flags = IMREAD_COLOR);//返回Mat对象imread功能是加载图像文件成为一个Mat对象,其中第一个参数表示图像文件名称;第二个参数,表示加载的图像是什么类型,支持常见的三个参数值等待: IMREAD_U...

2020-03-07 21:57:17 995

原创 Linux调试--使用gdb和gdbserver

1.gdb和gdbserver调试原理通过linux虚拟机里的gdb,来向开发板里的gdbserver发送命令,比如设置断点,运行setp等,然后开发板上的gdbserver收到命令后,便会执行应用程序做相应的动作,来实现调试的功能和之前学的裸板GDB调试 一样,只不过之前学的是在win下的,本次是在linux里的gdb1.1同样,它们都会需要一个带调试信息的编译文件.通过Makefile...

2020-03-07 13:40:58 611

原创 Linux驱动调试---根据oop定位错误代码

1当驱动有误时,比如,访问的内存地址是非法的,便会打印一大串的oops出来1.1以LED驱动为例将open()函数里的ioremap()屏蔽掉,直接使用物理地址的GPIOF,如下图所示:1.2然后编译装载26th_segmentfault并执行测试程序后,内核便打印了oops出来,如下图所示:2.接下来,我们便来分析oops:Unable to handle kernel pagin...

2020-03-06 13:02:34 838

原创 通用Makefile编写

1框架1)顶层目录的Makefile2)顶层目录的Makefile.build3)各级子目录的Makefile2概述1.各级子目录的Makefile:它最简单,形式如下:obj-y += file.oobj-y += subdir/"obj-y += file.o"表示把当前目录下的file.c编进程序里,"obj-y += subdir/"表示要进入subdir这个子目录下去...

2020-03-04 11:36:24 282

原创 Linux程序调试--printk

0 导读1)分析printk()函数2)使用printk()调试驱动1在驱动调试中,使用printk(),是最简单,最方便的办法当uboot的命令行里的“console=tty1”时,表示printk()输出在开发板的LCD屏上当uboot的命令行里的“console=ttySA0,115200”时,表示printk()输出在串口UART0上,波特率=115200当uboot的命令行里...

2020-03-03 12:22:11 402

原创 Linux声卡驱动

0 导读1)分析Linux中的OSS声卡系统2)移植wm9876声卡1声音三要素采样频率音频采样率是指录音设备在一秒钟内对声音信号的采样次数, 常用的采样率有:8KHz - 电话所用采样率, 对于人的说话已经足够清除22.05KHz - 无线电广播所用采样率32KHz - miniDV 数码视频、DAT所用采样率44.1KHz - 音频 CD, 也常用于 MPEG...

2020-03-02 13:37:32 2490

原创 DMA驱动详解

1. DMA介绍DMA(Direct Memory Access):即直接存储器访问, DMA 传输方式无需 CPU 直接控制传输,通过硬件为 RAM 、I/O 设备开辟一条直接传送数据的通路,能使 CPU 的效率大为提高。2.驱动编写之前,先来讲如何分配释放缓冲区、DMA相关寄存器介绍、使用DMA中断2.1在linux中,分配释放DMA缓冲区,常用以下几个函数/*该函数只禁止cac...

2020-03-01 12:33:09 3741

原创 Linux网卡驱动

1描述网卡的驱动其实很简单,它还是与硬件相关,主要是负责收发网络的数据包,它将上层协议传递下来的数据包以特定的媒介访问控制方式进行发送, 并将接收到的数据包传递给上层协议。网卡设备与字符设备和块设备不同, 网络设备并不对应于/dev目录下的文件,不过会存放在/sys/class/net目录下我们通过ls /sys/class/net/ 命令查看网卡。2Linux系统对网络设备驱动定义了4个...

2020-02-27 11:40:33 2040

原创 NOR FLASH驱动

1 分析如何写norflash驱动1.1先来回忆下之前的nandflsh驱动:nandflsh驱动会放在内核的mtd设备中,而mtd设备知道如何通过命令/地址/数据来操作nandflash,所以我们之前的nandflash驱动只实现了硬件相关的操作(构造mtd_info,nand_chip结构体、启动nand控制器等)。同样地,norflash驱动也是放在内核的mtd设备中,mtd设备也知道...

2020-02-26 12:03:09 447

原创 NAND FLASH驱动分析

1本节使用的nand flash的命令如下:1.1我们以上图的read id(读ID)为例,它的时序图如下:首先需要使能CE片选1)使能CLE2)发送0X90命令,并发出WE写脉冲3)复位CLE,然后使能ALE4)发送0X00地址,并发出WE写脉冲5)设CLE和ALE为低电平6)while判断nRE(读使能)是否为低电平7)读出8个I/O的数据,并发出RE上升沿脉冲1.2n...

2020-02-24 20:35:19 367

原创 块设备驱动

1 块设备介绍块设备是I/O设备的一种,以数据流的形式进行数据传输,是将信息存储在固定大小的块中,每个块都有自己的地址,还可以在设备的任意位置读取一定长度的数据(因为使用了内存);而字符设备是以字节为单位进行数据传输,并且不需要涉及内存相关的内容,所以不可以读写任意位置上的数据,只能顺序读写当前数据。块设备的主要特点是是,CPU和总线读写数据所花的时间与磁盘硬件的速度不匹配,块设备的平均访问时...

2020-01-10 15:48:34 136

原创 tslib安装与测试

1.下载 tslib-1.4.tar.gz压缩包2.然后在ubuntu编译:tar xzf tslib-1.4.tar.gz cd tslib ./autogen.sh       mkdir tmp          //创建安装目录 echo "ac_cv_func_malloc_0_nonnull=yes" >arm-linux.cache ...

2020-01-09 22:01:58 504

转载 USB四大描述符

1 层次介绍在USB描述符中,从上到下分为四个层次:USB设备描述符(usb_device_descriptor)、USB配置描述符(usb_config_descriptor)、USB接口描述符(usb_interface_descriptor)、USB端点描述符(usb_endpoint_descriptor)、一个设置描述符可以有多个配置描述符;一个配置描述符可以有多个接口描述...

2020-01-09 21:12:49 475

原创 电阻触摸屏驱动

1 电阻触摸屏介绍      如下图所示,该开发板使用的是4线触摸屏,方框标记的引脚是专门用来接收模拟输入信号。  引脚说明:  YM: (Y Minus)触摸屏的Y坐标的负线,也可以用Y -表示  YP : (Y Power)触摸屏的Y坐标的正线, 也可以用Y+表示  XM: (Y Minus)触摸屏的Y坐标的负线, 也可以...

2020-01-09 20:56:54 2676

原创 lcd 驱动

1 LCD显示原理LCD驱动器:LCD驱动器一般与LCD面板集成在一起,面板需要一定的模拟电信号来控制液晶分子,LCD驱动器芯片负责给面板提供控制液晶分子的模拟电信号,驱动器的控制信号(数字信号)来自于LCD控制器的提供的接口。  LCD控制器:LCD控制器集成在SoC内部,它负责通过数字接口向外部的LCD驱动器提供要显示的像素数字信号。它必须按照一定的时序和LCD驱动器通信,LCD控制器受...

2020-01-08 19:19:04 1315

原创 输入子系统基本实例

功能接口分配输入设备函数struct input_dev *input_allocate_device(void)注册输入设备函数int input_register_device(struct input_dev *dev)注销输入设备函数void input_unregister_device(struct input_dev *dev)事件支持(初...

2020-01-08 13:04:22 205

转载 输入子系统

1.输入子系统简介同样的输入子系统也需要输入驱动的框架,好来辨认应用程序要打开的是哪个输入驱动比如: 鼠标、键盘、游戏手柄等等这些都属于输入设备;这些输入设备的驱动都是通过输入子系统来实现的(当然,这些设备也依赖于usb子系统)这些输入设备都各有不同,那么输入子系统也就只能实现他们的共性,差异性则由设备驱动来实现。差异性又体现在哪里?最直观的就表现在这些设备功能上的不同了。对于我们写驱动的...

2020-01-06 21:51:14 117

原创 驱动函数的基本框架

1 、驱动程序和应用层的联系1.1 从应用层看1)首先APP斗调用Open(“dev/xxx”,O_REWR)打开设备文件后,会得到此设备文件的属性,知道属性中的“设备类型”和“主设备号”。2)然后VFS层通过“设备类型”(如字符设备类型)去内核中的“chrdev”这个数组。在通过APP得到的“主设备号”以此为索引从内核的"chrdev"数组中知道相应的“file_operation”结构。...

2020-01-06 17:20:40 1018

原创 直接通过NFS启动内核文件系统

NFS启动方式1、从flash上启动根文件系统,在使用命令挂接nfs比如 :我的开发板ip为192.168.1.17,linux IP为192.168.1.128使用命令:mount -t nfs -o nolock 192.168.1.128:/work/nfs_root /mnt相关参数说明:-t vfstype 指定文件系统的类型,通常不必指定,mount 会自动选择正确的类...

2020-01-03 17:37:06 921

原创 Nand Flash基本操作

Nand Flash操作原理 NAND FLASH原理图由于NAND FLASH是一个存储芯片,那么: 这样的操作很合理"读地址A的数据,把数据B写到地址A"。问1. 原理图上NAND FLASH和S3C2440之间只有数据线,怎么传输地址?答1.在DATA0~DATA7上既传输数据,又传输地址当ALE为高电平时传输的是地址,那么在数据线上是不是只传输数据和只传输地址呢?我们...

2019-12-28 15:35:25 510

转载 深入理解虚拟内存机制

转载于https://www.jianshu.com/p/13e337312651,文章写得非常好,值得借鉴概述现代操作系统了提供了一种对主存的抽象概念,叫做虚拟内存。它为每个进程提供了一个非常大的,一致的和私有的地址空间。虚拟内存提供了以下的三个关键能力:1、它将主存看成是一个存储在磁盘空间上的地址空间的高速缓存,主存中只保存活动区域,并根据需要在磁盘和主存之间来回传送数据。2、它为内...

2019-12-23 22:20:23 141

原创 UART基本知识

UART串口协议UART(Uinversal Asynchronous Receive/Transmitter):串行数据总线,用于异步通信,也叫通用异步收发传输器。该总线双向通信可以实现双工传输和接收。在嵌入式设计中,UART用于主机与辅助设备通信,如汽车音响与外接AP之间的通信,与PC机通信包括与监控调试器和其它器件,如EEPROM通信。1、基本工作模式串口因为结构简单,稳定可靠,广受欢...

2019-12-23 16:50:07 2542

原创 ARM处理器工作状态和模式

两种工作状态1、ARM状态:处理器执行32位对齐的ARM指令;2、Thumb状态:处理器执行16位对齐的ARM指令。它们之间的区别在于:Thumb指令集不是完整的指令集,它是ARM指令集的子集。但是Thumb指令具有更高的代码密度,即占用存储空间小,仅为ARM代码规格的65%,但其性能却下降的很少。所以,Thumb指令集使ARM处理器能应用到有限的存储带宽,并且,代码密度要求很高的嵌入式系统...

2019-12-15 19:41:44 2526

原创 共享内存

采用共享内存通信的一个显而易见的好处是效率高,因为进程可以直接读写内存,而不需要任何数据的拷贝。对于像管道和消息队列等通信方式,则需要在内核和用户空间进行四次的数据拷贝,而共享内存则只拷贝两次数据[1]:一次从输入文件到共享内存区,另一次从共享内存区到输出文件。实际上,进程之间在共享内存时,并不总是读写少量数据后就解除映射,有新的通信时,再重新建立共享内存区域。而是保持共享区域,直到通信完毕为止,...

2019-12-13 16:37:27 126

原创 存储器总结

关于SRAM、DRAM、SDRAM等这样的词条,比较容易混淆,通过查找资料做个总结。首先看下面这张图:RAM(random access memory)随机存储器。存储单元的内容可按需随意取出或存入,且存取的速度与存储单元的位置无关的存储器。这种存储器在断电时将丢失其存储内容,故主要用于存储短时间使用的程序。一、根据工作原理的不同,随机存储器又分为DRAM(Dynamic Random Ac...

2019-12-13 16:01:44 373

原创 TCP三次握手的原因

正常情况下,TCP两次握手就可以彼此建立连接,为什么还要第三次连接?不是多此一举吗?一句话说,三次握手主要是为了防止已经失效的连接请求报文突然又送到了服务器,从而产生了错误。详细分析:如果使用两次握手连接,假设存在这样的一种情景:客服端发送可第一个连接请求并且没有丢失,只是因为在网络节点中滞留的时间太长了。由于TCP迟迟没有收到确认报文,即达到了超时重传的时间,以为服务器没有收到,此时重新向...

2019-12-10 22:48:18 218

转载 ARM 程序计数器 R15

寄存器 R15 为程序计数器(PC),它指向 正在取指的地址。可以认为它是一个通用寄存器,但是对于它的使用有许多与指令相关的限制或特殊情况。ARM9 正常操作时,从 R15 读取的值是处理器 正在取指的地址,即:R15(PC)= 当前正在执行指令的地址 + 81注:8 是指 8 个字节,是两条 ARM 指令的长度。ARM 是 3 级流水线:取指,译码,执行。由于 ARM7 指令总是以...

2019-12-10 17:12:19 912

学习目录收藏.rar

学习记录

2020-08-19

空空如也

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

TA关注的人

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