- 博客(60)
- 资源 (5)
- 收藏
- 关注
原创 地址换算
当存储器的容量为2MB时,若首地址的十六进制表示为:000000H,则末地址的十六进制表示为存储器容量为2MB,寻址范围是2*2^10*2^10=2097152d=200000h,地址范围000000h~1FFFFFh,因此末地址为1FFFFFh。
2021-05-26 14:03:27 5600
原创 V4L2驱动框架个人总结心得
一、介绍:V4L2全名为VideoFor Linux 2,它是针对Linux系统的视频设备处理架构。视频设备主要包括输入设备(摄像头)及输出设备(显示设备)。V4L2架构设计之初是只针对视频设备的,那时的V4L2被限制只能在structvideo_device结构体里面创建,并且用video_buf控制视频缓存。但随着硬件的变化也越来越复杂,现在大部分设备里面包含了多个子设备IC,比较常见的子设备如编解码器、传感器、摄像头控制器等。通常这些IC一般通过i2c总线连接到主板,这些设备都统称为su...
2021-03-17 15:48:11 1014
原创 关于队列出队入队速度的分析
每隔(t总=t0+t1+t2)时间入队,每隔t3时间出队。如果t总>t3,则系统启动后,队列里会积累几帧数据,此时出队,拿到数据会比价快,但是很快队列会变空,再去拿数据需要等待,等有帧入队了才能拿到数据。如果上次拿数据的时候队列是空的,那么等待一段时间后有帧入队了,立刻出队,经过t3再去拿,此时队列里还没有数据,需要等待(t总-t1)时间,这是等待情况中等的最长时间。如果去拿的时...
2020-03-19 16:17:36 1361
原创 CMOS Sensor基础知识
CMOS Sensor基础知识曝光时间以行长为单位; PCLK以Hz为单位;行长以周期数为单位,帧长以行长数为单位;其中周期数就是频率T 周期以ms为单位;f 频率以Hz为单位;f = 1 / T;Vsync = Dummy Line = VTotal = VTS= V_Size + V_Blank // 帧长; 不占用曝光时间,但是会影响帧率(FPS)Hsync =...
2019-12-16 20:19:01 2247
原创 I2C总线中8(7)bit和10bit介绍与区别
经常有用人问我,使用USB2XXX的USB2IIC功能的时候,从机地址应该怎么传递的问题,这个问题的根源在于不同的I2C从机厂商采用了不同的I2C总线地址约定,导致在说I2C总线的时候总是容易搞混,本文主要针对8位和10位I2C总线地址进行详细的说明。 8位地址 一些厂商在提供从机地址的时候说的是包含了读写位的8bit地址,比如他说写地址为0x92,读地址为0x93,如下图所...
2019-11-07 10:32:45 8370
原创 BMP图像读取数据
我们在使用Windows的画图软件,画一张图,然后保存成24位位图BMP图像后,要对这幅图像进行一系列的格式转换之前,需要先将BMP里的数据提取出来,然后再保存成BGR888的图像。有两处细节要注意:第一,我们直接保存成BMP图片,不知道为什么读取BMP信息很多字段为0,所以我们要自己手动设置;第二,读取出的数据我们以为是bgr格式存放的,其实不对,其实是grb存放的,虽然我也不知道为...
2019-11-04 11:50:16 1298
原创 网络学习总结
网络学习涉及到很多,如TCP/IP,socket, 等等这里只保存平时学习的网址:socket:http://c.biancheng.net/view/2359.html粘包问题:https://www.cnblogs.com/songzhixue/articles/10745418.html鸟哥Linux 服务器架设篇https://blog.csdn....
2019-10-25 09:37:41 247
原创 Binning模式缩小分辨率
示例:640*480 NV12图像,提取Y部分数据,将Y数据做降采样,隔行隔列取值,保存成文件。#include <stdio.h>#include <string.h>#define WIDTH_ORIGIN (640)#define HEIGHT_ORIGIN (480)#define WIDTH_BINNING (320)#define HEIG...
2019-10-14 10:01:31 1300
原创 抠矩形图程序
根据抠图位置的起始点坐标和长宽进行矩形抠图。示例代码:原图大小为640*480, 每个像素占16bit。起始点坐标(234,124),抠图长宽分别为238, 282.#include <stdio.h>#include <string.h>#define WIDTH_ORIGIN (640)#define HEIGHT_ORIGIN (480)#...
2019-10-11 16:15:53 258
原创 图像格式互转
一:灰度图转YUV由于工作需要,经常接触12bit灰度数据,因此在这里将数据的处理记录下来。经常接触的是sensor输出的12bit灰度数据,按照需求经常会将这份数据转换成其他格式,如16bit灰度数据(高4bit为0),YUV数据等,其中在转成YUV之前需要先把每个piel的12bit数据变成8bit,即将低4bit舍弃,然后补齐UV数据。以下代码为将16bit的灰度数据转成YUV格...
2019-09-20 09:42:24 1692
转载 亮度、对比度与饱和度
亮度是指图片的明暗程度,对比度是指图片明暗的差异,饱和度则是图片颜色的饱满程度。图片文件一般是RGB格式,当然也有的是YCBR格式。前者主要用于显示,后者则主要用于印刷。当然世上没有绝对的事情,也有人喜欢在电脑或手机上看YCBR格式的,至于印刷嘛,如果用RGB格式则可能会偏色。RGB是三种颜色的缩写,其中R是指红色(Red)、G是指绿色(Green),B是指蓝色(Blue)。现代的时候颜色...
2019-09-04 09:49:35 10184
原创 查看动/静态库包含的函数
1. 命令 nm -D,如下所示: nm -D liblistdevs.so > listdevs.txt //列出liblistdevs.so 的函数 输出到 listdevs.txt 文本文件里面解析:例:解析得到的是 00000024 T cleanup_before_linux2.查看静态库(1). 查看文件:ar -t *....
2019-08-08 20:42:38 4543
原创 YUV格式
1:YUV420(1):I420: YYYYYYYY UU VV =>YUV420P(2):YV12 YYYYYYYY VV UU =>YUV420P(3):NV12 YYYYYYYY UVUV =>YUV420SP (dxva 输出 NV12)(4):NV21 YYYYYYYY VUVU =>YUV4...
2019-05-25 15:24:36 220
转载 Linux Gadget驱动分析
以下四篇文章需要互相补充,可以理解的较为详细。http://blog.sina.com.cn/s/blog_1519163d30102x2le.htmlhttps://www.cnblogs.com/haoxing990/p/8799133.htmlhttps://www.cnblogs.com/fengeryi/p/3372717.htmlhttps://www.cnblogs....
2019-05-19 15:32:20 643
原创 并发——单核cpu串行与并发的选择
1.下面所有内容均在单核单cpu情况下讨论。不考虑I/O,执行任务相同的情况下,并发要比串行多消耗上下文切换的时间,因此单线程比多线程要快。上面这种情形(没有I/O)或者I/O较少的情况,我们称之为计算密集型(CPU-bound)任务,这种任务适合单线程。与计算密集型任务相对的,就是IO密集型(I/O bound)任务。由于存在I/O阻塞的问题,线程在执行过程中需要等待。比如我们要获取10...
2019-05-14 08:28:29 1552
原创 Linux文件系统与设备驱动
以下内容取自《Linux设备驱动开发详解:基于最新的Linux4.0内核》一书中,觉得讲的比较好,就在这里记录下。5.2.2 Linux文件系统与设备驱动图5.1所示为Linux中虚拟文件系统、 磁盘/Flash文件系统及一般的设备文件与设备驱动程序之间的关系。应用程序和VFS之间的接口是系统调用, 而VFS与文件系统以及设备文件之间的接口是file_operations结构体成员函数...
2019-04-21 12:00:54 826
原创 Linux重启
一.用c语言在linux怎样调用reboot函数重启系统可以直接调用reboot函数如reboot(0);也可以通过system接口 调用system("reboot");二.linux驱动代码里面完成shutdown或者reboot的调用方法1. reboot:#include <linux/reboot.h>kernel_restart(NULL)...
2019-04-18 17:05:14 1837 1
原创 多线程及多进程的选择
我的理解是进程是指在系统中正在运行的一个应用程序;程序一旦运行就是进程,或者更专业化来说:进程是指程序执行时的一个实例,线程是进程的一个实体。进程——资源分配的最小单位,线程——程序执行的最小单位。线程进程的区别体现在几个方面:0:因为进程拥有独立的堆栈空间和数据段,所以每当启动一个新的进程必须分配给它独立的地址空间,建立众多的数据表来维护它的代码段、堆栈段和数据段,这对于多进程来说十...
2019-04-07 11:09:40 369
原创 Linux 的并发与竞态
首先先统计下Linux应用程序下进程间、线程间的同步与互斥方式:进程间:无名管道(pipe)及有名管道(fifo);信号(signal);消息队列(message queue);共享内存(shared memory);信号量(semaphore);套接字(socket)。线程间:互斥锁(mutex);信号量(sem);接着说下Linux内核中...
2019-02-22 16:23:05 295
原创 二维数组指针
Matrix][3][10]Matrix:二维数组名,指向二维数组的第一个值。也就是 指向第一个子数组的指针,第一个子数组的地址。*matrix: 第一个子数组,也就是第一个子数组的第一个数的地址Matrix+1:指向第二个子数组的指针,第二个子数组的地址。*(matrix+1):第二个子数组,也是第二个子数组的第一个数的地址*(matrix+1)+5:第二个子数组的第六个数的...
2019-02-21 13:28:21 227
原创 RingBuffer
ringbuffer.h#ifndef __RINGBUFFER_H__#define __RINGBUFFER_H__#if defined(__cplusplus)extern "C" {#endif#define BUFFER_OVERFLOW (-1)typedef struct { unsigned char *buffer; unsigned i...
2019-02-13 08:48:47 286
原创 同步/异步&&阻塞/非阻塞
1、概念剖析相信很多从事linux后台开发工作的都接触过同步&异步、阻塞&非阻塞这样的概念,也相信都曾经产生过误解,比如认为同步就是阻塞、异步就是非阻塞,下面我们先剖析下这几个概念分别是什么含义。同步:所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。也就是必须一件一件事做,等前一件做完了才能做下一件事。例如普通B/S模式(同步):提交请求-&g...
2019-01-14 17:35:37 220
原创 我对GPIO的的理解
首先,要先说下GPIO和引脚的区别,整理下网上提出的问题和答案。GPIO的英文全称General-Purpose Input /Output Ports,中文意思是通用I/O端口。在单片机上,单片机有很多管脚(PIN)除了一些特殊的PIN,比如电源,比如地线,晶振接线等等,其他很多都可以任意定义成两种功能中的一种:1. 模块的管脚,2. GPIO当定义为模块管脚时,PIN起模块中定义...
2018-12-28 11:28:00 2402
原创 Linux分区记录
命令:cat /proc/mtddev: size erasesize namemtd0: 00007000 00010000 "vendor"mtd1: 00030000 00010000 "IDBlock"mtd2: 00600000 00010000 "kernel"mtd3: 0090000...
2018-11-05 15:24:39 690
原创 机器学习整理
深度学习分为两部分工作:模型训练和模型推理。训练和推理可以不在同一平台上进行。模型取决于深度学习的框架,目前主流的框架有Caffe和Tensorflow,而每种框架又可以分的很细,例如Caffe可以分为googlenet,squeezenet,Alexnet三种框架,网上资料很多。 ...
2018-10-31 13:52:01 187
原创 C++和C混合编程
最近经常看到头文件中有#ifdef __cplusplusextern "C" {#endif.......#ifdef __cplusplus}#endif这样的语句,一直搞不清楚是什么意思,今天终于闹明白了。1.这种写法的由来C++比C晚出现,C++代码如果能够调用C语言的代码,那么会更好的利用现有的成果,但是事实上C++代码是无法直接调用C代...
2018-08-23 19:47:00 578
原创 如何使用GCC生成动态库和静态库
根据链接时期的不同,库又有静态库和动态库之分。静态库是在链接阶段被链接的,所以生成的可执行文件就不受库的影响,即使库被删除,程序依然可以成 功运行。而动态库是在程序执行的时候被链接的。程序执行完,库仍需保留在系统上,以供程序运行时调用。链接静态库从某种意义上来说是一种复制粘贴,被链接 后库就直接嵌入可执行程序中了,这样系统空间有很大的浪费,而且一旦发现系统中有bug,就必须一一把链接该库的程序找出...
2018-08-23 13:56:58 246
原创 Linux下I2C设备通信
刚入门Linux设备I2C通信,感觉很迷惑,不管是看书,看视频,还是网上查,都是千篇一律的资料,抄来抄去,还都是过时的,很TM 恶心。比如说我现在在做的,在应用程序中去读取EEPROM的数据,问题到现在还没解决(2018/8/1:现在已经解决了),但是至少已经有了一点点的认识,虽然使用的是网上说的方法,但是第一,方法太多太杂,第二,说的不清不楚。下面先说下自己的一些心得吧,后续有了再加进来...
2018-07-30 16:57:00 2059 1
转载 转:在内核里写i2c client 驱动的两种方式
原文位置:https://www.cnblogs.com/simonshi/archive/2011/02/24/1963426.html在内核里写i2c client 驱动的两种方式前文介 绍了利用/dev/i2c-0在应用层完成对i2c设备的操作,但很多时候我们还是习惯为i2c设备在内核层编写驱动程序。目前内核支持两种编写i2c驱 动程序的方式。下面分别介绍这两种方式的实现。这里分别称...
2018-07-24 09:28:34 506
原创 Buffer分配
一.char buf[128];memset(buf,0,sizeof(buf));strcpy(buf,"Welcome to server");二.char buf[128]="Hello Server";
2018-07-10 16:21:39 710
转载 ubuntu14.04+opencv 3.0+python2.7安装及测试
ubuntu14.04+opencv 3.0+python2.7安装及测试本文记录了ubuntu下使用源码手动安装opencv的过程。步骤来自opencv官网此外记录了在python中安装及载入opencv的方法。1、安装opencv所需的库(编译器、必须库、可选库)转载请说明http://www.cnblogs.com/llxrl/p/4471831.htmlGCC 4.4.x or later...
2018-06-27 21:30:32 358
原创 外链接 内链接 无链接
编写多文件的程序时,编译器对于每个有名字的变量和函数都有链接模式的区别,分别是外链接(external) 内链接(internal) 无链接(noneternal),具体使用如下:A.cextern temp_b; //外链接模式extern temp_c;static temp_d //内链接模式,只在A.c中有效B.cint temp_b static temp_d //内链接模...
2018-06-25 09:30:13 316
原创 gcc g++ 学习
一.编译的时候(此时main.cpp头文件是#include "Person.h")g++ main.cpp ../Person/Person.cpp -o main -I../Person解析:../Person/Person.cpp 链接main.cpp的上一层文件夹Person内的Person.cpp-I../Person main.cpp中包含的Person....
2018-06-22 08:18:42 251
原创 libusb编译、测试、使用
要用到才开始学,啥都不懂,感觉好难受。最近要在ARM+Linux嵌入式端集成libusb,刚开始搞,慢慢写。首先是libusb的交叉编译和测试。交叉编译:下载libusb的源码,下载地址:https://sourceforge.net/projects/libusb/files/,下载好后解压(我是下载了两个版本,libusb-1.0.20.tar.bz2和libusb-1.0.9.tar.bz2...
2018-06-21 21:08:51 4521 4
单反相机中的焦距、焦点、调焦和对焦,到底是什么关系?_镜头.pdf
2020-03-26
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人