- 博客(46)
- 资源 (10)
- 收藏
- 关注
原创 Jetson Orin MultiMedia 使用总结
处理通过CUDA来处理,说明一点 这里的处理后的outbuf 是cudaMallocHost的分配结果,CPU和GPU可以共享,不需要额外的映射 Map的操作。首先是按照格式参数 YUV422 YUV420 YUV444等,具体按照图片的长宽来分配具体的缓存大小。pitch 多少是实际的输入参数1024对齐的结果。其他文章会详细介绍。特别需要注意的是 U V 分量开始的点 分别为 288 和 432,高 / 2 和 高度 3/4的起点。有了图片同样有了输入的缓存大小以及形状,后面就可以处理YUV的数据了。
2023-04-25 12:37:06
1240
转载 gcc 优化选项 -O1 -O2 -O3 -Os 优先级,-fomit-frame-pointer(不积跬步无以至千里)
-fomit-frame-pointer 在优化时候被启用,带来了效率的提升。看到一篇比较详细记录编译选项的文章,转发一下,同时给自己作一下备忘。少优化->多优化:O0 -->> O1 -->> O2 -->> O3-O0表示没有优化,-O1为缺省值,-O3优化级别最高英文解析:`-O ' `-O1 ' Optimize. Optimizing compilation takes somewhat more time, and a
2022-07-03 01:54:34
2293
原创 Nvidia Jetson Xavier 交叉编译multimedia api
Jetson Xavier 更新Veye 摄像头的相关dtb与Image。交叉编译multimedia api。
2022-01-18 17:54:17
5071
原创 百度Apollo CyberRT 之通讯性能测试
很久没写博客了,最近有时间总结一下工作内容,顺便记录一下性能测试 – 百度Apollo Cyber_RT 6.01.1一对多的情况: 一个发送者,三个接收者。目的是保障三个接受者可以有顺序的接收,优先级高的接收者最先获取数据,以此类推。(测试数据大小为10KB)测试结果:发送者以2ms(rate(500))频率发送。接受者可以按照2ms时间间隙接收。但是接收过程会有无序,时间间隔抖动现象。大于10ms间隙后无乱序以及抖动等现象。绿色方框内:标示接收者_1 时间自上而下时间间隔大致...
2021-09-29 22:24:51
2266
原创 关于 C++ thread_local 变量理解
1,类中的方法不是所有类对象独有的。换句话说:一个类的多个对象,共享同一份类成员方法。函数是共享的。2,同一个类的多个对象,使用this区分。(类内部访问)每个类有自己的指针,构造对象时候确定。3,使用静态(static)修饰的成员方法没有this指针,可以通过XXX::xxx(域名)方式调用。问题来了:假设同一个类的多个对象,共用同一个成员方法。通过这个成员方法如何区分不同的对象?并且调用方法时static的静态方法,不需要通过指针应用等方式调用相应的对象防范。这里提一下thread_lo
2021-01-08 18:01:57
877
原创 多线程中PTHREAD_MUTEX_RECURSIVE的理解
参数PTHREAD_MUTEX_RECURSIVE表示在同一个线程中可以多次获取同一把锁。并且不会死锁。 问题来了: 1,如和测试这个参数的属性导致程序不一样的结果? 2,为什么一定要同一个线程多次获得同一把锁? 下面先看代码: #include <pthread.h>#include <stdio.h>...
2020-05-08 16:16:38
8197
2
原创 NVIDIA CUVID硬件解码 - cuvidCreateVideoSource() 捕捉rtsp流
写这篇文章是应为之前的网上很多文章分析: cuvidCreateVideoSource( )这个函数不支持一些视频流:rtsp类型过来的视频信号。 在NVIDIA的Decode实例中使用的是本地的视频文件:1080.246,720.mp4等视频文件。创建视频源用的是本地文件。 调试开发环境: 1,Jetson TX...
2020-03-18 00:01:11
5348
25
原创 Vsomeip交叉编译(AARCH64)中涉及到的boost移植
最近在做arm交叉编译,其中需要用到boost库。问题随之而来,记录一下细节以及网上文章疏忽的知识点。 1,boost中的版本不同,导致头文件中的内容也有所不同。所以当移植库使用了boost,一定要注意boost的版本。 vsomeip中使用的boost库是要求大于等于boost 1.55,随后在host为x86的主机上也使用过boo...
2019-11-29 12:59:01
6414
5
转载 C++ 左值右值,用于移动(move)和转发(forward)
新标准重新定义了lvalue和rvalue,并允许函数依照这两种不同的类型进行重载。通过对于右值(rvalue)的重新定义,语言实现了移动语义(move semantic)和完美转发(perfect forwarding),通过这种方法,C++实现了在保留原有的语法并不改动已存在的代码的基础上提升代码性能的目的。作为一个C++0x标准的初学者,理解这些概念其实还有有一定的困难的,加上网上能...
2018-06-30 14:03:56
3415
1
原创 C++ 匿名变量的一些理解
总想总结一下,但是总是不断否定自己的理解,迟迟不能下笔。终于今天还是写下点记录和理解。运行环境:OS : Ubuntu 16.04 Desktop G++ Version:gcc version 5.4.0 20160609(Ubuntu 5.4.0-6ubuntu1~16.04.9)匿名变量:这种变量其实是程序员看不见的,是编译器为了代码正确实行,自动会在代码里面添加的内容(匿名变量)。在C语言...
2018-06-24 13:27:22
4731
原创 DMA:mem-to-mem mem-to-device device-to-mem
换了工作,算是步入汽车行业了。汽车不同于消费类电子,使用的是"高性能单片机",尽管物理通讯方式为:can lin spi 这些相对与消费类电子比较慢速的外设,但是AutoSar规范定义的比较详细。 刚开始接触"高性能单片机"。不知道怎么定义这样的芯片,有着200MHz的主频(甚至是多核)但是没有MMU。作为单片机类型的,所以称之为:高性能单片机。(不知道怎么描述,这些芯片多数用于汽车...
2018-03-17 11:46:12
1679
原创 多线程的exit()逻辑
今天很巧再一次调试了多线程的代码。主要思想就是:通过pthread_create创建一个线程,然后通过主线程A控制创建出来的线程B,完成各种功能。video_thread(){while(){display();}exit(0);}main(){pthread_create(&video,,video_thread,);while(q
2016-10-28 05:35:01
5222
1
原创 Mmap 实现原理和应用(流程)
在调试完达芬奇的视屏输入后记录一下调试心得。重点还是再次放在系统调用mmap后的内存分配上。做了一个mmap系统调用的笔记以及记录以备后用。大致介绍了linux中对于mmap的应用以及后续产生缺页异常处理的一个流程。由于之前的调试中一直对于vma的区域选取产生疑问,不知道vma到底是何许人也,这次有机会就直接mmap调试了。一下内容都通过log信息验证。 系统调用 mmap后SYS
2016-07-27 15:57:26
2745
原创 OMAP3 DSS 初始化过程(2)总线关系
这篇文章是对前面一片文章的补充。在文章(1)中遗漏了一些重要信息,而这些信息也是在随后的调试和修改过程中发现的。这里再做一次总结。还是那句老话,如有不足,请指出文章中错误的观点。 文章(1)中提到了omap_dss_register_device和omap_dss_register_driver这两个函数,这两个函数正是通过dss_bus总线进行配对的。在这两个函数配对之还有一个linu
2016-02-01 23:15:16
1473
原创 OMAP3 DSS 初始化过程(1)总线关系
1,调用流程omap_dss_bus_register()注册一个总线:static struct bus_type dss_bus_type = {.name = "omapdss",.match = dss_bus_match,.dev_attrs = default_dev_attrs,.drv_attrs = default_drv_attrs,};取名为o
2016-01-27 01:54:59
1615
原创 strncpy 引起的思考,重新认识了strncpy这个函数
首先来看一个司空见惯的c语言列子:#include #include int main(){ unsigned char arry[] = {0x00,0x01,0x02,0x03}; unsigned char dest[] = {0xff,0xff,0xff,0xff}; strncpy(dest,arry,sizeof(arry));
2015-07-29 21:41:47
1706
原创 中断交互数据的方式
概念:A,带有buffer缓存的设备硬件描述:1,fifo2,dma 1,fifo可以使用任何存储空间,包括外设的一些寄存器组,只要构成一个cpu指令无法完成的读写操作(原子操作)都可以构成buffer。2,dma是设备,不是存储空间。dma的作用是操作和管理fifo的行为。 DMA介绍: Dma 设备受到参数的影响,表现为: 数据搬移的原始地址,目的地址
2015-05-21 21:26:46
3218
原创 内核分配大块连续内存的方法
参数传递: uboot向内核传递参数的方式分为两类。 (1)第一类是通过boot cmd 例如在uboot终端提示行使用pri命令现实出的boot arg等。 (2)第二类是通过DeviceTree。在/arch/arm/boot/dts/文件中和定义了和开发板相关的板级描述信息。注(1)Device Tree的分析在其它文章中分析以soc devkit (友
2015-05-21 21:18:23
5328
原创 ARM-Linux (临时,正式) 建立页表的比较
很久没有写博客了,由于之前的写关于OMAP3530文章还没有整理。再加上一直在找工作,找到工作后又投入到另外的平台去工作。始终在忙忙碌碌,但是对于代码确实渐渐疏远。在做项目的时候要使用DDR3分配内存,不经意间使用要和MMU以及TLB打交道。因此特地写下这篇文章以备后用。(工作就是在和遗忘作斗争)! Linux在启动之初会建立临时页表,但是在start_kern
2014-09-01 00:34:43
4320
原创 MMU 存储访问控制
关于MMU的地址转换和页表的映射网上已经有了很多的文章。确实写得很好,获益匪浅。在这篇文章中只要记录和描述MMU中关于权限访问的控制。 1,MMU对段和页进行保护,在保护过程中区分了权限。它是由域的访问控制字段和一级描述符或二级描述符中的AP字段,以及C1寄存器的S(表示system),R(表示rom)控制位来共同决定的。MMU中的域是指的一些段,大页或者小页的集合。ARM支持最多16个域
2014-06-03 15:20:38
3147
原创 ARM 中断状态和SVC状态的堆栈切换 (异常)
ARM 中断状态和SVC状态的堆栈切换 (异常) 基础知识:Arm的寄存器使用规则以及寻址指令:R13 Sp 堆栈寄存器R14 Lr 连接寄存器R15 PC 程序计数器 多寄存器寻址:LDMIA R0!,{R1-R4}执行以后的效果R1 R2 R3 R4 堆栈寻址:STMFD入栈指令,相当于
2013-07-07 01:23:04
21566
转载 arm 多寄存器存取使用
老是忘记一些指令的用法... ... 索性记下来,便于以后再查。就当是学习笔记了。多寄存器和堆栈寻址的用法:多寄存器寻址:LDMIA,LDMIB,STMIA,STMIB,LDMDA,LDMDB,STMDA,STMDB;堆栈寻址:LDMFA,LDMFD,STMFA,STMFD,LDMEA,LDMED,STMEA,STMED;指令后缀的解释:弄清堆栈寻址的SP的变化:LDM
2013-07-01 02:13:22
1868
原创 Mmap的实现原理和应用
很多文章分析了mmap的实现原理。从代码的逻辑来分析,总是觉没有把mmap后读写映射区域和普通的read/write联系起来。不得不产生疑问:1,普通的read/write和mmap后的映射区域的读写到底有什么区别。2, 为什么有时候会选择mmap而放弃普通的read/write。3,如果文章中的内容有不对是或者是不妥的地方,欢迎大家指正。 围绕着这两个问题分析一下,其实在考虑
2013-02-23 00:02:30
23848
10
转载 Kernel Linker Scripts Analysis (ARM Architecture)
1. arch/arm/kernel/vmlinux.lds的生成:顶层的vmlinux是由arch/arm/kernel/vmlinux.lds链接生成,顶层Makefile里面定义:693 vmlinux-lds := arch/$(SRCARCH)/kernel/vmlinux.lds arch/arm/kernel/vmlinux.lds是由arch/arm/kernel
2013-01-28 21:45:40
1322
原创 Sound Mixer (Control 接口 1)
1,初始化函数:snd_soc_add_controls(codec, wm9713_snd_ac97_controls,ARRAY_SIZE(wm9713_snd_ac97_controls)); 首先wm9713_snd_ac97_controls结构体数组的实力化,这个过程是在编译的时候就决定的。是使用宏定义完成的。(1)涉及到两个结构体,一个是snd_kcontr
2013-01-23 17:08:14
2084
原创 Sound Mixer (设备初始化)
1,首先来明确这个设备节点的由来。这个节点代表声卡的控制接口。设备的路径:/dev/snd/controlC0 由于基本的linux的操作是由ioctl进行用户空间和内核空间的数据交互已达到实现控制。那么就看看这个设备的由来。static int snd_ctl_dev_register(struct snd_device *device){ struct snd_ca
2013-01-23 17:06:41
2425
原创 arm-gdb移植(编译)
调试应用程序的时候最好有调试工具类似于PC机上的GDB和DDD。写这篇文章的原因也是想要调试应用程序,所以决心自己作一次开发板上GDB的移植。网上相关的文档很多。也很精辟,在这里做一个汇总,以备后用。 GDB移植:GDB移植其实分为两种,两种方法的的区分是鉴于使用和编译后的工具而言。1,第一种是 开发板上使用ARM版的GDB,就像PC机上使用GDB。2,第二种是 开发板上使
2012-11-18 04:19:44
6973
原创 linux设备管理-dev目录下创建和寻找某一设备文件
这是一篇网上找到的文章分析的很精彩,这篇文章的分析基于网络高手文章中没有介绍的方面。如果有什么不对的地方,请指正。谢谢file_operations流程跟踪术语描述符:其实就是结构体在linux可以把设备看作文件并提供了和文件一样的统一的访问接口,相信大家已经有了一点的了解,其底层对设备的不同操作主要是由file_operations描述符来控制,其封装了各种设备的
2012-11-18 04:10:02
5604
转载 TCP连接建立与关闭
TCP连接建立与关闭 TCP 是一个面向连接的协议,无论哪一方向另一方发送数据之前,都必须先在双方之间建立一条连接。本节将详细讨论一个TCP 连接是如何建立的以及通信结束后是如何终止的。建立一个 TCP 连接 TCP使用三次握手 ( three-way handshake ) 协议来建立连接,图 3-10 描述了三次握手的报文序列。这三次握手为:请求端(通常称为客户)发送一
2012-10-23 15:08:26
1268
原创 从sd卡启动之文件系统制作
在调试andriod的代码时候发现了一个问题。在andriod调试的时候无法进入常规的文件系统进行简单的操作。由于想要把alsa移植到210的开发板中,发现“/”文件系统是无法进行读写的。在根文件系统下有一个system的目录可以进行读写但是执行命令的时候发现无法操作,顾想到了可读写的文件系统的移植。因此记录下来这篇文章以便后用,也为了遇到相同问题的开发者提供微薄的帮助。 1,fdisk
2012-10-05 22:15:17
7103
转载 load_elf_binary中使用的内存映射机制
load binary 中使用到的内存映射机制 研究了半天的exec函数后发现,所谓的load binary不是load(read 函数)而是重新安排的过程,在这个过程中涉及了很多的vm操作,找到一篇的好的文章。接下来看看高手的分析: 当某个程序的映象开始执行时,可执行映象必须装入到进程的虚拟地址空间。如果该进程用到了任何一个共享库,则共享库也必须装入到进程的虚拟地址空间。由此可看
2012-09-20 02:23:21
4186
原创 Omap 3530 SDRAM 控制器初始化的一些思考
文章中有不足之处,请高手指点。希望有兴趣的读者交流讨论。谢谢名词解释SDRC : OMAP 3530内存接口控制器。1,DDR SDRAM 原理: DDR SDRAM 的原理在网上有很多精彩的分析,在这里不再一一复述。但是觉得比较经典的理论莫过于:以下是来自网上一篇精彩的分析http://hi.baidu.com/dark_hc/blog/item/217dd58f335a84
2012-09-09 03:52:10
2121
转载 根文件系统的启动及配置linuxrc - linuxrc又来以及解释
一、内核启动完之后,首先运行/linuxrc。/linuxrc内容:#!/bin/sh echo "mount /etc as ramfs" /bin/mount -n -t ramfs ramfs /etc /bin/cp -a /mnt/yaffs/etc/* /etc //关机的时候我们会保存/etc的内容到/mnt/yaffs/etc.
2012-09-09 03:31:09
2095
原创 编译器如何决定变量长度
接着自己发布的一段code 就是强制转换后的指针变量将会方位不同长度的内存变量。后来又想到一个问题: int a 是32位 char a 是8 位 那么在32位的变量处理上和8位的变量处理上会有什么区别? 其实主要想要搞明白对于一个已知位宽的芯片来说(32位),怎么区分写到寄存器或是外设上的数据是使用了低16位,还是低8位,还是32位。
2012-08-25 15:57:01
1469
转载 insmod 内核模块时参数传递 应用篇
内核模块参数传递 在看omap vout.c 的模块时候发现了一些关于LCD和输出的参数是由u-boot中的命令行传递而来。分析一下内核模块的参数传递问题。究竟是如何实现的。以下内容来自于:http://blog.21ic.com/user1/5593/archives/2010/66420.html 对于如何向模块传递参数,Linux kernel 提供了一个
2012-08-23 00:09:14
6360
tr069-CPE WAN 管理协议
2009-10-06
linux 内存管理(虚拟地址到物理地址)
2008-11-23
napi在网卡驱动中技术应用
2008-11-23
三层交换和路由的区别
2008-11-23
kgdb-quickstart-2.4 English Version
2008-09-12
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人