
帅哥
文章平均质量分 64
嵌入式面试相关
Spark!
路人
展开
-
Voice Changer + Voice Meeter Banana变声方案
voice changer + voice meeter变声方案原创 2023-05-25 18:45:49 · 1501 阅读 · 2 评论 -
objdump查看反汇编实例
目录参考实例参考实例#include "stdio.h"int main(){ int a = 3; int b = 4; a += 1; int c = 0; c = a + b; return 0;}编译gcc test.c -o test -g有-g参数才可以将代码和反汇编进行对应,否则objdump -S和-d一样然后输入指令查看反汇编objdump -S test反汇编如下...原创 2021-08-26 15:34:58 · 831 阅读 · 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 · 1891 阅读 · 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 · 896 阅读 · 0 评论 -
单端信号与差分信号
单端信号如图,特点就是一根信号线就可以了, 其参考的基准电压就是地,当电压大于VH就是1(高电平);小于VL就是0(低电平),为啥高低电平不是等于某个值而是大于/小于呢? 这很好理解, 输出的电压是小范围波动的,不可能低电平就是0mv, 有可能是1mv,十多mv甚至更大! 如果等于0mv才是低电平那估计全是高电平了, 而介于VL~VH为高阻态, 取决外设怎么解析, 有些硬件寄存器会表示高阻态有些表示0或者1必备条件:a. 参考地b. VH/VL阈值c. 时钟切割连续电平(连续高电平是代原创 2021-07-29 14:22:28 · 2078 阅读 · 0 评论 -
图像压缩原理
目录前言为什么要压缩压缩方法空间冗余时间冗余视觉冗余压缩方法无失真压缩有失真压缩预测编码变换编码统计编码图像压缩的要素前言之前整理过的视频编解码器工作原理消除视频冗余的方法及原理视频的压缩是基于图像压缩,本文介绍图像压缩原理为什么要压缩一张原始图像(1920x1080),如果每个像素32bit表示(RGBA),那么,图像需要的内存大小1920x1080x4 = 8294400 Byte如果考虑视频,那么带宽和存储都不够。压缩方法空间冗余一幅图像表面上各采样点的颜色之间往往存在着空间原创 2021-07-19 09:59:10 · 2120 阅读 · 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 · 1668 阅读 · 0 评论 -
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 · 256 阅读 · 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 · 14836 阅读 · 0 评论 -
优秀的内存规划方法——环形缓冲区(ring buffer)
目录什么是环形缓冲区使用环形buffer的好处环形buffer的使用场景进程间通信网络IO区分缓冲区是满或者是空保持一个存储单元为空什么是环形缓冲区线性缓冲区初学者一般使用的buffer是线性的,数据依次排列依次读取,就像流水线。造成的问题就是,处理大量数据时,需要大段内存,并且需要考虑对内存的管理。频繁的内存分配不但增加系统的开销,更使得内存碎片不断增多,非常不利于程序长期运行。环形缓冲区使用一段固定长度的内存,在内存用尽后,剩余未存的数据从这段内存的起始位置开始存放。就像两个人围着一张原型原创 2021-06-22 16:33:22 · 17780 阅读 · 2 评论 -
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 · 683 阅读 · 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 · 950 阅读 · 0 评论 -
有意思的题:(++a * a++)、(b++ * ++b)、(c++ * c++)、(++d * ++d)
#include <stdio.h>int main(){ int a = 3, b = 3, c = 3, d = 3; int a1, b1, c1 ,d1; a1 = (++a * a++); b1 = (b++ * ++b); c1 = (c++ * c++); d1 = (++d * ++d); printf("%d %d %d %d\n",a1, b1, c1, d1); return 0;}运行结果为20 15 12 251、++a先自加后使用,原创 2021-05-13 00:14:11 · 1405 阅读 · 2 评论 -
模块化编程的思想
今天看我们项目代码的时候发现这样一个奇怪的封装IMP_OSD_CreateGroup是君正底层SDK中的函数,LUX_OSD_CreateGroup是我们DSP层的函数为什么一样的函数,参数也一样,要换个名字?这就要涉及到模块化编程的概念:我们的程序是这样设计的模块化的设计,规定只能上层调用对应下层的API,如果TuYa要调用Ingenic的函数,那么就需要将Ingenic的API封装成LUX头,方便后期调试在这篇中也有提到:音视频DSP中的IVS算法处理流程还有一种情况:现在需要在屏幕原创 2021-04-02 09:36:17 · 669 阅读 · 0 评论 -
git完全教程总结
前言很多人学完linux后不知道该学什么,我的建议是——先学git因为当你在工作中,出了必备的基础知识,还要学会与人合作。如何将你开发的小功能整合到整个项目的大框架中如何让你的实验性代码不影响到大框架中的代码性能如何让你在工作到一半的时候修改突然出现的bug这些都是会出现的情况,为了应对这些情况,新入职的员工就需要去学习git以下是我搜集资料,并且自己实践整理的git教程。希望大家有所收获Git基础知识以下两篇主要包含了git 的背景以及学习要做的准备工作git完全教程:001—G原创 2021-03-23 07:56:35 · 476 阅读 · 3 评论 -
音视频基础认知——ISP与DSP
很多人在学习完linux后不知道应该学什么,并且对于音视频领域的认知只限于道听途说。这里介绍两个音视频的方向——ISP与DSPISPISP——Image Signal Process图像信号处理我们先来看这张图当看到系统框架图的时候千万不要害怕,一个块一块,一个功能一个功能去看,就可以清晰很多。image sensor core——图像传感器核心这一部分主要是用于视频采集,就是sensor把拍到的东西(模拟信号)转化成电子设备看得懂的东西(数字信号),此时的数字信号是视频流,格式为raw原创 2021-03-19 10:53:57 · 4558 阅读 · 2 评论 -
心跳包
心跳包就是在客户端和服务器间定时通知对方自己状态的一个自己定义的命令字,按照一定的时间间隔发送,类似于心跳,所以叫做心跳包。网络中的接收和发送数据都是使用SOCKET进行实现。但是如果此套接字已经断开,那发送数据和接收数据的时候就一定会有问题。可是如何判断这个套接字是否还可以使用呢?——这个就需要在系统中创建心跳机制。其实TCP中已经为我们实现了一个叫做心跳的机制。如果你设置了心跳,那TCP就会在一定的时间(比如你设置的是3秒钟)内发送你设置的次数的心跳(比如说2次),并且此信息不会影响你自己定义原创 2021-03-13 10:57:38 · 426 阅读 · 0 评论 -
解释执行的语言相比编译执行的语言有什么优缺点?
编程语言程序有语句或指令组成计算机只能执行低级语言中的指令(汇编语言的指令要先转成机器码才能执行)高教语言要执行就必须翻译成低级语言,翻译的方法有两种:编译和解释,虽然有这样的不便,但高级语言有一个好处就是平台无关性。平台这个词有很多种解释,可以指计算机体系结构(Architecture),也可以指操作系统(OperatingSystem),也可以指开发平台(编译器、链接器等)。不同的计算机体系结构有不同的指令集(Instruction Set),可以识别的机器指令格式是不同的,直接用某种体系结构原创 2021-02-25 08:30:55 · 2189 阅读 · 1 评论 -
音视频项目中的DSP流程
初学者可能不知道音视频项目码流的传输流程,这里以这个项目为例子带大家了解一下背景本项目是基于君正的ptz ipcPTZ :在安防监控应用中是 Pan/Tilt/Zoom 的简写,代表云台全方位(左右/上下)移动及镜头变倍、变焦控制。后台服务器使用了涂鸦的方案。流程图视屏流由sensor采集传相ISP,此时采集的视屏流格式为IVS格式ISP调优后将IVS格式视屏流传输给FrameSourceFrameSource中分出两条,主码流与次码流,主码流为19201080p,次码流640360p原创 2021-02-01 09:18:32 · 1756 阅读 · 0 评论 -
opencv——图像的线性滤波与非线性滤波
目录图像滤波定义目的分类线性滤波器线性滤波器的分类模糊与锐化图像滤波包括尽量保留图像细节特征的条件下对目标图像的噪声进行抑制图像滤波定义对于图像的滤波定义如下图像滤波,即在图像滤波包括尽量保留图像细节特征的条件下对目标图像的噪声进行抑制,是图像预处理中不可缺少的操作,其处理效果的好坏将直接影响到后续图像处理和分析的有效性和可靠性。目的(1)对图像进行降噪处理;(2)提取图像中物体的特征。分类图像滤波包括线性滤波与非线性滤波(1)线性滤波:方框滤波、均值滤波、高斯滤波;(2)非线原创 2021-01-14 19:46:27 · 1439 阅读 · 0 评论 -
http协议之libcurl基础详解
这里写目录标题简介libcurl的使用函数简介curl_easy_setopt函数部分选项介绍curl_easy_perform 函数说明(error 状态码)设置Http请求头修改消息头删除消息头获取http应答头信息多线程问题libcurl无法正常工作关于密码HTTP验证简介libcurl是一个跨平台的网络协议库,支持http, https, ftp, gopher, telnet, dict, file, 和ldap 协议。libcurl同样支持HTTPS证书授权,HTTP POST, HTTP原创 2021-01-02 11:30:26 · 1474 阅读 · 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 · 290 阅读 · 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 · 587 阅读 · 0 评论 -
字节序
int a = 0x12345678我们知道,对于16进制,每一位表示4bit,那么两位表示一个byte它在内存中可以这样存放左—低位存放在低地址——小字节序(little-endian)右—低位存放在高地址——大字节序(big-endian)对于一般的arm芯片默认使用小字节序有的芯片如S3C2440,可以设置某个寄存器,来控制它使用大字节序或小字节序...原创 2020-12-23 16:59:29 · 180 阅读 · 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 · 389 阅读 · 0 评论 -
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 · 151 阅读 · 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 · 687 阅读 · 0 评论 -
为什么不在windows学习单片机
1、深度不够Windows底下有很好的图形界面单片机开发软件,如keil、MDK等。它们封装了很多技术细节,如: 你只会从mian函数开始编写代码,却不知道上电后第一条代码如何执行; 你可以编写终端处理函数,但是不知道它是怎么被调用的; 你不知道程序怎么从Flash上被读入内存; 也不知道内存是怎么划分使用的,不知道栈在哪堆在哪 当你想裁剪程序降低对Flash、内存的使用时,你却无从下手 当你新建一个文件时,它被自动添加到工厂,但其中的机理你完全不懂2、基于arm+l..原创 2020-12-16 21:31:24 · 326 阅读 · 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 · 1003 阅读 · 0 评论 -
协议类基础——LCD
HSYNC——水平方向的同步信号VSYNC——垂直方向的同步信号Data Enable——数据使能CLK——时钟R、G、B——红绿蓝原创 2020-12-15 20:18:00 · 3507 阅读 · 2 评论 -
协议类基础——SPI
注意:有的开发板可能没有自带SPI本篇随便找了一个SPI的芯片手册目录相关引脚接线SPI协议读写SPI控制器相关引脚MCU或SOC上的SPI相关引脚如下M——masterO——outputI——inputS——slave(从属)某SPI芯片对应如下接线SPICLK(时钟信号)——CSerial Clock)由使用SPI发送数据的开发板给出时钟信号SPIMOSI(SPI OUTPUT)——D(Serial Data Input)开发板的发送端接上SPI芯片的接收端SP原创 2020-12-10 11:38:21 · 1324 阅读 · 0 评论 -
协议类基础——I2C
接线SCL:clockSDA:data电路图I2C总线设备互连对于这两条线,可以挂有多个设备既然有多个设备,那开发板要访问连接的设备,怎么分辨设备1和设备2呢?每一个I2C设备中都有一个地址,当传输的值等于这个地址时,目标设备才会回应开始信号与结束信号开始信号:时钟信号保持高电平,数字信号从高电平变为低电平结束信号:时钟信号保持高电平,数字信号从低电平变为高电平接在I2C总线的设备收到开始信号时就准备接收数据;接收到结束信号时就停止接收数据...原创 2020-12-09 14:47:08 · 884 阅读 · 2 评论 -
linux中的软链接与硬链接(通俗易懂)
这里只讨论使用和针对面试的内容若想系统学习,参考以下博文https://www.cnblogs.com/zhangna1998517/p/11347364.html软链接特点:1、 软连接类似windows的快捷方式2、 在符号连接中,文件实际上是一个文本文件,包含指向文件的位置信息3、 在选定的位置上生成一个文件的镜像,不会占用磁盘空间ln -s libwiringPi.so.2.52 libwiringPi.so 被指的文件 创建的软连接名可以看到文件中存原创 2020-12-04 11:22:41 · 342 阅读 · 0 评论 -
交叉编译
目录交叉编译是什么为什么要交叉编译交叉编译工具链的安装临时配置环境变量永久配置环境变量检验目标机使用上位机交叉编译后的文件交叉编译是什么交叉编译:在一个平台上生成另一个平台上的可执行代码在winnods上面编写C51代码,并编译成可执行代码,如xx.hex,是在C51上运行而不是在windows上面运行在linux上编写树莓派的代码,并编译生成可执行代码,如a.out,是在是树莓派上面运行,不是在ubuntu linux上运行编译:是在一个平台上生成在该平台上的可执行代码C51交叉编译是发生原创 2020-12-04 11:17:27 · 546 阅读 · 0 评论 -
CPU 与外设传输数据的几种方式
查询方式、中断方式和DMA方式查询方式CPU不断查询外设的状态,如果外设就绪就开始传输;若还没准备好CPU就进入循环等待状态。浪费大量CPU,降低CPU的利用率中断方式外设准备好后,向CPU发送中断请求,CPU接收到中断请求并再一定条件下暂停原来的程序并执行终端服务处理程序,执行完毕以后再返回原来的程序继续执行。避免了CPU把大量时间花费在外设状态的查询上,提高了CPU的执行效率DMA直接存储器与外设在DMA控制器的控制下,直觉传输数据不通过CPU。传输速率主要取决于存储器的存取速度。不需原创 2020-11-13 20:56:47 · 5302 阅读 · 0 评论