
认知
文章平均质量分 67
Spark!
路人
展开
-
实际项目中环形队列的应用与陷阱
目录前言代码代码讲解代码隐患讲解海思的自定义变量类型前言本篇讲解项目中队列的应用及注意点。项目为君正方案家庭安防ptz ipc的IVS模块(算法处理)。使用消息队列来管理算法获取的消息。代码/*消息数据*/typedef struct{ LUX_BASE_ALGOQUE_TYPE_EN type; /*MOVE DETECT*/ int retRoi; /*是否探测到*/ int原创 2021-09-03 13:33:16 · 576 阅读 · 0 评论 -
RTP中timestamp与帧率及时钟频率的关系
RTP timestamp是用时钟频率(clock rate)计算而来表示时间的。RTP timestamp表示每帧的时间,由于一个帧(如I帧)可能被分成多个RTP包,所以多个相同帧的RTP timestamp相等。(可以通过每帧最后一个RTP的marker标志区别帧,但最可靠的方法是查看相同RTP timestamp包为同一帧。)两帧之间RTP timestamp的增量 = 时钟频率 / 帧率前一帧的timestamp加上固定的timestamp_increase就是下一帧举例其中时钟频率可原创 2021-08-13 15:02:32 · 1897 阅读 · 0 评论 -
typora + picgo图片上传云服务器
目录gitee配置picgo配置typora配置gitee配置新建仓库使用默认配置点击设置生成新令牌并记住picgo配置下载Picgo安装后下载插件新版Picgo会自动安装nodejs,需要把它装好配置完毕测试上传成功typora配置配置完后点击验证接着将PicGo中的图片URL贴到typora中,就可以不用保存在本地了...原创 2021-08-11 17:39:44 · 240 阅读 · 0 评论 -
海思中的应用层驱动
目录为什么有应用层驱动应用层驱动介绍应用层驱动和内核驱动比较为什么有应用层驱动在音视频领域中,制作sensor的厂家有很多,sensor的型号也有很多。如果要进行替换的话,每次都需要将驱动重新编译再insmod,这样的话替换sensor就会非常麻烦。于是海思定了一套体系,可以快速替换不同的sensor应用层驱动介绍其实这个应用层驱动并不是我们常说的内核驱动,只是一个模块实现功能的一个集合,被makefile按照规则生成了一个文件叫.SO动态链接库,他本身没有驱动操作硬件的功能,而是调用内核驱动去运作原创 2021-08-01 20:38:16 · 898 阅读 · 0 评论 -
单端信号与差分信号
单端信号如图,特点就是一根信号线就可以了, 其参考的基准电压就是地,当电压大于VH就是1(高电平);小于VL就是0(低电平),为啥高低电平不是等于某个值而是大于/小于呢? 这很好理解, 输出的电压是小范围波动的,不可能低电平就是0mv, 有可能是1mv,十多mv甚至更大! 如果等于0mv才是低电平那估计全是高电平了, 而介于VL~VH为高阻态, 取决外设怎么解析, 有些硬件寄存器会表示高阻态有些表示0或者1必备条件:a. 参考地b. VH/VL阈值c. 时钟切割连续电平(连续高电平是代原创 2021-07-29 14:22:28 · 2094 阅读 · 0 评论 -
图像压缩原理
目录前言为什么要压缩压缩方法空间冗余时间冗余视觉冗余压缩方法无失真压缩有失真压缩预测编码变换编码统计编码图像压缩的要素前言之前整理过的视频编解码器工作原理消除视频冗余的方法及原理视频的压缩是基于图像压缩,本文介绍图像压缩原理为什么要压缩一张原始图像(1920x1080),如果每个像素32bit表示(RGBA),那么,图像需要的内存大小1920x1080x4 = 8294400 Byte如果考虑视频,那么带宽和存储都不够。压缩方法空间冗余一幅图像表面上各采样点的颜色之间往往存在着空间原创 2021-07-19 09:59:10 · 2128 阅读 · 0 评论 -
音视频项目架构中的通道和组(以海思为例)
目录定义GROUPCHANNEL我的理解以海思为例定义GROUPVPSS 对用户提供组( GROUP)的概念。最大可用数为 VPSS_MAX_GRP_NUM个,各芯片的最大组数目有所不同,各 GROUP 分时复用 VPSS 硬件。每个 VPSSGROUP 包含多个通道,通道数目视方案实现有所不同,具体描述请参见CHANNEL。group实际上是对VPSS硬件功能的虚拟化,即若系统里只有一个group,那么这个group实际就是VPSS;若有多个group,那么就是一会给group0用一会给group原创 2021-07-16 15:18:48 · 1679 阅读 · 0 评论 -
详解RGB数据格式
目录起源概述RGB的颜色范围常见RGB文件存储类型RGB555RGB1555RGB565RGB24格式RGB32格式其他常用单通道与多通道单通道多通道图像处理优势对比:起源RGB三原色起源于上世纪初1809年Thomas Young提出视觉的三原色学说,随后Helmholtz在1824年也提出了三原色学说:即:视网膜存在三种视锥细胞,分别含有对红、绿、蓝三种光线敏感的视色素,当一定波长的光线作用于视网膜时,以一定的比例使三种视锥细胞分别产生不同程度的兴奋,这样的信息传至大脑中枢,就产生某一种颜色的感觉。原创 2021-07-08 16:29:12 · 15480 阅读 · 1 评论 -
ubuntu搭建tftp服务器
安装工具sudo apt-get install xinetdsudo apt-get install tftp tftpdsudo apt-get install tftp-hpa tftpd-hpa编写配置文件/etc/xinetd.d/tftpvi /etc/xinetd.d/tftp文件如下,需要严格对齐service tftp{ socket_type = dgram protocol = udp原创 2021-07-01 16:13:36 · 257 阅读 · 0 评论 -
常见flash讲解——NAND、SPI、EMMC
目录存储颗粒与外部控制器常见的flash对比内置还是外接Flash使用难度flash选择总结NAND Flash被淘汰的原因EMMC的优势存储颗粒与外部控制器flash内部有一个存储颗粒,只跟flash本身功率有关。如nand、nor flash。nand flash中的存储颗粒也有技术差异,如slc、mlc。这些东西是内部封装起来的用于存储的内核,对外编程的接口还需要一个外部控制器。我们买到的flash芯片,其实是内部的flash存储颗粒+外部封装的控制器来构成的。即,对外是外部控制器,对内是原创 2021-07-01 12:22:44 · 14972 阅读 · 0 评论 -
结构体对齐与保留
目录前言正文总结前言群里聊到了结构体对齐的话题,提到一个reserve的概念有的朋友不了解,于是我再来科普一下实际上现在的编译器提供一个编译选项可以自动对齐结构体,纠结这个问题意义不大但是养成良好的代码风格很有必要正文struct A{ char c1; int i; short s; int j;}a; struct B{ int i; int j; short s; char c1;}b;a的大小是16,b的大小是12b就是对齐实际工作中,大家习惯于将逻原创 2021-06-25 10:15:53 · 473 阅读 · 0 评论 -
优秀的内存规划方法——环形缓冲区(ring buffer)
目录什么是环形缓冲区使用环形buffer的好处环形buffer的使用场景进程间通信网络IO区分缓冲区是满或者是空保持一个存储单元为空什么是环形缓冲区线性缓冲区初学者一般使用的buffer是线性的,数据依次排列依次读取,就像流水线。造成的问题就是,处理大量数据时,需要大段内存,并且需要考虑对内存的管理。频繁的内存分配不但增加系统的开销,更使得内存碎片不断增多,非常不利于程序长期运行。环形缓冲区使用一段固定长度的内存,在内存用尽后,剩余未存的数据从这段内存的起始位置开始存放。就像两个人围着一张原型原创 2021-06-22 16:33:22 · 17931 阅读 · 2 评论 -
uclibc和glibc的定义与区别
目录定义GlibcuClibcEGLIBC联系与区别定义Glibcglibc = GNU C Library是GNU项(GNU Project)目,所实现的 C语言标准库(C standard library)。目前,常见的桌面和服务器中的GNU/Linux类的系统中,都是用的这套C语言标准库。其实现了常见的C库的函数,支持很多种系统平台,功能很全,但是也相对比较臃肿和庞大。uClibc一个小型的C语言标准库,主要用于嵌入式。其最开始设计用于uClinux(注:uClinux不支持MMU)原创 2021-06-18 16:42:57 · 1922 阅读 · 0 评论 -
音视频基础认知——音视频开发常规流程
目录视频从产生到被消费的流程视频行业的商业角度分段几个疑问点总结视频从产生到被消费的流程视频和图像的区别:视频是由单帧图像以每秒x帧的速率连续组成的,单帧图像类似位图。原始视频的产生:镜头和sensor。镜头是光学透镜,将大范围内的光折射到很小的范围内。小范围的光通过sensor将光信号转为电信号(模拟信号),这个电信号(模拟信号)通过AD转换,转换为数字电信号(数字信号)。图像处理:ISP(image signal processing)。将原始视频进行调优,调整为适合人眼看的信原创 2021-06-17 19:21:01 · 1102 阅读 · 0 评论 -
getopt详解
目录getopt介绍参数与选项代码getopt介绍可以自行配置执行的选项,类似编译链接时的 -lxxx通过getopt可以自行解析运行的选项,如 ./a.out -xxx -xxx#include <unistd.h> extern char *optarg; //选项的参数指针 extern int optind, //下一次调用getopt的时,从optind存储的位置处重新开始检查选项。 extern int opterr, //原创 2021-06-03 15:37:41 · 686 阅读 · 1 评论 -
malloc是否需要强转
结论先上结论malloc的返回值是void*型,可以自动转换老版本的编译器不包含stdlib会默认给未声明的函数int类型返回值,这时需要强转void*的自动转换#include <stdio.h>int main(void){ int n = 1; int *pint = &n; void *pvoid = pint; int *pint2 = pvoid; return 0;}说明void * 能 够和其他类型自动转换原创 2021-05-29 08:47:52 · 383 阅读 · 0 评论 -
dos文件格式与unix文件格式
目录前言结论检验区别如何区分通过notpad打开比对字符数vim中查看转换方法前言今天在项目的配置文件解析时出现错误,最终发现是由于在windows下创建文件和在linux下创建文件格式不同导致的。结论结论写在最开头dos文件换行为/r/nunix文件换行为/n检验区别wc -l -c tuya_uuid_key_dos.ini tuya_uuid_key_unix.inip08@ubuntu:~$ wc -l -c tuya_uuid_key_dos.ini tuya_uuid_ke原创 2021-05-17 13:02:07 · 958 阅读 · 0 评论 -
模块化编程的思想
今天看我们项目代码的时候发现这样一个奇怪的封装IMP_OSD_CreateGroup是君正底层SDK中的函数,LUX_OSD_CreateGroup是我们DSP层的函数为什么一样的函数,参数也一样,要换个名字?这就要涉及到模块化编程的概念:我们的程序是这样设计的模块化的设计,规定只能上层调用对应下层的API,如果TuYa要调用Ingenic的函数,那么就需要将Ingenic的API封装成LUX头,方便后期调试在这篇中也有提到:音视频DSP中的IVS算法处理流程还有一种情况:现在需要在屏幕原创 2021-04-02 09:36:17 · 676 阅读 · 0 评论 -
字符编码——详解常用字符集(ASCII,ISO8859-1,GB2312,GBK,Unicode)和字符编码(UTF-8,UTF-16)
目录ASCII由来包含哪些字符采用什么字符编码,如何编码每个字符占几个字节ISO8859-1由来包含哪些字符采用什么字符编码,如何编码每个字符占几个字节GB2312由来包含哪些字符采用什么字符编码,如何编码每个字符占几个字节GBK由来包含哪些字符采用什么字符编码,如何编码每个字符占几个字节Unicode由来包含哪些字符采用什么字符编码,如何编码的UTF8UTF-16UTF-32总结本文详细分析常用字符集ASCIIISO8859-1GB2312GBKUnicode字符编码UTF-8U原创 2021-03-26 10:19:00 · 1062 阅读 · 0 评论 -
字符编码——简体中文编码中区位码、国标码、内码、外码、字形码的区别及关系
目录区位码国标码(交换码)内码(机内码)区位码、国际码、内码的转换为什么要加上20H为什么加上80H本文以GB2312为例,讲述区位码、国标码、内码、外码、字形码区位码整个GB2312字符集分成94个区,每区有94个位,每个区位上只有一个字符,即每区含有94个汉字或符号,用所在的区和位来对字符进行编码(实际上就是字符编号、码点编号),因此称为区位码。换言之,GB2312将包括汉字在内的所有字符编入一个94 * 94的二维表,行就是“区”、列就是“位”,每个字符由区、位唯一定位,其对应的区、位编号合并原创 2021-03-25 10:02:53 · 4762 阅读 · 0 评论 -
字符编码——一些基本概念
这里写自定义目录标题字库字模位图(bmp--bit map)字库上图截取了GB2312字库的一部分。这整个二维数组就是字库,每一行就是一个字符字模拿出单独一行,就是一个字如下图,就是字模字模就是一个矩阵,里面0和1排列形成一个字左边是字模,右边是排列形成的字符上一个目录的字库中,一整行表示一个字。这一整行是将字模里的数据放在一行,只是字模在字库/内存中的存储形势。字库中的一行不是字模位图(bmp–bit map)...原创 2021-03-24 17:15:30 · 677 阅读 · 2 评论 -
TIP:关掉ubuntu的GUI占用更少资源
配置不高的电脑运行ubuntu可能会比较卡,这里提供一个方法减少卡顿关闭Ubuntu的GUI后,给ubuntu分配3G甚至2G就够用了CPU还是分多点好关闭用户图形界面启动设置为多用户有网络的字符界面sudo systemctl set-default multi-user.targetsudo reboot开启用户图形界面启动设置为图形界面sudo systemctl set-default graphical.targetsudo reboot...原创 2021-03-19 15:56:05 · 1693 阅读 · 0 评论 -
音视频基础认知——ISP与DSP
很多人在学习完linux后不知道应该学什么,并且对于音视频领域的认知只限于道听途说。这里介绍两个音视频的方向——ISP与DSPISPISP——Image Signal Process图像信号处理我们先来看这张图当看到系统框架图的时候千万不要害怕,一个块一块,一个功能一个功能去看,就可以清晰很多。image sensor core——图像传感器核心这一部分主要是用于视频采集,就是sensor把拍到的东西(模拟信号)转化成电子设备看得懂的东西(数字信号),此时的数字信号是视频流,格式为raw原创 2021-03-19 10:53:57 · 4584 阅读 · 2 评论 -
心跳包
心跳包就是在客户端和服务器间定时通知对方自己状态的一个自己定义的命令字,按照一定的时间间隔发送,类似于心跳,所以叫做心跳包。网络中的接收和发送数据都是使用SOCKET进行实现。但是如果此套接字已经断开,那发送数据和接收数据的时候就一定会有问题。可是如何判断这个套接字是否还可以使用呢?——这个就需要在系统中创建心跳机制。其实TCP中已经为我们实现了一个叫做心跳的机制。如果你设置了心跳,那TCP就会在一定的时间(比如你设置的是3秒钟)内发送你设置的次数的心跳(比如说2次),并且此信息不会影响你自己定义原创 2021-03-13 10:57:38 · 428 阅读 · 0 评论 -
解释执行的语言相比编译执行的语言有什么优缺点?
编程语言程序有语句或指令组成计算机只能执行低级语言中的指令(汇编语言的指令要先转成机器码才能执行)高教语言要执行就必须翻译成低级语言,翻译的方法有两种:编译和解释,虽然有这样的不便,但高级语言有一个好处就是平台无关性。平台这个词有很多种解释,可以指计算机体系结构(Architecture),也可以指操作系统(OperatingSystem),也可以指开发平台(编译器、链接器等)。不同的计算机体系结构有不同的指令集(Instruction Set),可以识别的机器指令格式是不同的,直接用某种体系结构原创 2021-02-25 08:30:55 · 2200 阅读 · 1 评论 -
自动获取ip和DNS
udhcpc -i wlan0原创 2021-01-22 14:53:31 · 463 阅读 · 0 评论 -
算法开销满足不了客户要求怎么办?
1、尽量多的近似计算如:计算机中,乘除开销远比加减大。那么我们就可以进行类似如下图的近似计算2、尽量多用LUT查找表的方式3、阈计算4、尽量减少不必要的CPU计算,如减少浮点数的计算5、在数学公式推导时看看有没有地方可以预先计算或者近似计算...原创 2021-01-20 10:36:35 · 224 阅读 · 0 评论 -
https协议基础详解
这里写目录标题简介与原理HTTPS 原理密码学基础https建立的过程优缺点优点缺点简介与原理http协议是明文传输的,因此很容易被截取和解析,泄漏个人数据。https协议是在http和tcp之间多添加了一层,进行身份验证和数据加密HTTPS 原理① 客户端将它所支持的算法列表和一个用作产生密钥的随机数发送给服务器② 服务器从算法列表中选择一种加密算法,并将它和一份包含服务器公用密钥的证书发送给客户端;该证书还包含了用于认证目的的服务器标识,服务器同时还提供了一个用作产生密钥的随机数 [2原创 2021-01-02 10:52:21 · 522 阅读 · 0 评论 -
http协议基础详解
这里写目录标题http协议的特性http协议的请求请求行GET 请求POST 请求区别:本质区别:请求头请求主体http协议的响应响应行响应头响应主体持久连接分块传输HTTP Pipelining(HTTP 管线化)安全性会话跟踪什么是会话?什么是会话跟踪?为什么需要会话跟踪?会话跟踪常用的方法:cookie的传递http协议的特性http协议是建立在TCP/IP协议之上应用层协议,默认端口为80,8080http协议的的特点是无状态,无连接即在有访问的时候才有连接,数据返回后断开连接。如百度打开是原创 2021-01-02 10:14:47 · 292 阅读 · 0 评论 -
位操作
移位假设int a = 0x123;int b = a << 2;int c = a >> 2; 思考,b,c等于多少a的二进制是,0b0001,0010,0011左移两位,就是左边去掉两位,右边补上两个00b0100,1000,1100 = 0x48c = 0x123 x 2^2 = 0x123 x 4向左移两位,就是所有值的权重增加了4倍右移两位,右边去掉两位,左边补两个00b0000,0100,1000 = 0x48 = 0x123 /4 = 0x48原创 2020-12-25 13:53:04 · 589 阅读 · 0 评论 -
字节序
int a = 0x12345678我们知道,对于16进制,每一位表示4bit,那么两位表示一个byte它在内存中可以这样存放左—低位存放在低地址——小字节序(little-endian)右—低位存放在高地址——大字节序(big-endian)对于一般的arm芯片默认使用小字节序有的芯片如S3C2440,可以设置某个寄存器,来控制它使用大字节序或小字节序...原创 2020-12-23 16:59:29 · 184 阅读 · 0 评论 -
C语言的编译流程
通常我们编译程序是这样的gcc xxx.c -o test这样这个可执行文件test就可以直接执行了,编译器帮我们做的东西太多了我们需要了解一下这个过程C语言的编译流程1、预编译把所有的宏展开如#define LED p0^0LED = 1;这一步就是将LED替换成p0^0宏定义可以使得我们代码的可阅读性变强,一定要多用宏定义处理条件编译#ifdef SENYUN#ifden HIKCAM#end if比如做摄像头的时候如果是森云相机,就编译第一个ifdef如果是海康原创 2020-12-22 15:26:40 · 391 阅读 · 0 评论 -
ARM汇编积累(持续更新)
1、LDR(load)读内存命令(4个字节)例:LDR R0,[R1]假设R1的值是x,读取地址X上的数据(四个字节),到R0中2、STR(store)写内存命令STR R0,[R1]假设R1的值是x,把R0的值写道地址x(四个字节)3、B (跳转)4、MOV(move)MOV R0,R1把R1的值赋值给R0MOV R0,#0x100R0=0x1005、LDR R0,=0X12345678这是一条伪指令,它会被超分为几条阵阵的arm指令为什么引出这条指令..原创 2020-12-21 13:01:44 · 285 阅读 · 1 评论 -
windows与linux出厂系统对比
windows上电>>BIOS>>启动windows内核/windows操作系统>>识别挂载文件系统(C、D,内含app)windows系统下,以上内容都存在硬盘当中Linuxbootloader(u-boot是其中一种)>>linux内核>>挂载根文件系统(含app)在嵌入式设备下,以上内容都存在Flash中对于JZ2440,有两种flashNand Flash,有256MNor Flash,2M在Flash中,划分成四块原创 2020-12-20 13:29:33 · 152 阅读 · 0 评论 -
linux的绝对路径和相对路径
绝对路径从home开始一级一级写出来的就是绝对路径如/home/bin相对路径以./或…/开头原创 2020-12-19 16:21:43 · 169 阅读 · 2 评论 -
CPU的统一编址空间
CPU发送地址给内存控制器,它能够将地址发送给SDRAM和NOR FLASH而SDRAM和NOR FLASH的地址是属于同一个范围的如果要访问 NAND FLASH控制器呢CPU就要把地址写道NAND FLASH控制器当中,由它来控制片选引脚。然后将地址从地址线上发送给NAND FLASH。NAND FLASH不和SDRAM、NOR FLASH在同一区域。不属于CPU的统一编址空间可以这么理解:SDRAM、NOR FLASH是CPU的儿子,CPU能直接访问NAND FLASH是CPU的孙子原创 2020-12-17 19:31:30 · 690 阅读 · 0 评论 -
为什么不在windows学习单片机
1、深度不够Windows底下有很好的图形界面单片机开发软件,如keil、MDK等。它们封装了很多技术细节,如: 你只会从mian函数开始编写代码,却不知道上电后第一条代码如何执行; 你可以编写终端处理函数,但是不知道它是怎么被调用的; 你不知道程序怎么从Flash上被读入内存; 也不知道内存是怎么划分使用的,不知道栈在哪堆在哪 当你想裁剪程序降低对Flash、内存的使用时,你却无从下手 当你新建一个文件时,它被自动添加到工厂,但其中的机理你完全不懂2、基于arm+l..原创 2020-12-16 21:31:24 · 330 阅读 · 0 评论 -
SDRAM为什么要使用LnWBE引脚
SDRAM比一般的内存如NOR Flash更加复杂当nSRAS变为低电平时,表示发出的是行地址当nSCAS变为低电平时,表示发出的是列地址也就是说,它要分别发送行地址和列地址。并起来才能访问此外还有两个引脚需要注意我们这块SDRAM,一次访问就是32位。如果只想写里面的某个字节该怎么办?让LnWBE(write bit enable)变为低电平,如果它是高电平,那么写操作就不会影响对应的字节。LnWBE0表示低8位LnWBE1表示高8位这是另外两条线共4条线,表示32位L原创 2020-12-16 20:24:38 · 354 阅读 · 0 评论 -
不同位宽外设的接线方式
不同位宽外设的接线方式不同位宽外设的接线方式16位32位总结16位以NOR FLASH为例2440的CPU认为,一个地址对应一个字节NOR FLASH认为,一个地址对应两个字节那么这之间的矛盾该怎么协调呢假设2440的CPU要访问地址3的一个字节由于NOR FLASH是16个字节,一个地址对应两个字节所以2440的CPU会把2和3这一块一起取出来要读第一个单元,然后内存控制器再把地址3挑出来给CPU 然后CPU发送3 连接2440的地址线addr0、addr1、addr2分别原创 2020-12-16 17:36:32 · 1014 阅读 · 0 评论 -
如何学习协议类的知识
假定以2440连接外设1、看原理图,弄清连线2、弄清楚接口的协议:数据怎么传输?各引脚怎么配合3、设置时序:2440发出的各个信号,要让外界的芯片能反应的过来3.1看2440的手册弄清楚能设置哪些参数,以及这些参数的含义(以CLK为单位)3.2看外设的芯片手册,弄清楚这些参数的取值范围(以秒为单位)3.3根据3.1、3.2、3.3 计算2440的寄存器的取值...原创 2020-12-15 19:27:29 · 355 阅读 · 0 评论