- 博客(48)
- 收藏
- 关注
转载 C语言中函数指针和回调函数的详解
函数指针:指向函数的指针变量。 因此“函数指针”本身首先应是指针变量,只不过该指针变量指向函数。这正如用指针变量可指向整型变量、字符型、数组一样,这里是指向函数。如前所述,C在编译时,每一个函数都有一个入口地址,该入口地址就是函数指针所指向的地址。有了指向函数的指针变量后,可用该指针变量调用函数,就如同用指针变量可引用其他类型变量一样,在这些概念上是大体一致的。函数指针有两个用途:调用函数和做函数的参数。我们首先来看一个函数指针的例子:#include <stdio.h>#inclu
2020-09-02 09:17:47 359
转载 Linux下分割、合并文件——dd和cat
转载:https://www.cnblogs.com/shangdawei/p/4513638.html
2020-06-04 14:08:45 421
转载 Linux中动态链接库的运行时加载
参考:https://www.cnblogs.com/vamei/archive/2013/04/04/2998850.htmlhttps://blog.csdn.net/q1302182594/article/details/42102961#https://blog.csdn.net/unix21/article/details/12119861?utm_source=blogxg...
2020-04-23 14:18:47 641
转载 数据结构5: 链表(单链表)的基本操作及C语言实现
逻辑结构上一个挨一个的数据,在实际存储时,并没有像顺序表那样也相互紧挨着。恰恰相反,数据随机分布在内存中的各个位置,这种存储结构称为线性表的链式存储。由于分散存储,为了能够体现出数据元素之间的逻辑关系,每个数据元素在存储的同时,要配备一个指针,用于指向它的直接后继元素,即每一个数据元素都指向下一个数据元素(最后一个指向NULL(空))。图1 链式存储存放数据如图1所示,当每一...
2020-04-03 10:54:06 664
原创 11、NALU详解与RTSP分包发送代码分析
1、NAL全称Network Abstract Layer, 即网络抽象层。在H.264/AVC视频编码标准中,整个系统框架被分为了两个层面:视频编码层面(VCL)和网络抽象层面(NAL)。其中,前者负责有效表示视频数据的内容,而后者则负责格式化数据并提供头信息,以保证数据适合各种信道和存储介质上的传输。因此我们平时的每帧数据就是一个NAL单元(SPS与PPS除外)。在实际的H264数据帧中,...
2020-03-20 12:20:12 1535
原创 海思Hi3518E纯WIFI无线调试环境的搭建
有时候我们的开发板没有网线,只能通过WIFI进行调试和下载文件,这就需要搭建纯WIFI环境。1 原理(1)ubuntu和Windows桥接,这样ubuntu、windows、开发板三者都做sta,连同一个AP(2)开发板事先移植部署好USB WIFI驱动、wpa_supplicant等(3)开发板/etc/profile中设计好配置WIFI启动、连接AP、静态IP或者动态D...
2020-03-15 10:49:56 894
原创 海思Hi3518E移植WIFI驱动(STA模式)
1 移植驱动源码下载:链接:https://pan.baidu.com/s/1EXGMkPs8-GxsdyK0735Sqw提取码:bx5c(1)include/rtmp_def.h中1627行左右,修改网络名始终为:wlan(2)修改Makefile原来默认的平台是PC,然后添加平台(3)添加Linux内核源码路径,编译工具链,CPU#add point...
2020-03-14 22:13:15 2369
原创 海思Hi3518E移植WIFI驱动(AP模式)
1 修改USB WIFI驱动mt7601u驱动源码下载:https://www.mediatek.com/products/broadbandWifi/mt7610u1.1 include/rtmp_def.h中1627行左右,修改网络名始终为:wlan1.2 修改Makefile(1)原来默认的平台是PC,然后添加平台PLATFORM = HISI_3518E...
2020-03-14 14:45:34 1400 1
原创 5、HI3518E平台移植ORTP库
1、准备源码首先下载ortp源码:https://github.com/dmonakhov/ortp下载完成后,存放到ubuntu临时工作目录并解压,这里我随便找了个地方解压了。2、解压源码这里我下载完成后,是一个zip文件,使用unzip ortp-master.zip命令解压到当前目录下。3、源码修改增...
2020-03-13 21:36:27 440 1
原创 10、海思sensor驱动、isp、3A框架解读
1 海思sensor驱动什么是sensor :光电转换+AD+ISP+并口/MIPI/LVDSsensor是一个很多功能的集合,sensor可以实现光电转换,将光信号转化成模拟量的电信号,然后经过AD模块,将模拟量的电信号转化成数字量的电信号,一般来说sensor内部还有一个isp单元,它将刚转出来的数字信号做一些简单的处理,将处理过后的信息通过sensor的接口(有三种接口分别是并口/M...
2020-03-13 13:09:29 7268
原创 9、海思Hi3518E的视频处理子系统(VPSS)
1 概述VPSS(Video Process Sub-System)支持对一幅输入图像进行统一预处理,如去噪、去隔行等,然后再对各通道分别进行缩放、锐化等处理,最后输出多种不同分辨率的图像。VPSS 单元支持的具体图像处理功能包括 FRC(Frame Rate Control)、 Crop、 NR(Noise Reduce)、 LDC(Lens Distortion Correction)、...
2020-03-11 16:57:37 1394
原创 8、海思Hi3518E视频输入(VI)模块
1 海思Hi3518E视频输入(VI)模块视频输入( VI)模块实现的功能:通过 ITU-R BT656/601/1120 接口或 Digital Camera接口、 MIPI Rx(含 MIPI 接口、 LVDS 接口和 HISPI 接口)接收视频数据。当工作在离线模式时,将接收到的数据存入到指定的内存区域;当工作在在线模式时, VI 会将数据直接送给 VPSS。在此过程中, VI 可以对...
2020-03-11 09:10:08 1094
原创 6、海思Hi3518E视频缓存池
1 海思媒体处理平台架构海思媒体处理平台的主要内部处理流程如图下所示,主要分为视频输入( VI)、视频处理( VPSS)、视频编码( VENC)、视频解码( VDEC)、视频输出(VO)、视频侦测分析(VDA)、音频输入(AI)、音频输出(AO)、音频编码( AENC)、音频解码( ADEC)、区域管理( REGION)等模块。主要的处理流程介绍如下: ...
2020-03-10 13:41:03 984
原创 7、RGB和YUV详解
1、RGB方式表示颜色 真彩色是指图像中的每个像素值都分成R(红)、G(绿)、B(蓝)三个基色分量,每个基色分量直接决定其基色的强度,这样产生的色彩称为彩色。彩色图像是一种用三个或更多字节描述像素的计算机图像存储方式。普遍认为人眼对色彩的分辨能...
2020-03-09 19:20:02 2784
转载 4、将MPP部署到开发板上
4、将MPP部署到开发板上在一般的嵌入式开发中,只要将uboot,kernel,rootfs下载到开发板上,就可以进行程序开发了。但是海思又进一步的把一些常用视频编解码算法等封装到MPP平台中,进一步简化了工程师的开发难度。1、什么是MPP海思提供的媒体处理软件平台(Media Process Platform,简称 MPP),可支持应用软件快速开发。该平台对应用软件屏蔽了芯片相关的复...
2020-03-09 17:45:30 443
转载 1、嵌入式Linux开发环境搭建
1、前提准备硬件环境: 笔记本电脑 软件环境: 裸机安装Windows10_64位 VMWare版本:VMWare WorkStation 14Pro Ubuntu版本:Ubuntu16.04LTS总结:开发环境是主机安装windows10家庭版,然后使用vmware创建Ubuntu虚拟机,在windows10进行代码的编写开发,在Ubuntu上进行部署编译。具体安装创建方法...
2020-03-09 17:08:37 2577
转载 3、将uboot,kernel,rootfs下载到开发板上
将uboot,kernel,rootfs下载到开发板上1、为什么要下载所谓下载,也称烧录,部署。1.1、什么是u-bootHi3518EV200 单板的 Bootloader 采用 U-boot。u-boot是一种普遍用于嵌入式系统中的Bootloader,Bootloader是在操作系统运行之前执行的一小段程序,通过它,我们可以初始化硬件设备、建立内存空间的映射表,从而建立适当...
2020-03-09 17:06:54 619
转载 2、HI3518EV200 SDK安装并编译osdr
HI3518EV200 SDK安装并编译osdr。1、开发环境windows10电脑 + 虚拟机14 Pro + Ubuntu16.0.42、拷贝并解压。将 Hi3518E_SDK_V1.0.3.0.tgz拷贝到 Linux 服务器上。 cd ~/sambashare/ cp /mnt/hgfs/winshare/HI3518EV200/Hi3518E_V200...
2020-03-09 16:53:50 577
转载 linux下tar命令详解
tar命令一、功能说明:用来建立,还原备份文件的工具程序,它可以加入,解开备份文件内的文件二、参数:-c: 建立压缩档案-x:解压-t:查看内容-r:向压缩归档文件末尾追加文件-u:更新原压缩包中的文件这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个。下面的参数是根据需要在压缩或解压档案时可选的。-z:有gzip属性的-j:有bz2属性的...
2019-04-03 17:49:05 426
原创 Linux线程编程
在linux中进程是系统中程序执行和资源分配的基本单位,每个进程都拥有自己的数据段、代码段和堆栈段,这就造成了进程在进行切换时操作系统的开销比较大。为了提高效率,操作系统又又引入了另一个概念——线程,也成为轻量级进程。线程可以对进程的内存空间和资源进行访问,并于同一进程中的其它线程共享。因此线程的上下文的切换比进程的开销要小得多。一个进程可以由多个线程,其中每个线程共享该进程所有的资源。要注意的是...
2019-01-29 13:59:10 281
原创 信号量实现linux线程的同步与互斥
linux线程编程:https://blog.csdn.net/David_361/article/details/86639865本片博客接着前面的线程编程继续介绍在linux中用信号量实现线程间的同步与互斥信号量信号量就是操作系统中所用到的PV原子操作,它被广泛用到进程于线程间的同步与互斥。信号量本质上是一个非负的整数计数器,它被用来对公共资源的访问。PV原子操作主要用于进程或线程...
2019-01-28 17:45:29 1228
原创 linux进程间通信(下)
接着上一篇继续介绍进程间的通信4、信号量(1)信号量概述在多任务操作系统环境下,多进程/线程会同时运行。多个任务可能会为了完成同一个目标而相互协作,这样新形成任务之间的同步关系。同样,在不同人物之间为了争夺有限的系统资源(硬件或软件资源)会进入竞争状态,这就是任务之间的互斥关系。任务之间的互斥与同步关系存在的根源在于临界资源。临界资源是指在同一时刻只允许有限个(通常只有一个)任务可以访...
2019-01-24 15:05:19 325
原创 linux进程间通信(上)
一、进程的基本概念进程是指一个具有独立功能的程序在某个数据集合上的一次动态执行过程,他是操作系统进行资源分配的最小单元(线程是操作系统进行调度的最小单元)。进程具有并发性、动态性、交互性和独立性等主要特性并发性:指的是系统中可以有多个进程同时并发执行,相互之间不受干扰 动态性:指的是进程都有完整的生命周期,而且在进程的生命周期内,进程的状态是不断变化的,另外进程具有动态的地址空间(包括代...
2019-01-22 18:02:04 265
原创 linux应用编程中的异步IO
前面有提到IO的多路复用,解决了阻塞式访问的困境。这里再介绍一种解决方法——异步IO1、异步IO的实现原理很想硬件上的中断。异步IO就是操作系统用软件实现的一套中断响应系统,工作方法是当前进程注册一个异步IO事件(使用signal注册一个信号SIGIO的处理函数),然后当前进程可以正常处理自己的事情,当异步事件发生后当前进程会收到一个SIGIO信号从而执行绑定的处理函数去处理这个异步事件。...
2019-01-21 11:55:24 557
原创 GDB调试器的用法
本文是我在学习Linux GDB调试器的时候所做的笔记,主要记录在使用GDB的时候常用的命令,以便于以后的复习参考,不正确的地方忘高手指教 。GDB是GNU开源组织发布的一个强大的UNIX下的程序调试器,GDB主要可帮助工程师完成下面4个方面的功能启动程序,可以按照工程师自定义的要求运行程序 让被调试的程序在工程师指定的断点处停住,断点可以是条件表达式 当程序被停住时,可以检查此时程序...
2019-01-19 18:11:32 418 1
原创 Linux 环境实现简单的TCP多并发服务器
在网络通信中,服务器通常需要处理多个客户端。由于客户端的请求会同时到来,服务器端可能会采用不同的方法来处理。总体来说,服务器端可采用两种模式来实现:循环服务器模型和并发服务器模型。循环服务器模型是指服务器端依次处理每个客户端,直到当前客户端的所有请求处理完毕,在处理下一个客户端。这类模型的优点是简单,缺点显而易见,这样会造成其他客户端等待时间过长。为了提高服务器的并发处理能力,引入了并发...
2019-01-18 14:20:52 555
原创 LInux UDP编程
在上篇博客中介绍了网络编程中常用的一些函数,和TCP服务器与客户端的程序,这篇博客将介绍TCP与UDP的区别,并用实例程序进行演示。1、TCP与UDP的区别TCP向应用层提供可靠的面向连接的数据流传输服务。它能提供高可靠通信(即数据无误、数据无丢失、数据无失序、数据无重复到达)。TCP是面向连接的协议,所谓面向连接,就是当计算机双发通信时必须先建立连接,然后进行数据通信,最后关闭连接,TC...
2019-01-18 10:50:40 1026
原创 Linux中网络编程常用函数详解
本片博客主要介绍TCP编程,包括TCP常用函数的介绍,以及实例演示1、函数说明在编程总常用的基本函数有socket()、bind()、listen()、accept()、send()、sendto()、recvfrom()等,下面开始介绍这些函数的功能以及使用方法:soscket():该函数用于创建一个套接字,同时指定协议与类型。socket返回的fd叫做监听fd,是用来监听客户端的,...
2019-01-17 15:28:25 623
原创 Linux网路编程基础
本片博客主要记录我在学习过程中对网络编程的基础,包括套接字、IP地址、端口以及字节序 1、套接字概述1.1、套接字定义:套接字是最早由BSD在1982年引入的通信机制,目前已经被移植到主流的操作系统中。对于应用开发人员来说,套接字(Socket)是一个特殊的I/O接口,也是一种文件描述符。Socket是一种常用的进程间通信机制,不仅能实现本地不同进程之间的通信,而且通过网络能够在不...
2019-01-16 15:44:49 196
原创 Linux中IO多路复用
本篇博客将说明linux中的阻塞IO、非阻塞IO以及这两种进行IO操作的困境,最后说明解决这种困境的方法,也就是IO多路复用1、阻塞式IO阻塞式IO是指在执行设备操作时,若不能获得资源,则挂起进程直到满足可操作的条件后在进行操作。被挂起的进程进入睡眠状态,被从调度运行器的运行队列中移走,直到等待的条件满足。内核中默认的都是阻塞式的实现方式,因为这种实现方式效率比较高,被阻塞时,该进程并不占...
2019-01-14 14:40:53 870
原创 Linux中编写简单的守护进程
1、守护进程概述守护进程就是通常所说的daemon进程,他是linux中的后台服务进程。他是一个生存期很长的进程,通常独立于控制终端并且周期性的执行某种任务,或等待处理魔种发生的事件。守护进程通常在系统开机启动时开始执行,在系统关闭时终止。linux中很多服务器都是通过守护进程实现的。由于在linux中,每一个系统与用户进行交流的界面成称为终端。每一个从终端开始执行的进程都会依赖于终端,这...
2019-01-10 17:57:43 2601 1
原创 Linux中使用syslog进行日志的打印
对于一个从单片机开发转向操作系统中的应用程序开发的攻城狮来说,对程序的调试方法的转换也是非常重要的。单片机的开发,一般使用jlink进行单步调试较多,但是对于在操作系统上进行应用程序一般都是比较庞大的,所以再使用单片机开发的调试思维就不现实啦。最常见的就是使用printf打印与syslog日志打印,对于printf的使用比较简单,所以这里主要介绍一下syslog的用法。syslog的调试信息的...
2019-01-09 07:52:18 9688
原创 Linux中exec族函数详解
(1)exec函数说明:fork函数是用于创建一个子进程,该子进程几乎是父进程的副本,而有时我们希望子进程去执行另外的程序,exec函数族就提供了一个在进程中启动另一个程序执行的方法。它可以根据指定的文件名或目录名找到可执行文件,并用它来取代原调用进程的数据段、代码段和堆栈段,在执行完之后,原调用进程的内容除了进程号外,其他全部被新程序的内容替换了。另外,这里的可执行文件既可以是二进制文件,也...
2019-01-08 09:29:38 1171
原创 Linux中获取和使用随机数
在linux系统中,有提供的API来产生随机数:srand初始化随机种子,rand产生随机数。rand(产生随机数)表头文件: #include<stdlib.h>定义函数 :int rand(void) 函数说明 :因为rand的内部实现是用线性同余法做的,他不是真的随机数,只不过是因为其周期特别长,所以有一定的范围里可看成是随机的(伪随机数),rand()会返回一随机...
2019-01-03 17:19:54 4219
原创 Linux API之获取系统时间
time系统调用返回当前时间以秒为单位的距离1970-01-01 00:00:00 +0000(UTC)过去的秒数。这个time内部就是用jiffies换算得到的秒数。其他函数基本都是围绕着time来工作的。函数原型是:time_t time(time_t *t); 传进去的是一个数据类型,这个函数会将这个数据进行填充这个函数有两种使用方法(1):通过传参来返回 time(&...
2019-01-03 15:40:44 3919
原创 制作简单的rootfs
分析简单的根文件系统中所必须的文件1.1在嵌入式系统中的根文件系统与桌面版的根文件系统文件基本上类似,所以用Ubuntu中根文件系统问模板,进行分析:1.1.1、bin sbin linuxrc 是必须的,但是这三个目录以及里面的文件都是移植busybox并安装的时候由busybox生成的1.1.2、etc 是很关键很重要的一个。目录中的文件都是运行时配置文件,都是直接...
2019-01-02 13:00:06 2128
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人