- 博客(78)
- 资源 (1)
- 收藏
- 关注
原创 海思RTSP推流第二篇——海思平台和H264编码Demo
记得行内一个老师说过,基础不牢,地动山摇,对于海思的编码过程还是不是很熟悉所以回头把这个分析一遍。海思平台:官方手册:HiMPP IPC V2.0 媒体处理软件开发参考,里面有介绍海思IPC平台的架构和框架;这里贴几个图具体还得查看文档。Hi35xx 典型的系统层次图:海思媒体处理平台架构:分为好几个模块,视频输入( VI)、视频处理( VPSS)、视频编码( VENC)、视频解码( VDEC)、视频输出(VO)、视频侦测分。
2024-08-04 17:24:12
833
原创 海思RTSP推流第一篇——H264结构分析
要对RTSP有清晰的认识和理解就需要知道推流的是什么数据,RTSP 只是视频传输的一个统称,实际分为RTP RTCP RTSP等不同部分,需要先对其传输流即H264结构有一个完整的分析。4-8为00101,转为十进制5,参考第二幅图:5对应IDR图像中的片(I帧)4-8为00111,转为十进制7,参考第二幅图:7对应序列参数集SPS。4-8为01000,转为十进制8,参考第二幅图:8对应图像参数集PPS。(3)第4~8为是nal单元类型,表示slice的类型,例如。一、H264 NAL结构简介。
2024-08-01 15:12:12
941
原创 uboot启动参数的解释
关于uboot启动参数的解释暂时记录我目前开发中用到的spi nor flash和emmc。注释里面都做了解释,sf是uboot的命令还有write erase等。一、以spi nor flash存储介质的启动参数。二、以emmc做启动介质的启动参数。
2024-07-18 08:59:17
236
原创 驱动框架——CMSIS第一部分 RTE驱动框架介绍
什么是CMSIS(cortex microcontrol software interface standard一种软件标准接口),官网地址:https://arm-software.github.io/CMSIS_6/latest/General/index.html包含的core、driver、RTOS、dsp、nn等部分,这些源码文件的编写有的是ARM官方编写,有的是半导体厂商编写,标准是ARM联合这些半导体厂商联合制定的。
2024-07-17 13:34:55
612
原创 1.HI3559AV100 官方开发板sample运行
编译sample目录:修改Makefile.param目录下sensor_type。目录下的ko和lib目录下文件复制到开发板根目录下的ko和lib目录下。编译好后把sample目录下的demo运行文件复制到板子上。实验前准备:通过NFS方式挂载到开发板与主机通信传输文件。驱动和库的部署:把MPP目录下的。
2024-07-04 21:12:30
354
原创 数据结构1——链表
双向循环链表 [Double Circular Linked List] : 由各个内存结构通过指针 Next 和指针 Prev 链接在一起组成,每一个内存结构都存在前驱内存结构和后继内存结构,内存结构由数据域、Prev 指针域和 Next 指针域组成。双向链表的遍历是双向的,即如果把从链头的 Next 一直到链尾的[NULL] 遍历方向定义为正向,那么从链尾的 Prev 一直到链头 [NULL ]遍历方向就是反向;单向的实现就是在单链表的基础上,把链尾的 Next 指针直接指向链头,形成一个闭环;
2024-04-18 21:20:49
318
原创 项目开发dump记录
描述:早期刚接触rtos容易出现的问题,把定时器当task来使用,但是定时器定时到后是产生中断的行为和定时器的有限级执行不一样可以相互打断,在定时器服务函数中放置执行时间很长的函数导致的这个问题,还会出现任务互斥的问题,一般我们希望定时器作为时间计数使用,执行的函数也只是修改某个标志之类的任务,要确定其运行时间不会太长导致中断时间执行过长dump掉;
2024-04-04 17:33:21
167
原创 S5PV210驱动框架下的驱动安装以及合并到内核中
(1)关键点:Kconfig、Makefile、make menuconfig。编译进内核则无需手动装载直接进入/sys/class下就能找到驱动的类别属性等。编译成模块的驱动需要手动装载,才能在/sys/class下找到驱动的类。第1步:将写好的驱动源文件放入内核源码中正确的目录下。第2步:在Makefile中添加相应的依赖。第3步:在Kconfig中添加相应的配置项。第4步:make menuconfig。
2023-08-27 23:23:35
133
原创 RTThread学习有关的Keil的两个符号 $Sub$ $main 与 $Super$ $main
我们驱动文件在跳转main函数时由于定义有int $Sub$$main(void) 所以先执行这个函数,在这个函数中主要是进行系统、板级初始化,在这里面穿件了一个主线程main_thread_entry,而主线程里面调用了 $Super$$main()就回到main函数执行;具体调用方法就是程序中包含有main函数,和 $Sub$ $main 、 $Super$ $main 两个符号。Keil的两个符号$Sub$ $与 $Super$ $是其做的打“补丁”功能。可能会引起迷惑的地方。
2023-08-25 23:15:32
662
原创 基于CMSIS的外设/设备驱动框架
我们要与Driver_SPI.h对接的驱动文件在安装的芯片软件包里。涉及的文件有CMSIS目录下的,对外设驱动做了统一的驱动模型封装。下的DriverTemplates目录下只是做了驱动模型的壳子。这里就把我们上面的驱动接口对接到具体的实现函数。对此基于CMSIS驱动框架的大致结构就是如此。对于外设配置的相关驱动对接的引脚再。文件RTE_Device.h里。
2023-08-25 14:58:54
533
1
原创 RTE_Driver驱动框架和Keil下开发需要支持的xxx_DFP软件包分析
LPC1700_DFP(Device Family Pack)是针对NXP(现在的Nexperia)LPC1700系列微控制器的一套软件包,用于支持开发和编程这些微控制器。通过使用LPC1700_DFP,开发人员可以更方便地开发基于LPC1700系列微控制器的应用程序,因为它提供了标准接口和软件资源,避免了从头开始编写底层驱动代码的工作。总之,RTE_Driver是Keil MDK中的一个特性,旨在简化设备驱动的集成和使用,加速嵌入式应用程序的开发过程。以LPC1700_DFP为例。
2023-08-25 14:00:48
1626
原创 LPC1768运行threadx数组越界导致出现硬件错误死机问题的排查
调试过程中发现在汇编启动文件启动后跳转main函数即刻就发生了错误异常,先排除是在操作系统运行过程中的问题,而且是硬件错误异常所以先对导致改错误的可能进行排查,考虑到和产生硬件错误异常相关的几种可能1.数组越界操作 2.内存溢出,访问越界 3.堆栈溢出,程序跑飞 4.中断处理错误;通常情况下,程序的大小分析报告还会包括其他信息,如栈大小、堆大小等,以帮助开发人员进行存储器管理和优化。这段信息是一个程序的大小分析报告,通常在编译或链接过程中生成,用于显示程序的代码和数据段在存储器中所占用的大小。
2023-08-25 09:30:41
170
转载 【无标题】
使用TFTP和NFS从虚拟机下载文件或者制作根文件系统的前提是开发板能够ping同虚拟机,但是很多人在这三者之间互ping总是不成功,捣鼓了一个晚上成功解决,下面记录一下,希望可以帮到遇到相同问题的小伙伴。我们要将开发板与我们的主机用网线连接好,要确保网线和网口等等硬件是好的,在我们ping的时候开发板的网线一般会黄灯一直亮,然后绿灯会闪烁,这样子一般我们的硬件是可以工作的,如下图。在解决这个问题的时候,由于没有关闭防火墙,一直ping不通,耽误了很多的时间和精力。2、软件部分(三个设备一定要在同一网段)
2023-08-15 21:27:45
47
原创 ST公司的标准库、HAL库、LL库介绍
在ST的嵌入式开发中,有三种主要的库,分别是标准库、HAL库和LL库。标准库是ST在早期嵌入式产品上使用的库,它提供了对ST的各种微控制器外设的低级别访问。HAL库是ST引入的一个高级别的库,旨在提供硬件抽象层的功能。随着时间的推移,ST逐渐将重点从标准库转移到HAL和LL库,因此标准库在较新的ST产品中可能不再推荐使用。HAL库在功能上介于标准库和LL库之间,提供了更高级别的API,使开发者能够更快速地进行开发。LL库是ST引入的较低级别的库,它提供了更底层的控制和访问方式,类似于标准库。
2023-08-15 17:49:52
1089
原创 汇编调用C语言定义的全局变量
在threadx移植中,系统的systick通过了宏定义的方式定义,很难对接库函数的时钟频率,不太利于进行维护。所以在C文件中自己定义了一个systick_Div的变量,通过宏定义方式设定systick的时钟频率。在汇编下要加载这个systick分频系数。总结:对汇编指令需要进一步熟悉。
2023-07-26 15:25:53
1355
原创 *((unsigned int*),void * ,void **
void ** 表示二重指针,其指向的指针所指向的数据类型不确定。void *表示不确定类型指针,即指针所指向的数据类型不确定。)addr)表示强制类型转换,一般用于对寄存器的操作。
2023-07-25 15:36:20
458
原创 MDK版本坑error: A1167E: Invalid line start
移植threadx时对于.s的汇编文件报了大量错误,到文件里查看是汇编文件中的注释使用的C的注释方法,导致大量报错。5.30的可以通过设置修改,我的版本是5.29按官方的修改还是报错,只能更新版本了。MDK官网查到原因,一个是版本问题,一个是设置问题,
2023-07-19 14:49:58
880
原创 linux驱动makefile解析
make -C:这是Makefile的命令,表示跳转到-C后指定的目录执行该目录下的Makefile。其实就是去执行内核的顶层Makefile,通过传参给顶层 Makefile编译成驱动;modules:标明是要编译成驱动文件,具体要去看内核顶层Makefile中对modules传参的处理;M=pwd:Makefile在构造modules目标之前返回到模块源代码目录;内核源码要和加载驱动的内核一致,否则可能报错;重点有两个一个就是内核目录。装载驱动的内核源码目录。
2023-07-05 21:53:13
264
原创 循序渐进学RTThread-线程的创建
尝试学会以移植为最终目标,循序渐进学习RTThread,通过分析RTThread官方的demo程序,学习从任务线程的创建到调度的一些细节最终到自己移植一份RTThread工程简单的点灯到项目落实,把以前做的项目移植到RTThread上。
2023-05-22 11:42:34
117
转载 source insight修改字符编码
source insight在使用这款软件的时候都遇到过大大小小的问题,出现乱码就是比较常见的一个问题,出现乱码的情况有可能是因为软件的编码格式错误导致的,所以我们只需要设置一下编码格式就可以解决这个问题,很多用户还不知道要如何设置,那么小编接下来就跟大家分享一下具体的操作方法,感兴趣的朋友不妨一起来看看这篇教程,希望能帮到大家。4.另外我们还可以点击软件界面上方的文件选项,点击之后在出现的选项中点击reload as encoding这个选项也是可以打开选择编码的界面的。
2023-04-17 11:29:57
4399
转载 Cubemx安装时报错: Cannot run program “…\jre/bin/java”
直接双击运行官网下载的安装包exe文件时,会临时解压到C盘中再运行解压后的exe文件,中间过程中不确定出现什么异常(可能是公司电脑上加密系统影响)导致解压后的文件夹中,\jre/bin/java文件夹下没有java.exe文件,从而导致安装过程中报系统找不到指定的文件的错误。将官网下载的STM32CubeMX安装包.exe文件解压而不是直接双击运行,解压完成后再进入解压后的文件夹中找到.exe文档,再双击运行即可成功安装。
2023-03-22 14:22:36
146
原创 uboot主目录下Makefile文件的分析,以及配置过程分析
主Makefile文件的主要作用是配置和指导编译uboot,可以从大局观来看到Makefile的编译过程,理解uboot的可移植性,通过选择不同编译条件可以执行不同架构和SOC的uboot编译。
2023-03-19 15:16:30
641
原创 ucOS实时系统的一些概念
对于简单的小系统中使用的一般是前后台系统也叫超循环系统,应用程序是一个无限的循环,循环中的完成的操作叫后台系统,中断服务等相关的叫前台系统。可以被一个以上任务使用的资源,这里涉及到一个叫互斥的概念,对于多个任务只能有一个任务独占该资源时叫互斥。件态 WAITING,指该任务在等待,等待某一事件的发生,(例如等待某外设的 I/O 操作,等。运行态的任务是指该任务掌握了 CPU 的控制权,正在运行中。结束目前的等待,等等)。备好,可以运行了,但由于该任务的优先级比正在运行的任务的优先级低,还暂时不能运行。
2022-10-26 21:29:55
331
原创 X210基础字符驱动创建设备关联和虚拟内地址映射
首先明确的是对于驱动的作用类似于为应用程序提供接口用来关联设备和操作设备进行打开,读写等操作,在上篇的总结中了解到了驱动的开发框架,在此基础上进行系统设备和驱动程序的关联,首先是需要创建设备文件,这个设备文件放在根目录下的/dev/下,可以查看/dev/目录下的设备可知道当前系统运行的设备有哪些,可以看到有不少设备文件这里截取部分。需要注意的是我们创建的设备文件的主次设备号不能被其他的设备文件已经使用,这里创建一个设备文件,主设备号选250 次设备号选0。这里是通过什么把我们的设备文件和驱动关联的呢?
2022-10-06 15:41:56
364
原创 X210驱动框架学习和实践
为对应在Ubuntu下的源码树目录,而对于我们开发板所烧录的linux系统则需要提供内核源码树,原因是我们后面编写的驱动是在对应的系统下去安装的,为了保证可以进行同时避免不同版本的兼容性问题最好选择我们所烧录的内核版本作为其驱动的内核源码树。然后通过Makefile帮助编译,在通过cp命令将.ko文件拷贝到我们挂载的根文件系统上,接下来就是开发板开机挂载上根目录然后进入到驱动文件目录下去安转驱动文件。驱动编译所需的linux内核的源码树目录,对于在Ubuntu下的内核源码树可以通过shell命令去分配,
2022-10-04 15:18:59
553
原创 制作rootfs镜像,通过fastboot烧录到x210开发板中验证
在前面已经完成了uboot的编译,kernel的移植适配,和通过busybox制作根文件系统,并且通过nfs方式成功挂载,现在后面要做的就是把rootfs制作成镜像文件然后烧录验证。开发板,连接串口线用于信息的输出,连接USB OTG用于文件的下载(驱动没安装需要安装,设备管理器下确定设备运行正常),电源线,(网线可以不用)(5)修改uboot下的参数,这些参数是传给内核的,rootfs挂载方式,控制台输出,波特率设置等。(4)修改uboot下的参数,烧写完成复位,进入到uboot下修改启动参数。
2022-09-20 00:32:33
818
原创 uboot启动参数详解和一些细节
dev/nfs nfsroot=192.168.1.105:/home/hawen/zyp_linux/nfs/rootfs ip=192.168.1.20:192.168.1.105:192.168.1.1:255.255.255.0::eth0:off 这里的参数表示根文件系统通过nfs的方式进行挂载,这里的/home/hawen/zyp_linux/nfs/rootfs 是我们主机下通过busybox挂载根文件系统的挂载点。init=/linuxrc 表示内核启动后执行的第一个程序。
2022-09-18 21:11:44
2318
原创 成功启动系统和通过nfs挂载根文件系统后进行相关的系统配置和优化
这里的是含有密码的,而且这个密码进行的加密,这里的这个文件下只看到了这个XEkxNPCSDuKwQ是其加密后的密文,对于我们刚移植可以不需要这个,先将其删除后发现登陆只需要输入用户名而不需要密码,回车即可进入控制台,可以通过passwd root的方式进行设置密码。多提一嘴:有可能会发现系统启动后控制台输出没有init.d/rcS这个文件,可能是在在windows下编辑的这个文件,需要在串口输出的控制台下打开这个文件删除每一行后面的^M字符,太多坑了。接下来就是对系统进行相关的配置。下一个文件fstab。
2022-09-17 01:02:44
670
原创 解决Failed to execute /linuxrc. Attempting defaults...这个大坑,这里是我遇到的其中一个原因
网上看到有很多方法都解决不了,也不像是这样问题的,奈何功力太浅只能不断排错,又发现我在gcc下cp过来的lib库也复制错误,但是也没能解决,试了很多最后看到配置的挂载参数少了一个目录,于是试着修改在启动给解决了,原来配置的是。这个报错太坑了,网上找了有不少于十几种,有的也没解决还在说别人的方法有错,归根结底还是这个报错包含的错误太多,不能像编程语法错误提示一样寻根见底,我这里的错误打印是这样的。只能说这里太多坑,一个在配置环境上,一个在参数配置上。多说一句要知行合一,多实践,真的在其中能学到不少东西。
2022-09-16 13:48:46
472
原创 实践 uboot kernel编译下载
对于kernel的编译其实差不多,在kernel文件下的主Makefile文件搜索也能找到相关信息,通过make menuconfig可以通过图形化的方式来对内核的模块进行添加裁剪,编译成模块等配置,在通过make zImage -j16的方式来进行内核的编译,(题外话:不得不说5800x16线程让编译不到1分钟完成了编译,太舒服了),编译完成后在kernel文件下的arch/arm/boot/目录下即可找到编译生成的zImage内核镜像文件。后面内核还是挂了,但是已经执行到这一步了,算是阶段性胜利吧。
2022-09-15 01:12:20
443
原创 Linux下交叉编译工具链的安转和配置总结
一般在解压了交叉编译工具链后接下来的一步是添加环境变量,可以在用户的家目录下的隐藏文件.bashrc中的最后一行添加,也可以在系统启动的配置文件中添加,只要将其添加到PATH即可,也可以手动添加只不过每次关闭终端和开机要重新添加;比如在 /.bashrc中,添加exportPATH=/usr/local/arm/arm−2009q3/bin:PATH即可,也可以手动添加只不过每次关闭终端和开机要重新添加;比如在~/.bashrc中,添加export PATH=/usr/local/arm/arm-2009q
2022-06-26 14:03:34
1412
转载 undefined reference to `__aeabi_unwind_cpp_pr0 问题的解决
undefined reference to `__aeabi_unwind_cpp_pr0' 问题解决办法
2022-06-26 12:51:34
811
原创 Linux下shell脚本的编写
认识脚本脚本(Script),是使用一种特定的描述性语言,依据一定的格式编写的可执行文件。——摘自百度百科长用的脚本有shell、python…学习shell脚本的第一天掌握知识有:shell脚本的组成(如何编写一个shell脚本)shell脚本的执行(两种1.给予执行权限;2.解释器运行,不需要全权限shell中的符号shell中管道的使用shell的输入和输出shell中的变量shell数组shell中的运算(在shell中一般除理的是整型数据,浮点型需要经过处理)正文she
2022-05-14 23:17:23
2314
原创 shell脚本各$_变量的学习,后期会做进一步总结
变量 含义$0 当前脚本的文件名$n 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2。$# 传递给脚本或函数的参数个数。$* 传递给脚本或函数的所有参数。$@ 传递给脚本或函数的所有参数。被双引号(" ")包含时,与 $* 稍有不同,下面将会讲到。$? 上个命令的退出状态,或函数的返回值。$$ 当前Shell进程ID。对于 Shell 脚本,就是这些脚本所在的进程ID。注:shell和Makefile有相同的东西,但是含义不同,这个要加以区别
2022-05-10 14:01:50
130
原创 E: 无法获得锁 /var/lib/dpkg/lock - open (11: 资源暂时不可用) E: 无法锁定管理目录(/var/lib/dpkg/),是否有其他进程正占用它?
E: 无法获得锁 /var/lib/dpkg/lock - open (11: 资源暂时不可用)E: 无法锁定管理目录(/var/lib/dpkg/),是否有其他进程正占用它?问题出现原因:直接切断虚拟机VM电源,导致资源一直被占用未被释放,下次关闭虚拟机之前还是得先关闭Ubuntu在关闭虚拟机问题解决:直接rm掉占用的进程即可命令如下:sudo rm /var/cache/apt/archives/locksudo rm /var/lib/dpkg/lock完成...
2022-04-05 10:55:40
1930
原创 WMware下与Ubuntu共享文件夹的设置
这个功能很早就学过了,有一些细节的东西以前没注意所以今天做的时候怀疑人生,VMware这个软件要建立一个共享文件名称,不然无效…设置方法在虚拟机的设置下启用共享文件夹细节:起一个名称,不然你在根目录下的mnt/hgfs下找不到文件的记得起名就正常了,mnt/hgfs下也找到了共享文件夹...
2022-04-03 15:33:57
958
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人