自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 多线程中PTHREAD_MUTEX_RECURSIVE的理解

参数PTHREAD_MUTEX_RECURSIVE表示在同一个线程中可以多次获取同一把锁。并且不会死锁。 问题来了: 1,如和测试这个参数的属性导致程序不一样的结果? 2,为什么一定要同一个线程多次获得同一把锁? 下面先看代码: #include <pth...

2020-05-08 16:16:38 118 1

原创 NVIDIA CUVID硬件解码 - cuvidCreateVideoSource() 捕捉rtsp流

写这篇文章是应为之前的网上很多文章分析: cuvidCreateVideoSource( )这个函数不支持一些视频流:rtsp类型过来的视频信号。 在NVIDIA的Decode实例中使用的是本地的视频文件:1080.246,720.mp4等视频文件。创建视频源用的是本地文件。 ...

2020-03-18 00:01:11 378 22

原创 Vsomeip交叉编译(AARCH64)中涉及到的boost移植

最近在做arm交叉编译,其中需要用到boost库。问题随之而来,记录一下细节以及网上文章疏忽的知识点。 1,boost中的版本不同,导致头文件中的内容也有所不同。所以当移植库使用了boost,一定要注意boost的版本。 vsomeip中使用的boost库是要求大于等于b...

2019-11-29 12:59:01 608 0

转载 C++ 左值右值,用于移动(move)和转发(forward)

    新标准重新定义了lvalue和rvalue,并允许函数依照这两种不同的类型进行重载。通过对于右值(rvalue)的重新定义,语言实现了移动语义(move semantic)和完美转发(perfect forwarding),通过这种方法,C++实现了在保留原有的语法并不改动已存在的代码的基...

2018-06-30 14:03:56 864 0

原创 C++ 匿名变量的一些理解

总想总结一下,但是总是不断否定自己的理解,迟迟不能下笔。终于今天还是写下点记录和理解。运行环境:OS : Ubuntu 16.04 Desktop G++ Version:gcc version 5.4.0 20160609(Ubuntu 5.4.0-6ubuntu1~16.04.9)匿名变量:这...

2018-06-24 13:27:22 1802 0

原创 DMA:mem-to-mem mem-to-device device-to-mem

    换了工作,算是步入汽车行业了。汽车不同于消费类电子,使用的是"高性能单片机",尽管物理通讯方式为:can lin spi 这些相对与消费类电子比较慢速的外设,但是AutoSar规范定义的比较详细。    刚开始接触"高性能单片机"。不知道怎么定义这样...

2018-03-17 11:46:12 570 0

原创 gcc使用---动态库链接静态库

最近自己的项目中遇到一个问题: 编译一个动态库,动态库中使用了静态库的函数如下图所述

2017-02-24 16:44:24 9437 11

原创 卷积推导笔记(未整理)

笔记较为离散 以后有空再整理,这是两年前写的,一直没有整理。

2017-02-24 04:55:20 492 0

原创 多线程的exit()逻辑

今天很巧再一次调试了多线程的代码。主要思想就是:通过pthread_create创建一个线程,然后通过主线程A控制创建出来的线程B,完成各种功能。 video_thread() { while() { display(); } exit(0); } main() { ...

2016-10-28 05:35:01 3613 0

原创 linux内核中内存分配调用API-引起的一些思考

linux内存管理中的一些理解

2016-10-19 16:39:45 1052 0

原创 Mmap 实现原理和应用(流程)

在调试完达芬奇的视屏输入后记录一下调试心得。重点还是再次放在系统调用mmap后的内存分配上。做了一个mmap系统调用的笔记以及记录以备后用。大致介绍了linux中对于mmap的应用以及后续产生缺页异常处理的一个流程。 由于之前的调试中一直对于vma的区域选取产生疑问,不知道vma到底是何许人也,...

2016-07-27 15:57:26 2074 0

原创 OMAP3 DSS 初始化过程(2)总线关系

这篇文章是对前面一片文章的补充。在文章(1)中遗漏了一些重要信息,而这些信息也是在随后的调试和修改过程中发现的。这里再做一次总结。还是那句老话,如有不足,请指出文章中错误的观点。     文章(1)中提到了omap_dss_register_device和omap_dss_register_dr...

2016-02-01 23:15:16 1229 0

原创 OMAP3 DSS 初始化过程(1)总线关系

1,调用流程 omap_dss_bus_register()注册一个总线: static struct bus_type dss_bus_type = { .name = "omapdss", .match = dss_bus_match, .dev_attrs = defau...

2016-01-27 01:54:59 1369 0

原创 strncpy 引起的思考,重新认识了strncpy这个函数

首先来看一个司空见惯的c语言列子: #include #include int main() {     unsigned char arry[] = {0x00,0x01,0x02,0x03};     unsigned char dest[] = {0xff,0xff,0x...

2015-07-29 21:41:47 1105 1

原创 中断交互数据的方式

概念: A,带有buffer缓存的设备硬件描述: 1,fifo 2,dma   1,fifo可以使用任何存储空间,包括外设的一些寄存器组,只要构成一个cpu指令无法完成的读写操作(原子操作)都可以构成buffer。 2,dma是设备,不是存储空间。dma的作用是操作和管理fifo的行为...

2015-05-21 21:26:46 1290 0

原创 内核分配大块连续内存的方法

参数传递:     uboot向内核传递参数的方式分为两类。     (1)第一类是通过boot cmd 例如在uboot终端提示行使用pri命令现实出的boot arg等。     (2)第二类是通过DeviceTree。在/arch/arm/boot/dts/文件中和定义了和开发板相关的...

2015-05-21 21:18:23 4557 0

原创 ARM-Linux (临时,正式) 建立页表的比较

 很久没有写博客了,由于之前的写关于OMAP3530文章还没有整理。再加上一直在找工作,找到工作后又投入到另外的平台去工作。始终在忙忙碌碌,但是对于代码确实渐渐疏远。 在做项目的时候要使用DDR3分配内存,不经意间使用要和MMU以及TLB打交道。因此特地写下这篇文章以备后用。(工作...

2014-09-01 00:34:43 3846 1

原创 MMU 存储访问控制

关于MMU的地址转换和页表的映射网上已经有了很多的文章。确实写得很好,获益匪浅。在这篇文章中只要记录和描述MMU中关于权限访问的控制。   1,MMU对段和页进行保护,在保护过程中区分了权限。它是由域的访问控制字段和一级描述符或二级描述符中的AP字段,以及C1寄存器的S(表示system),R...

2014-06-03 15:20:38 2482 0

原创 ARM 中断状态和SVC状态的堆栈切换 (异常)

ARM 中断状态和SVC状态的堆栈切换 (异常)   基础知识: Arm的寄存器使用规则以及寻址指令: R13  Sp     堆栈寄存器 R14  Lr     连接寄存器 R15  PC     程序计数器   多寄存器寻址: LDMIA R0!,{R1-R4} 执行以后的效果 R1  R2...

2013-07-07 01:23:04 16494 0

转载 arm 多寄存器存取使用

老是忘记一些指令的用法... ... 索性记下来,便于以后再查。就当是学习笔记了。 多寄存器和堆栈寻址的用法: 多寄存器寻址: LDMIA,LDMIB,STMIA,STMIB,LDMDA,LDMDB,STMDA,STMDB; 堆栈寻址: LDMFA,LDMFD,STMFA,STMFD,L...

2013-07-01 02:13:22 1416 0

原创 Mmap的实现原理和应用

很多文章分析了mmap的实现原理。从代码的逻辑来分析,总是觉没有把mmap后读写映射区域和普通的read/write联系起来。不得不产生疑问: 1,普通的read/write和mmap后的映射区域的读写到底有什么区别。 2, 为什么有时候会选择mmap而放弃普通的read/write。 3,...

2013-02-23 00:02:30 16901 12

转载 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.l...

2013-01-28 21:45:40 1035 0

原创 Sound Mixer (Control 接口 1)

1,初始化函数: snd_soc_add_controls(codec, wm9713_snd_ac97_controls, ARRAY_SIZE(wm9713_snd_ac97_controls));      首先wm9713_snd_ac97_controls结构体数组的实力化,这个...

2013-01-23 17:08:14 1809 0

原创 Sound Mixer (设备初始化)

1,首先来明确这个设备节点的由来。这个节点代表声卡的控制接口。 设备的路径:/dev/snd/controlC0   由于基本的linux的操作是由ioctl进行用户空间和内核空间的数据交互已达到实现控制。那么就看看这个设备的由来。 static int snd_ctl_dev_regis...

2013-01-23 17:06:41 1935 0

原创 arm-gdb移植(编译)

调试应用程序的时候最好有调试工具类似于PC机上的GDB和DDD。写这篇文章的原因也是想要调试应用程序,所以决心自己作一次开发板上GDB的移植。 网上相关的文档很多。也很精辟,在这里做一个汇总,以备后用。   GDB移植: GDB移植其实分为两种,两种方法的的区分是鉴于使用和编译后的工具而言...

2012-11-18 04:19:44 6112 0

原创 linux设备管理-dev目录下创建和寻找某一设备文件

这是一篇网上找到的文章分析的很精彩,这篇文章的分析基于网络高手文章中没有介绍的方面。 如果有什么不对的地方,请指正。 谢谢 file_operations流程跟踪 术语 描述符:其实就是结构体 在linux可以把设备看作文件并提供了和文件一样的统一的访问接口,相信大家已经有了一 点的...

2012-11-18 04:10:02 4754 0

转载 TCP连接建立与关闭

TCP连接建立与关闭   TCP 是一个面向连接的协议,无论哪一方向另一方发送数据之前,都必须先在双方之间建立一条连接。本节将详细讨论一个TCP 连接是如何建立的以及通信结束后是如何终止的。 建立一个 TCP 连接   TCP使用三次握手 ( three-way handshake ) 协议...

2012-10-23 15:08:26 1024 0

原创 从sd卡启动之文件系统制作

在调试andriod的代码时候发现了一个问题。在andriod调试的时候无法进入常规的文件系统进行简单的操作。由于想要把alsa移植到210的开发板中,发现“/”文件系统是无法进行读写的。在根文件系统下有一个system的目录可以进行读写但是执行命令的时候发现无法操作,顾想到了可读写的文件系统的移...

2012-10-05 22:15:17 6430 0

转载 load_elf_binary中使用的内存映射机制

load binary 中使用到的内存映射机制   研究了半天的exec函数后发现,所谓的load binary不是load(read 函数)而是重新安排的过程,在这个过程中涉及了很多的vm操作,找到一篇的好的文章。接下来看看高手的分析:   当某个程序的映象开始执行时,可执行映象必须装入...

2012-09-20 02:23:21 3720 0

原创 Omap 3530 SDRAM 控制器初始化的一些思考

文章中有不足之处,请高手指点。希望有兴趣的读者交流讨论。谢谢 名词解释 SDRC : OMAP 3530内存接口控制器。 1,DDR SDRAM 原理:    DDR SDRAM 的原理在网上有很多精彩的分析,在这里不再一一复述。但是觉得比较经典的理论莫过于:以下是来自网上一篇精彩的分析h...

2012-09-09 03:52:10 1844 0

转载 根文件系统的启动及配置linuxrc - linuxrc又来以及解释

一、内核启动完之后,首先运行/linuxrc。 /linuxrc内容: #!/bin/sh  echo "mount /etc as ramfs"  /bin/mount -n -t ramfs ramfs /etc        /bin/cp -a ...

2012-09-09 03:31:09 1269 0

原创 编译器如何决定变量长度

接着自己发布的一段code 就是强制转换后的指针变量将会方位不同长度的内存变量。后来又想到一个问题:     int a     是32位     char a  是8 位     那么在32位的变量处理上和8位的变量处理上会有什么区别?     其实主要想要搞明白对于一个已知位宽的芯片来...

2012-08-25 15:57:01 1167 0

转载 insmod 内核模块时参数传递 应用篇

内核模块参数传递      在看omap vout.c 的模块时候发现了一些关于LCD和输出的参数是由u-boot中的命令行传递而来。分析一下内核模块的参数传递问题。究竟是如何实现的。 以下内容来自于: http://blog.21ic.com/user1/5593/archives/20...

2012-08-23 00:09:14 5750 0

原创 nand flash 读写(基本操作)

开场白:     希望通过这篇文章记录一下自己在调试NAND flash的经验。希望对大家有用。     上个月搞了一块开发板QT210。说实话没有找到很多的datasheet就开始搞了。最早还是从boot说起,说到这这里不得不提到boot中打印的错误信息 ****CRC Error*****...

2012-08-18 15:40:49 6946 0

转载 Linux内核的同步机制:completion

在Linux内核中,completion是一种简单的同步机制,标志"things may proceed"。要使用completion,必须在文件中包含,同时创建一个类型为 structcompletion的变量。这个变量可以静态地声明和初始化: DECLARE_COMPLE...

2012-07-12 16:31:28 1173 1

原创 omap 3530 kernel i2c 调试笔记

i2c一次完整的驱动读写   结合调试过程分析,加上打印信息更加直观。   文件:drivers/i2c/busses/i2c-omap.c 所有的调试代码以及注释都写在了这个文件中。以下主要是以文字记录了调试的过程以及一些疑问。在最后的分析中结合了其他芯片的操作。还是得到了一定的解释。...

2012-06-22 22:48:58 1793 0

原创 omap 3530 boot i2c 调试笔记

1,板子时omap的,外设TPS65930的控制接口是I2C的。借此机会调试一下I2C的功能。如果有什么地方没有分析周到的,还请大家指正。 I2C的驱动接触过,但是都是在u-boot或是在“裸奔”的环境中调试。这样的环境往往更注重硬件的特性,以及硬件的功能。软件架构相对较为简单。但是“简单”并不...

2012-06-22 22:43:48 2616 0

原创 arm上电后的第一条指令

类似的文章网上很多了,大都以软件分析为主,从U-boot到kernel。很多文章的分析也是非常详细以及精辟的。在这里,不想多说软件的机制,那样的机会留给大家吧。          记得07-08年一次去华为面试,主考官问了一些nand flash的操作的事宜,也算还好,没有太多刁难。面试结果还...

2012-06-19 23:30:51 4102 0

原创 我 out了。。。。。。。

2005年大学毕业。 大学没有学好c语言,只学了数模电,和微机接口和原理,还有通讯原理,信号频谱搬移,拉变换,高变换一头雾水。。。。。。线形代数还可以,这几天teamleader考了交大工程硕士,我的天哪,行列式转换一点不会了。后来人家问了卷积的意义?这时候我才明白嵌入式到底需要什么人。C代码就...

2012-06-11 11:20:00 2088 0

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