- 博客(164)
- 收藏
- 关注
原创 基于STM32F103的智能门禁系统
本人大二软工菜鸟一枚,大神不喜勿喷点这里功能演示GPIO、中断、RTC、UART、IIC、SPImain.c6.完整源码下载链接:https://pan.baidu.com/s/173JPHbgey1KizKu0NXReLQ提取码:hhhh代码还有许多缺陷,大家自行修正
2022-07-09 03:19:06 3782 37
原创 stm32--CAN
一.CAN是什么?CAN,全称为“Controller Area Network”,即控制器局域网,是国际上应用最广泛的现场总线之一,是一种多主方式的串行通讯总线。在当前的汽车产业中,出于对安全性、舒适性、方便性、低公害、低成本的要求,各种各样的电子控制系统被开发了出来。由于这些系统之间通信所用的数据类型及对可靠性的要求不尽相同,由多条总线构成的情况很多,线束的数量也随之增加。为适应“减少线束的数量”、“通过多个 LAN,进行大量数据的高速通信”的需要,1986 年德国电气商博世公司开发出面向汽车的 C
2021-05-26 19:42:51 42746 1
转载 opencv源码环境搭建
opencv源码环境搭建:https://blog.csdn.net/weixin_52288941/article/details/120614133。sudo gedit /etc/ld.so.conf.d/opencv.conf 添加。sudo gedit /etc/bash.bashrc 添加。2.进入opencv目录配置编译环境。1.安装cmake和依赖库。cmake之前已安装。
2023-08-07 10:22:30 283
转载 ffmpeg源码安装
注:如果报错找不到x264或x265,ubunut下多半是因为没有安装pkg-config。安装命令为:apt install pkg-config。ffmpeg源码安装:http://blog.yundiantech.com/?#需要提供路径, 让ffmpeg ffprobe等命令找到需要的依赖。ffmpeg -version提示找不到,原因是没有配置环境变量。#需要让os能够找到 ffmpeg ffprobe等命令。配置ffmpeg环境变量:gedit ~/.bashrc。5.编译ffmpeg。
2023-08-07 10:18:55 324
转载 samba服务器搭建
sudo smbpasswd -a chm //为用户chm设置samba密码。sudo /etc/init.d/smbd restart //重启samba服务。path = /home/chm/shared //linux中共享的目录的路径。writeable = yes //chm是自己的用户名,记得修改为自己的用户名。[shared] //windows中看到的共享目录的名称。valid users = chm //给samba服务设置账户。5.重启samba服务。
2023-08-07 10:18:01 225
原创 手把手写一个LED驱动(2)
(1)结构体(2)相关函数:cdev_alloc、cdev_init、cdev_add、cdev_delcdev_alloc:给cdev结构体分配内存cdev_init:初始化cdev_add:注册驱动cdev_del:注销驱动,并释放cdev_alloc申请的堆内存(1)sys文件系统的设计思想将内核中很多的数据结构以文件的方式展现在sys目录下,以便我们在应用层和内核交互(2)设备类的概念根据每个设备的功能特性划分成一个类(3)/sys/class/xxx/中的文件的作用。
2023-07-07 15:10:13 515
原创 手把手写一个LED驱动(1)
(1)整体流程梳理、注意分层(2)后续工作:添加读写接口(1)目前为止应用已经能够读写驱动(中的内存)(2)后续工作:添加硬件操作代码。
2023-07-07 14:35:49 2115
原创 10.海思平台图像的IQ调试
(1)IQ是目的,ISP是手段,调试是方法(2)掌握ISP和IQ调试的关键:相关概念、海思MPP中ISP的实现、PQTool工具Hi3518E V200R001C01SPC030\01.software\pc\PQ_TOOL\Hi3518E_PQ_V1.0.3.0是开发板端服务器软件Hi3518E V200R001C01SPC030\01.software\pc\PQ_TOOL\PQTools是PC端客户端软件。
2023-07-02 10:25:38 4538 1
原创 8.海思平台OSD的实现
用户一般都需要在视频中叠加OSD用于显示一些特定的信息(如:通道号、时间戳等),必要时还会填充色块。这些叠加在视频上的OSD和遮挡在视频上的色块统称为区域。REGION模块,用于统一管理这些区域资源。区域管理可以实现区域的创建,并叠加到视频中或对视频进行遮挡。例如,实际应用中,用户通过创建一个区域,通过,将该区域叠加到某个通道(如VENC通道)中。在通道进行调度时,则会将OSD叠加在视频中。一个区域支持通过设置通道显示属性接口指定到多个通道中(如:多个VENC。
2023-06-30 15:51:21 2704 1
原创 15.内核启动代码流程和最终归宿
(1)进程和线程。简单来理解,一个运行的程序就是一个进程。所以进程就是任务、进程就是一个独立的程序。独立的意思就是这个程序和别的程序是分开的,这个程序可以被内核单独调用执行或者暂停。(2)在linux系统中,线程和进程非常相似,几乎可以看成是一样的。实际上我们当前讲课用到的进程和线程的概念就是一样的。(3)进程/线程就是一个独立的程序。应用层运行一个程序就构成一个用户进程/线程,那么内核中运行一个函数(函数其实就是一个程序)就构成了一个内核进程/线程。
2023-06-28 01:49:36 957
原创 9.多路码流RTSP传输并对每路视频图像叠加OSD信息
四、由于所有发送线程共用一个发送函数vdRTPSendThread,所以要此函数中对各个线程进行区分,执行不同的函数体(可以通过线程传参来实现),在发送函数中判断环形缓冲区是否为空,不为空则一次一次地调用发送函数发出去;三、监听线程会等待播放器客户端连接,每当有一个链接就会创建一个线程去对接,在此线程函数中进行完OPTHIONS、Describe、Setup的响应后,注意点:保证最后需要几路码流就生成几个udp套接字和几个发送线程,每路码流对应一个udp套接字和一个发送线程。1.VPSS分两路通道。
2023-06-28 01:13:20 841
原创 7.MP4视频格式和mp4v2的移植
(8)box开头的4个字节(32位)为box size,该大小是整个box的大小,这样我们就可以在文件中定位各个box,如果size为1,则表示这个box的大小为large size,是一个很大的box,这里放不下他的box size值,真正的size值要在largesize域上得到。“stsd”包含了编码的信息,其存储的信息随媒体类型不同而不同。(9)size后面紧跟的32位为box type,一般是4个字符,如“ftyp”、“moov”等,这些box type都是已经预定义好的,分别表示固定的意义。
2023-06-28 01:07:21 1206
原创 6.H.264帧结构和RTSP协议源码框架
在新版的标准中,还包括了High、High 10、High 4:2:2、High 4:4:4、High 10 Intra、High 4:2:2 Intra、High 4:4:4 Intra、CAVLC 4:4:4 Intra等,每一种都由不同的profile_idc表示。帧的有效数据部分是不会出现(00 00 00 01)的,h264的标准规定有效数据不允许出现连续的3个00,会在第二个00后面,第三个00前面添加一个03进去,用(00 00 03 00)来表示(00 00 00)。
2023-06-18 03:51:56 4666 1
原创 5.海思平台上USB WIFI的移植实现局域网无线视频监控
(1)必要性:家用camera很多需要wifi联网功能(2)WIFI接口:SDIO or USB。
2023-06-15 05:07:07 1763
原创 4.图像sensor的特性和驱动解析
例子:sensor驱动自己提供操作曝光时间的函数和获取曝光时间的函数,然后将这个函数注册到ISP库和3A算法库,3A算法库根据外部光照强度计算出一个Sensor曝光时间的设置值,ISP库得到这个设置值,然后通过Sensor之前注册的回调函数,把这个值设置到Sensor的硬件寄存器中去,实现整个过程。是为 ISP 配置正确的输入时序。(1)修改驱动源码(sambashar\Hi3518E_SDK_V1.0.3.0\package\mpp\component\isp\sensor\ar0130)
2023-06-13 17:54:49 2696
原创 3.使用ORTP库传输视频码流到VLC播放
(1)openRTP,用C实现的一个RTP库(其实还有C++实现的,JAVA等实现的)(2)RTP(及RTCP)的实现有国际标准RFC3550规定,只要符合协议谁都可以自己写一个(3)实质是一个视频服务器,工作时客户端和服务器实时传递视频数据(4)一般认为RTP工作在传输层,但是其实RTP比TCP/UDP高一个层次。
2023-06-03 02:55:55 1256
原创 2.音视频基础及海思sample_venc解读
(1)视频的本质是多帧图片,图片的本质是RGB或rawRGB数据,要占用一段连续内存(2)视频的裁剪、缩放、修正处理(马赛克)等各种操作,本质上就是对内存中的数据进行运算(3)视频缓存池(VB, video buffer)就是一段很大,又被合理划分和管理的内存,用来做视频数据的暂存和运算场地(4)公共视频缓存池的公共2字,可以理解为全局变量,也就是各个模块都能访问的一段内存(5)看似视频缓存块在各个模块之间流转,实际上并没有内存复制,而是指针在传递。
2023-06-02 01:27:04 1820
原创 1.海思sdk快速上手
因为找不到zlib.h所以编译错误,zlib.h在tools/pc/zlib/tmp/include目录中有,只需要复制到tools/pc/jffs2_tool/tmp/include目录中即可。还有,要将tools/pc/zlib/tmp/lib目录下的libz.a libz.so libz.so.1 libz.so.1.2.7等4个文件复制到tools/pc/jffs2_tool/tmp/lib目录下,不然一会儿还得报错。4.4、开发板这边 复制/mnt/lib下的所有文件到/usr/lib。
2023-05-29 04:36:47 1310
原创 ubuntu16.04 编译错误: /bin/sh: 1: pushd: not found的问题和安装32位交叉编译工具链的兼容包
编译错误: /bin/sh: 1: pushd: not found的问题。首先要打开64位系统对32位的支持。其次是安装gcc multilab。64位ubuntu 兼容32位。
2023-05-28 16:10:00 658
原创 18.x210 bsp使用方法
实现原理就是:用一个函数来完成编译一个(譬如编译内核用build_kernel函数,编译inand的uboot用build_bootloader_uboot_inand),然后用相应的一些变量来控制这个函数要不要被编译(譬如uboot_inand变量=yes就表示要编译inand版本的uboot,=no就表示不要编译),我们编译时通过-xxxxx来传参时,这些传参会影响这些变量的值=yes或者=no。解决方案是先安装这些必要的软件包。(1)大部分的ARM架构的linux平台的bsp的内容和结构都是相似的。
2023-05-26 22:28:08 161
原创 17.使用busybox制作根文件系统
etc/init.d/rcS文件是linux的运行时配置文件中最重要的一个,其他的一些配置都是由这个文件引出来的。这个文件可以很复杂也可以很简单,里面可以有很多的配置项。(1)mdev是udev的嵌入式简化版本,udev/mdev是用来配合linux驱动工作的一个应用层的软件,udev/mdev的工作就是配合linux驱动生成相应的/dev目录下的设备文件。(2)因为这个问题涉及到驱动,因此详细讲解要等到驱动部分。这里我们只是通过一些直观的现象来初步理解udev/mdev的工作效果。
2023-05-23 22:06:23 1033
原创 16.rootfs的两种制作形式
(2)最初在开发主机中随便mkdir创建了一个空文件夹,然后向其中添加一些必要的文件(包括etc目录下的运行时配置文件、/bin等目录下的可执行程序、/lib目录下的库文件等···)后就形成了一个文件夹形式的rootfs。总结:一套linux体系,只有内核本身是不能工作的,必须要rootfs(上的etc目录下的配置文件、/bin /sbin等目录下的shell命令,还有/lib目录下的库文件等···)相配合才能工作。镜像文件形式的根文件系统是由文件夹形式的根文件系统使用专用的镜像制作工具制作而成的。
2023-05-23 19:42:50 682
原创 14.Linux内核的源码目录结构和配置体系
(1)我们使用2.6.35.7版本的内核。这个版本的内核有三种:第一种是kernel.org上的官方版本,第二种是三星移植过的,第三种是九鼎X210的移植版本。这里使用第三个。(2)进入源码目录下,make distclean清理然后再次打包传输到windows下去解压分析;(3)解压后最终在windows下得到了一个kernel的源码目录树,这个源码目录就是九鼎以三星移植过的内核为原材料自己针对X210移植后的内核版本。
2023-05-15 22:20:53 1008
原创 13.内核、发行版、驱动、根文件系统之间的关系
(1)linux、windows、android、ucos就是操作系统(2)操作系统本质上是一个程序,由很多个源文件构成,需要编译连接成操作系统程序(vmlinz、zImage)(3)操作系统的主要作用就是管理计算机硬件,给应用程序提供一个运行环境。(1)因为linux内核很庞大,代码量很大、东西很多,如果设计时完全设计成一体(各个文件、各个函数之间紧耦合),复杂度超出了人所能理解的范围。所以模块化设计也是一种必要。
2023-05-15 21:59:07 751
原创 12.移植三星官方的uboot到x210
(1)上面将寄存器的值改了后相当于是对硬件配置部分做了更改。但是uboot中DDR相关的一些软件配置值还没更改,还在原来位置,所以要去更改。(2)#define MEMORY_BASE_ADDRESS 0x20000000改为:(1)解决问题的第一步,是定位问题。定位到出问题的代码处。通过搜索关键字EXT_CSD将问题定位在drivers/mmc/mmc.c的818行。(2)找到出问题的代码之后,实际修改程序不一定改的是这一句代码。
2023-05-10 16:07:36 1133
原创 11.uboot移植Linux-SD驱动代码解析
(1)至此整个MMC系统初始化结束。(2)整个MMC系统初始化分为2大部分:SoC这一端的MMC控制器的初始化,SD卡这一端卡本身的初始化。前一部分主要是在cpu_mmc_init函数中完成,后一部分主要是在mmc_init函数中完成。(3)整个初始化完成后去使用sd卡/iNand时,操作方法和mmc_init函数中初始化SD卡的操作方式一样。读写sd卡时也是通过总线向SD卡发送命令、读取/写入数据来完成的。
2023-05-08 16:02:46 675
原创 10.uboot的环境变量相关源码分析
(3)真正执行保存环境变量操作的是:cpu/s5pc11x/movi.c中的movi_write_env函数,这个函数肯定是写sd卡的,将DDR中的环境变量集合(其实就是env_ptr指向的内存区域,大小16kb = 32个扇区)写入iNand中的env分区中。如果环境变量为空则使用程序中全局变量的值;(2)getenv函数是直接返回这个找到的环境变量在DDR中环境变量处的地址,而getenv_r函数的做法是找到了DDR中环境变量地址后,将这个环境变量复制一份到提供的buf中,而不动原来DDR中环境变量。
2023-05-08 00:51:42 1308
原创 9.uboot命令体系 源码解读并从中添加命令
(1)在uboot/common/command.c中添加一个命令,叫:mycmd(2)在已有的.c文件中添加命令比较简单,直接使用U_BOOT_CMD宏即可添加命令,并给命令提供一个do_xxx的对应的函数就完成了。(3)添加完成后要重新编译工程(make distclean;make),然后烧录uboot进开发板去使用这个命令。(4)还可以在函数中使用argc和argv来验证命令行传参。以下是uboot命令行下验证我们添加自定义命令是否成功。
2023-05-07 13:42:38 3172
原创 8.uboot 启动内核代码分析
第一步:将内核搬移到DDR中第二步:校验内核格式、CRC(判断内核是否完整)等第三步:准备参数第四步:跳转执行内核。
2023-05-06 15:40:49 2926
原创 7.uboot第二阶段 start_armboot函数代码分析
这个函数整个构成了uboot启动的第二阶段。(1)都是板级硬件的初始化以及gd、gd->bd中的数据结构的初始化。譬如:cpu_init:空board_init:网卡初始化、机器码(gd->bd->bi_arch_number)、内核传参DDR地址(gd->bd->bi_boot_params)interrupt_init:Timer4初始化为10ms一次env_init:检查可用的环境变量,没有什么实质性的东西,此时并未将环境变量从SD卡复制到内存。
2023-05-04 01:42:00 2776
原创 3.shell编程、makefile学习笔记
(1)shell可以理解为软件系统提供给用户操作的命令行界面,可以说它是人机交互的一种方式。(2)我们可以使用shell和操作系统、uboot等软件系统进行交互。具体来说就是我们通过shell给软件系统输入命令然后回车执行,执行完成后又会回到shell命令行可以再次输入命令执行。(3)上述的操作方式一般情况下工作很好,但是有缺陷。
2023-05-02 18:53:04 2415
原创 5.uboot主Makefile、mkconfig配置脚本、链接脚本分析
(1)uboot的版本号分3个级别:VERSION:主板本号PATCHLEVEL:次版本号SUBLEVEL:再次版本号EXTRAVERSION:另外附加的版本信息这4个用.分隔开共同构成了最终的版本号。(2)Makefile中版本号最终生成了一个变量U_BOOT_VERSION,这个变量记录了Makefile中配置的版本号。(3)include/version_autogenerated.h文件是编译过程中自动生成的一个文件,所以源目录中没有,但是编译过后的uboot中就有了。它里面的内容是一个宏定义,宏定
2023-05-02 18:27:29 227
原创 6.uboot第一阶段 start.S代码分析
(1)config.h在include目录下,是配置过程中生成的文件,即mkconfig脚本中生成的,,这个文件的内容是包含了一个头文件:#include,这个头文件的内容是一堆宏定义,是跟uboot的配置相关,通过条件编译影响uboot的走向,使得uboot具有可移植性。
2023-05-02 17:03:45 1001
原创 4.x210官方uboot配置编译和源码目录分析
(5)我们在linux下维持一份uboot,在windows下也维持一份uboot,在我们没有开始任何工作之前,这两份uboot内容一样的,都是九鼎官方的uboot 内容。我们这样做目的是:在linux中进行编译、在windwos下进行代码分析和观看。(2)uboot也要先配置,配置方法是:首先cd进入uboot源码的根目录,然后在根目录下执行:make x210_sd_config。在工程的总Makefile中会设置交叉编译工具链的路径和名字,必须确保这个路径和名字和我们自己装的一致,否则编译会出错。
2023-04-12 01:08:02 648
原创 2.Ubuntu22.04搭建tftp服务器并测试成功烧写镜像到开发板DDR
在新装的ubuntu22.04上安装tftp按照网上的教程,一直出错。教程如下:#########################以下为网上教程##################################安装xinetd:安装tftp和tftpd:或者安装tftp的增强版本tftp-hpa:建立配置文件。
2023-04-10 21:46:38 590
原创 1.Windows、开发板、Ubuntu虚拟机三者互相ping通
1.设置Windows下的ip:192.168.1.10 和 子网掩码:255.255.255.0。3.2设置UbuntuLinux环境下的ip:192.168.1.30。2.设置开发板Linux环境下的ip:192.168.1.20。3.1设置虚拟机网络编辑器,设置为桥接到有线网卡。1.1在控制面板中关闭Windows的防火墙。0.使用网线连接开发板和主机。3.设置虚拟机为桥接模式。4.三者互相ping通。
2023-04-10 16:34:25 1212
转载 arduino WIFI避障小车
项目整合:实现小车方向控制,如果小车距离障碍物的距离小于10厘米 ,并后退一定的距离。二. 安卓模拟器(夜神),适合 没安卓手机的同学,下载,双击像普通程序一样安装。一. 编程软件 Eclipse AD下载,解压。Android导入程序包。
2023-04-07 21:58:35 605
原创 x210---电容式触摸屏学习笔记
2.1、电阻式触摸屏和电容式触摸屏的特点对比(1)耐久性 电容式触摸屏不容易坏,电阻式触摸屏易坏(2)抗干扰性 电容式触摸屏差一些,电阻式触摸屏要好一些电容式触摸屏依赖电容效应,当手机屏幕上有灰尘、水等杂物时,会影响电容式触摸屏的触摸响应电阻式触摸屏依赖外部的压力(3)精准度 电容式触摸屏差一些,电阻式触摸屏好一些电阻式触摸屏根据测量触摸点的电压,然后进行AD转换而电容式触摸屏是根据电容感应扩散的电流进行分析,电容IC本身算法计算存在缺陷。
2023-04-01 22:03:14 594
空空如也
GOP越大,画面质量越好的本质是啥呀
2023-10-15
音视频开发的问题好难不会
2023-09-28
TA创建的收藏夹 TA关注的收藏夹
TA关注的人