自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Biao

你若喜欢,目之所及皆为欢喜

  • 博客(287)
  • 资源 (2)
  • 收藏
  • 关注

原创 T31快启图像效果优化

根据官方的说明,君正系列,在T20系列,可以直接使用应用层软件直接采adc值与稳定的ev值但是在T30,T31芯片上,因为启动的时候ADC其实还未稳定,所以只能是采集启动时boot的adc值,与内核打印中稳定的ev值相互对应,不然会出现不准确的现象

2022-10-29 09:59:39 2765

转载 时间复杂度和空间复杂度解析

在学习具体的数据结构和算法之前,每一位初学者都要掌握一个技能,即善于运用时间复杂度和空间复杂度来衡量一个算法的运行效率。所谓算法,即解决问题的方法。同一个问题,使用不同的算法,虽然得到的结果相同,但耗费的时间和资源肯定有所差异。就比如拧一个螺母,扳手和钳子都可以胜任,但使用钳子拧螺母肯定没有扳手的效率高。图1 解决问题的方式有多种这也就意味着,如果解决问题的算法有多种,我们就需要从中选出最好的那一个。那么,怎么判断哪个算法更好(或者更优)呢?“好”算法的标准解决一个问题的方法可能有很..

2021-04-13 09:52:58 836

原创 君正Zeratul开发(6)——为什么禁止使用system

文章目录(一)前言(二)为什么危险(1)实现(2)执行:(3)返回值:(4)危险的原因(三)为什么不建议在主进程中执行引用:(一)前言在很多嵌入式设备开发中,很多平台明确规范,禁止在主程序中使用system 等系统调用接口函数,需要在另外的一个守护进程中去实现system函数的功能。这里有两个问题:1.system函数有哪些不安全的地方? 2.为什么不可以在主进程中去执行system,而在守护进程中却可以?(二)为什么危险system 源码实现int system(const char * cmd

2021-03-31 20:25:54 2543 7

原创 君正Zeratul开发(5)——快速启动优化

前言:  Camera 需要快速启动, 以第一时间抓拍到图像,君正官方给的第一帧图像是200ms,实际应用中时间会长不少。1.尽快运行主程序 主程序应该放置在 rootfs 中并第一时间加载运行。 例如在 rcS 中, 在环境变量设置完成之后即可运行主程序 主程序依赖的动态库要放在 rootfs 中, 例如 libimp.so 主程序启动后首先初始化视频, 之后可以并行处理其他的业务(比如 P2P、 认证鉴权等等) 如果对某些配置文件有依赖, 例如 config 分区下的配置文件, 可以使用如下

2021-03-31 20:25:43 3003

原创 君正Zeratul开发(4)——图像效果调试

前言  目前而言,君正设备的isp 图像效果还是君正的工程师在负责开发调试,如果需要添加一款新的摄像头,一般也是将新摄像头的驱动,从ISVP 版本移植到Zeratul平台。这里主要介绍:(1)摄像头驱动移植;(2)快启图像效果优化;(3)宽动态效果(一) Sensor驱动移植 Zeratul平台 是从ISVP平台优化过来的,所以很多Sensor 驱动也是需要从ISVP平台移植到Zeratul平台。其中分为两个步骤:以gc2053 Sensor为例:  **Step 1 添加sen

2021-03-31 20:25:33 7262 4

原创 君正Zeratul开发(3)——升级回滚

升级 升级有两种方案:直接升级方案,recovery 升级 直接升级方案与其他嵌入式设备升级方式一样,就是从不同地方(OTA,U盘,TF卡等)获取升级文件,然后将需要升级的数据烧录到指定的flash分区地址去就可以了。 recovery 升级是当系统启动异常或是接收到recovery命令的时候,设备进入recovery模式,这个模式是一个精简的系统,一般只初始化跟升级相关的外设,一般也只进行升级相关的业务。 直接升级直接升级方案的几个分区升级方法如下: boot: 系统启动后 boot 分区不

2021-03-31 20:25:24 1714

原创 君正Zeratul开发(2)——uboot启动分析

前言   boot启动一般分为两个阶段,君正设备的第一阶段uboot spl 程序没有开源,用户编译的是第二阶段的boot,最后将两个阶段的boot合并到一起,写入到boot分区中去,boot分区如下(一)SPL (secondary program loader)    SPL(secondary program loader)是一个十分小的bin文件,它是用来引导主u-boot文件。对于一些SRAM很小的SOC,无法一次性加载ROM中的bootloader到SRAM中,因为一般SRAM远远小于b

2021-03-31 20:25:10 4896 1

原创 君正Zeratul开发(1)——分区启动分析

文章目录(一)整体分区(二)Tag 分区(1)tag 损坏说明:(2)T31 RISCV(三)启动流程(一)整体分区1234567boottagkernelrootfsrecoverysystemconfig0.25M352K4M~5M2M~3M2M~2.5M4512K512K● boot 分区存放 bootloader● tag 分区存放系统启动参数, 包括 cmdline, Senso init setting, env 参数, b

2021-03-31 20:24:58 2891 4

原创 君正Zeratul开发(0)——序言及目录

前言  2020年疫情加上海思供货紧缺,导致很多方案开始找相应的替代方案。对于海思低功耗视频方案,君正T31 Zeratul 是一个比较理想的替代方案。君正低功耗方案,因为向前的使用量并不算大,所以整个方案并不算是非常成熟。开发文档和资料跟海思相比还是有些差距,在使用的过程中,也依然还有不少问题需要持续优化。 我就自己在使用君正T31 Zeratul 中遇到的问题及一些知识点整理成文章,以便日后自己查看,也可供大家参考。 (一)Zeratul 与ISVP的区别 Zeratul 是基于君正 T 系列芯

2021-03-31 20:24:31 5469 4

原创 unix domain 与本地本地回环在进程间通信中的差异

前言:​ 127.0.0.1它是一个私有IP,代表的就是你的本机环回地址,其实本质上是绑定在虚拟网卡(loopback)上的IP。在实际应用中,有遇到在使用本地回环做进程间通讯的时候程序阻塞的情况。比如下面代码(一)本地回环:​ 客户端数据收发程序:static int send_recv(char *cmd, int *ret, char* strResult, int nSize){ struct sockaddr_in sin; struct sockaddr_in cin; int

2021-03-31 15:02:01 1544

转载 深入理解UDP协议

UDP的疑难杂症UDP的传输方式:面向报文面向报文的传输方式决定了 UDP 的数据发送方式是一份一份的,也就是应用层交给 UDP 多长的报文,UDP 就照样发送,即一次发送一个报文。那么UDP的报文大小由哪些影响因素呢? UDP 数据包的理论长度是多少,合适的 UDP 数据包应该是多少呢?(1) UDP 报文大小的影响因素,主要有以下3个:[1] UDP协议本身,UDP协议中有16位的UDP报文长度,那么UDP报文长度不能超过2^16=65536; [2] 以太网(Ethernet)数据帧

2021-03-31 11:28:12 1170

转载 TCP/IP网络协议详解

一、 计算机网络体系结构分层一图看完本文计算机网络体系结构分层计算机网络体系结构分层不难看出,TCP/IP 与 OSI 在分层模块上稍有区别。OSI 参考模型注重“通信协议必要的功能是什么”,而 TCP/IP 则更强调“在计算机上实现协议应该开发哪种程序”。二、 TCP/IP 基础2.1 TCP/IP 的具体含义从字面意义上讲,有人可能会认为 TCP/IP 是指 TCP 和 IP 两种协议。实际生活当中有时也确实就是指这两种协议。然而在很多情况下,它只是利用 I.

2021-03-30 18:59:52 12601 1

原创 Hello World 深入理解(4)——静态链接

前言:问题: #include <stdio.h>是什么意思?把stdio.h包含进来意味着什么?C语言库又是什么?它怎么实现的? 不同的编译器(Microsoft VC、GCC)和不同的硬件平台(x86、SPARC、MIPS、ARM),以及不同的操作系统(Windows、Linux、UNIX、Solaris),最终编译出来的结果一样吗?为什么?链接的接口——符号链接过程的本质就是要把多个不同的目标文件之间相互“粘”到一起,或者说像玩具积木一样,可以拼............

2020-12-10 20:20:59 1264

原创 Hello World 深入理解(3)——目标文件分析

前言: 问题:最后编译出来的可执行文件里面是什么?除了机器码还有什么?他们怎么存放的?怎么组织的? 在Linux系统中可执行文件属于elf文件格式中的一种,它里面有编译后的机器指令,数据,符号表,调试信息,字符串等等信息。如果要知道它是如何存放的,那就需要了解ELF文件格式可执行程序:可执行文件格式( Executable)主要是 Windows下 的 PE (Portable Executable)和 Linux 的 ELF (Executable Linkable For........

2020-12-10 20:19:50 614

原创 Hello World 深入理解(2)——编译过程与编译原理

前言: 问题:编译器在把C语言程序转换成可以执行的机器码的过程中做了什么?怎么做的? 编译一个C程序可以分为四阶段,预处理阶段->生成汇编代码阶段->汇编阶段->链接阶段,这里以linux环境下gcc编译器为例。 使用gcc时默认会直接完成这四个步骤生成可以执行的程序,但通过编译选项可以控制值进行某些阶段,查看中间的文件。1.万能程序大法----Hello World #include <st.........

2020-12-10 20:18:38 1403 1

原创 Hello World 深入理解(1)——序言

最近看了《程序员的自我修养——链接装载与库》,少有的国内优秀计算机书籍。它在开篇的时候提出了下面的9个问题: 1.程序为什么要被编译器编译后才能运行? 2.编译器在把C语言程序转换成可以执行的机器码的过程中做了什么?怎么做的? 3.最后编译出来的可执行文件里面是什么?除了机器码还有什么?他们怎么存放的?怎么组织的? 4.#include <stdio.h>是什么意思?把stdio.h包含进来意味着什么?C语言库又是什么?它怎么实现的? 5............

2020-12-10 20:17:36 488 1

原创 嵌入式程序大小控制方法介绍

嵌入式设备flash空间有限,为节省成本,一般程序的存储空间都会非常小,这就需要我们将程序中不需要的内容清除,或者是直接对程序进行压缩处理,以达到减小执行程序大小的目的。控制嵌入式程序大小有下面几种方法有: 1.使用strip命令清除符号表信息 2.使用objcopy生成特定的格式文件 3.使用tar zip等命令对程序进行压缩处理在实际应用中发现下面两个问题点: 1.为什么静态库使用strip之后不能再被成功链接? 2.为什么有些时候objcopy生成的bin...............

2020-12-10 18:16:55 1939 1

原创 libwebp 交叉编译移植到arm设备

(一)前言 我们常用的图片格式有jpeg,jpg,png,bmp等等,jpeg图片是常见的一种有损压缩,现在使用非常广,压缩比也比较的高。每种格式都有它自己的优缺点。这里介绍webp图片在前嵌入式设备中的使用 webp 图片是在网页中使用的一种高压缩比的图片处理方法,在嵌入式设备中使用,可以节省图片的存储空间,如果要远程传输,还可以节省流量。 webp 在GitHub上的源码路径为:https://github.com/webmproject/libwebp 关于l............

2020-12-10 18:15:45 1671 1

转载 网卡介绍——MAC与PHY的关系分析

(一)网卡初步认识网络适配器又称网卡或网络接口卡(NIC),英文名Network Interface Card.它是使计算机联网的设备.平常所说的网卡就是将PC机和LAN连接的网络适配器.网卡(NIC) 插在计算机主板插槽中,负责将用户要传递的数据转换为网络上其它设备能够识别的格式,通过网络介质传输.数据在计算机总线中传输是并行方式即数据是肩并肩传输的,而在网络的物理缆线中说数据以串行的比特流方式传输的,网卡承担串行数据和并行数据间的转换.网卡在发送数据前要同接收网卡进行对话以确定最大可发送数据的大..

2020-05-14 14:38:55 12374 1

转载 海思hi3520dv400 kernel分析(3)——C语言阶段启动分析

文章内容来源于《朱老师物联网大讲堂》中的课堂记录2.16.5.内核启动的C语言阶段22.16.5.1、杂碎(1)smp。smp就是对称多处理器(其实就是我们说的多核心CPU)(2)lockdep。锁定依赖,是一个内核调试模块,处理内核自旋锁死锁问题相关的。(3)cgroup。control group,内核提供的一种来处理进程组的技术。2.16.5.2、打印内核版本信息(1)代码位.....................

2020-04-08 11:28:40 644 1

原创 面向对象编程语言(C++)复习笔记(4)——类的继承,封装,多态

前言面向对象的三个基本特征是:继承、封装、多态。其中,封装可以隐藏实现细节,使得代码模块化; 继承可以扩展已存在的代码模块(类),它们的目的都是为了——代码重用; 多态则是为了实现另一个目的——接口重用;继承继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。其继承的过程,就是从一般到特殊的过程。通过继承创建的新类称为“子类”............

2020-04-07 20:24:52 1004 1

原创 面向对象编程语言(C++)复习笔记(3)——类与对象

一,类的概念及封装1.什么是封装第一层含义:封装是面向对象程序设计最基本的特性。把数据(属性)和函数(方法)合成一个整体,这在计算机世界中是用类和对象实现的。(把属性和方法进行封装)第二层含义:把客观事物封装成抽象的类,并且类可以把自己的属性和方法只让可信的类或者对象操作,对不可信的进行信息的隐藏。(对属性和方法进行访问控制)2.类的访问控制  在C++中可以对类的属性和方法定义访......

2020-04-07 20:23:41 1423 1

原创 面向对象编程语言(C++)复习笔记(2)——函数内联,重载,模板

(一)内联函数:引入内联函数的目的是为了解决程序中函数调用的效率问题,这么说吧,程序在编译器编译的时候,编译器将程序中出现的内联函数的调用表达式用内联函数的函数体进行替换,而对于其他的函数,都是在运行时候才被替代。这其实就是个空间代价换时间的i节省。所以内联函数一般都是1-5行的小函数。在使用内联函数时要留神:在内联函数内不允许使用循环语句和开关语句; 内联函数的定义必须出现在内联函数第............

2020-04-07 20:22:50 760 1

原创 面向对象编程语言(C++)复习笔记(1)——面向对象与面向过程

概述:一般来说计算机语言要处理两个概念:数据和算法。数据是程序使用和处理的信息,也叫属性。 算法是指程序使用的方法,也叫方法。面向过程强调的是程序的算法方面(方法)。而面向对象强调的是程序的数据(属性)面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了;面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个.........

2020-04-07 20:21:48 1020 1

转载 ext文件系统机制原理剖析

将磁盘进行分区,分区是将磁盘按柱面进行物理上的划分。划分好分区后还要进行格式化,然后再挂载才能使用(不考虑其他方法)。格式化分区的过程其实就是创建文件系统。文件系统的类型有很多种,如CentOS 5和CentOS 6上默认使用的ext2/ext3/ext4,CentOS 7上默认使用的xfs,windows上的NTFS,光盘类的文件系统ISO9660,MAC上的混合文件系统HFS,网络文件系统.........

2020-04-05 10:48:00 2368 2

原创 磁盘碎片与闪存摩擦均衡介绍

前言: 存储设备传统的有机械硬盘,新型的有各种闪存:U盘、CF卡、SM卡、SD/MMC卡、记忆棒、XD卡、MS卡、TF卡、PCIe闪存卡,还有ssd固态硬盘。由于物理结构上的差异,它们在可靠性上的差异都非常大。(一)机械硬盘:相比与闪存,机械硬盘在机械结构上要复杂很多,也正是因为它复杂的机械结构,导致它在性能和可靠性上有很大的缺陷。磁盘的物理结构可以查看博客《硬盘内部硬件结构和工............

2020-04-03 23:36:23 4217 1

转载 闪存文件系统jffs与yaffs

JFFS2 文件系统主要包括三个功能模块:块分配模块、垃圾回收模块和磨损均衡模块,JFFS2 文件系统的不足之处包括以下几个方面: 具有较长的挂载时间: JFFS2 的挂载过程需要从头到尾扫描闪存块,需要耗费较长的时间。磨损平衡具有随机性: JFFS2 在选择要擦除的块时,会以 99%的概率从脏块链表中选择一个块,以 1%的概率从干净块链表中选择一个块。这种概率的方法,很难保证磨损的均衡性。在某些情况下,甚至可能造成对块的不必要的擦除操作,或者引起磨损平衡调整的不及时。可扩展性较差: JFF....

2020-04-03 23:35:19 4489 1

转载 磁盘I/O请求分析

对于磁盘的一次读请求,首先经过虚拟文件系统层(VFS Layer),其次是具体的文件系统层(例如Ext2),接下来是Cache层(Page Cache Layer)、通用块层(Generic Block Layer)、I/O调度层(I/O Scheduler Layer)、块设备驱动层(Block Device Driver Layer),最后是物理块设备层(Block Device Layer)。...............

2020-04-03 23:32:37 2083 1

原创 海思多媒体(MPP)开发(10)——通道绑定

前言: 海思多媒体处理平台(MPP)分为:视频输入(VI),视频处理(VPSS),视频编码(VENC),视频解码(VDEC),视频输出(VO)、视频侦测分析(VDA),音频输入(AI),音频输出(AO),音频编码(AENC),音频解码(ADEC),区域管理(REGION)等模块. 这里介绍MPP各通道之间的绑定关系。海思多媒体处理平台(mpp)也就是针对视频和音频的各种处理。其实在它............

2020-03-31 22:10:05 8416 1

原创 海思多媒体(MPP)开发(9)——视频遮挡和运动检测

前言: 海思多媒体处理平台(MPP)分为:视频输入(VI),视频处理(VPSS),视频编码(VENC),视频解码(VDEC),视频输出(VO)、视频侦测分析(VDA),音频输入(AI),音频输出(AO),音频编码(AENC),音频解码(ADEC),区域管理(REGION)等模块. 这里介绍视频侦测分析(VDA)中的运动检测。视频侦测分析(The video detection ana............

2020-03-31 22:09:36 4818 1

转载 GDB使用技巧(1)——概述与启动

GDB概述GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在UNIX平台下做软件,你会发现GDB这个调试工具有比VC、BCB的图形化调试器更强大的功能。所谓“寸有所长,尺有所短”就是这个道理。一般来说,GDB主要帮忙你完成下面四个方面的功能:1、启动你的程序,可以按照你的自定义的要求随...............

2020-03-31 21:55:39 1014

转载 GDB使用技巧(2)——GDB命令

DB的命令概貌启动gdb后,就你被带入gdb的调试环境中,就可以使用gdb的命令开始调试程序了,gdb的命令可以使用help命令来查看,如下所示:/home/hchen> gdbGNU gdb 5.1.1Copyright 2002 Free Software Foundation, Inc.GDB is free software, covered by the GNU G............

2020-03-31 21:55:30 1709

转载 GDB使用技巧(3)——查看栈信息

查看栈信息当程序被停住了,你需要做的第一件事就是查看程序是在哪里停住的。当你的程序调用了一个函数,函数的地址,函数参数,函数内的局部变量都会被压入“栈”(Stack)中。你可以用GDB命令来查看当前的栈中的信息。下面是一些查看函数调用栈信息的GDB命令:backtrace bt打印当前的函数调用栈的所有信息。如:(gdb) bt #0func (n...............

2020-03-31 21:55:19 6407 1

转载 GDB使用技巧(4)——查看运行数据

查看运行时数据在你调试程序时,当程序被停住时,你可以使用print命令(简写命令为p),或是同义命令inspect来查看当前程序的运行数据。print命令的格式是:print <expr> print /<f> <expr><expr>是表达式,是你所调试的程序的语言的表达式(GDB可以调试多种编程语言),<f>是输出............

2020-03-31 21:55:07 5327 1

转载 GDB使用技巧(5)——改变程序运行

改变程序的执行 一旦使用GDB挂上被调试程序,当程序运行起来后,你可以根据自己的调试思路来动态地在GDB中更改当前被调试程序的运行线路或是其变量的值,这个强大的功能能够让你更好的调试你的程序,比如,你可以在程序的一次运行中走遍程序的所有分一、修改变量值修改被调试程序运行时的变量值,在GDB中很容易实现,使用GDB的print命令即可完成。如:(gdb) print x=.........

2020-03-31 21:54:57 1224 1

原创 海思多媒体(MPP)开发(8)——获取VI中的YUV数据

前言: 海思多媒体处理平台(MPP)分为:视频输入(VI),视频处理(VPSS),视频编码(VENC),视频解码(VDEC),视频输出(VO)、视频侦测分析(VDA),音频输入(AI),音频输出(AO),音频编码(AENC),音频解码(ADEC),区域管理(REGION)等模块. 这里介绍视频输入模块(VI)中的直接获取YUV数据。介绍: 在正常的视频编码和视频输出的使用中.........

2020-03-28 09:00:54 12994 16

原创 海思多媒体(MPP)开发(0)——序言与目录

1.背景: 海思多媒体处理平台(MPP)分为:视频输入(VI),视频处理(VPSS),视频编码(VENC),视频解码(VDEC),视频输出(VO)、视频侦测分析(VDA),音频输入(AI),音频输出(AO),音频编码(AENC),音频解码(ADEC),区域管理(REGION)等模块. 由于疫情影响,春节期间在家闭关时间太长,所以有时间将自己开发海思平台的一些经验做个记录和总结,以...............

2020-03-25 21:17:56 8724 7

原创 海思多媒体(MPP)开发(1)——nvp6134驱动介绍

简介:NVP6134C在Nextchip中的介绍是:quipped with Universal AHD™ Technology for the first time among the AHD™ product family, NVP6134C delivers highly robust and versatile video decoding solution for HD an...

2020-03-25 21:17:29 8710 1

原创 海思多媒体(MPP)开发(2)——视频输入(VI)

前言: 海思多媒体处理平台(MPP)分为:视频输入(VI),视频处理(VPSS),视频编码(VENC),视频解码(VDEC),视频输出(VO)、视频侦测分析(VDA),音频输入(AI),音频输出(AO),音频编码(AENC),音频解码(ADEC),区域管理(REGION)等模块. 这里介绍视频输入模块(VI)。VI与AD密切相关,AD的输出模式必须与海思的VI先对应,AD的输出才能正确.........

2020-03-25 21:17:02 10409 4

原创 海思多媒体(MPP)开发(3)——视频输出(VO)与视频解码(VDEC)

前言: 海思多媒体处理平台(MPP)分为:视频输入(VI),视频处理(VPSS),视频编码(VENC),视频解码(VDEC),视频输出(VO)、视频侦测分析(VDA),音频输入(AI),音频输出(AO),音频编码(AENC),音频解码(ADEC),区域管理(REGION)等模块. 这里介绍视频输出模块(VO)。 VO与自己的显示设备密切相关,在使用VO之前,应该了解自己.........

2020-03-25 21:16:32 10639 3

openssl-1.0.1f.tar.gz

openssl-1.0.1f.tar.gz

2017-05-03

pcre-8.37.tar.gz

pcre-8.37.tar.gz

2017-04-24

空空如也

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

TA关注的人

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