- 博客(60)
- 资源 (5)
- 收藏
- 关注
原创 c/c++代码性能效率
一、尽量减少值传递,多用引用来传递参数 boolCompare(string s1, string s2)boolCompare(string *s1, string *s2)boolCompare(string &s1, string &s2)boolCompare(const string &s1, const string &s2) 其中若使用第一个函数(值传递),则在参数
2018-02-01 22:19:05
9205
2
原创 高通Camera 驱动调试要点(二)
这篇文章主要介绍数据流这边Camera所遇到的问题,主要介绍bus overflow和sof freeze;(一)bus overflow 摄像头传感器时钟通道(即 MIPI DDR 时钟)的工作频率与激活的数据通道数决定摄像头传感器在指定操作模式下的总数据传输速率(吞吐量)。每个通道的数据传输速率是 MIPI DDR 时钟速度的两倍。例如,工作在 200 MHz MIPI DD
2017-10-26 15:32:53
12589
原创 ION框架学习(二)
第一章介绍:ION的框架和buffer的分配; 第二章介绍:如何使用ION buffer; ION的整体框架及ION_device,ION_client,ION_heap创建和关系;这章将介绍如使使用操作ION;
2017-10-14 10:18:29
4437
原创 ION框架学习(一)
本系列分为三章:第一章介绍:ION的框架和buffer的分配; 第二章介绍:如何使用ION buffer; 第三章介绍:以MTK平台为例来了解camera buffer的流转; ION是google在Android4.0 为了解决内存碎片管理而引入的通用内存管理器,用来支持不同的内存分配机制,如CARVOUT(PMEM),物理连续内存(kmalloc), 虚拟地址连续但物理不连续内存(vma
2017-09-05 18:30:24
6609
1
原创 上下拉电阻介绍
gpio type 中断,如果是高电平,我觉得肯定要使用下拉电阻,将电平钳制在低电平。 如果是低电平,我觉得肯定要使用上拉电阻,将电平钳制在高电平;上拉电阻(或者下拉电阻)不能太大,也不能太小,应该被设计成一个适当的值,让电路可以正常的工作。不过上拉(或者下拉)可能是chip内,也可能是chip外的;如果gpio中断内部使用了下拉电阻,如果外部在使用下拉电阻,会使pin脚的输入电阻变低
2017-08-23 15:55:32
648
原创 open drain和push pull
GPIO常常可以设置为输出和输入;在配置GPIO管脚的时候,常会见到两种模式:开漏(open-drain,漏极开路)和推挽(push-pull)这里先熟悉下什么是mos管:MOS管,即绝缘性场效应管。MOS英文全称为Metal-Oxide-Semiconductor即金属-氧化物-半导体,常用做开关元件;
2017-08-21 16:52:15
6383
原创 【Linux基础系列之】gpio系统
上一章介绍了pinctrl系统管理所有的物理pin脚,gpio也是pin脚的一种,所以需要某个gpio的时候就需要通过pinctrl把某个pin脚设置为gpio功能就即可;在pinctrl系统提供了操作pin脚的统一API接口,同时也可以用gpio的API来操作,在request gpio表明该pin没有被挪为他用之后,就可以设置该GPIO的输入输出,驱动能力,或者debounce功能等;
2017-08-18 15:55:35
2128
原创 【Linux基础系列之】pinctrl系统
pinctrl子系统用于控制管脚管理soc的管脚,它通常可以以一组寄存器的形式存在,用于使能独立或成组管脚的复用、设置负载电流、设置驱动能力等;
2017-08-17 17:25:47
4026
2
原创 【Linux基础系列之】设备模型
linux设备模型是linux比较基础的知识,虽然有很多资料很多书籍都会去讲设备模型,这里以我自己的方式清晰的描述下linux设备模型;
2017-07-27 17:53:50
574
原创 【Linux基础系列之】同步机制介绍
当多核CPU同时执行一段代码的时候,就容易发生抢占,这段代码可以叫做临界区,其他内核控制路径能够进入临界区前,进入临界区前的内核控制路径必须全部执行完这段代码,为了避免这种共享数据发生竞争,就需要采用同步技术,本文就简单介绍linux内核当中的一些同步原语;(一) per-cpu变量 最简单的同步技术就是把内核变量申明为per-cpu变量,这个变量只会在本地CPU操作时调用,就不用考虑其他CPU
2017-07-22 16:43:19
742
原创 GDB 调试出现:Couldn't find general-purpose registers in core file
现在平台基本都是64位的,用平台默认的gdb工具来加载vmlinux和ramdump会出现:warning: Couldn't find general-purpose registers in core file.warning: Couldn't find general-purpose registers in core file.#0 <unavailable> in ?? ()这是因为
2017-07-13 10:48:28
6195
原创 【Linux基础系列之】内存管理(1)-buddy和slub算法
Linux内存管理是一个很负责的系统,也是linux的精髓之一,网络上讲解这方面的文档也很多,我把这段时间学习内存管理方面的知识记录在这里,涉及的代码太多,也没有太多仔细的去看代码,深入解算法,这篇文章就当做内存方面学习的一个入门文档,方便以后在深入学习内存管理源码的一个指导作用;
2017-06-30 17:01:04
5919
原创 linux 信号简介
信号是一种软件中断,提供了一种处理异步的方法,信号发生是随机的。可以被发送到一个进程或一组进程;使用信号的主要目的有两个:让进程知道已经发生了一个特定的事件;强迫进程执行它自己代码中的信号处理程序;(一 )信号处理流程 对于一个完整的信号生命周期(从信号发送到相应的处理函数执行完毕)来说,可以分为三个阶段:信号产生,信号在进程中注册,信号的执行和注销;(1)信号产生信
2017-06-15 17:21:50
588
原创 【Linux基础系列之】中断系统(2)-下半部
前面一篇文章分析了中断系统的框架,这篇文章主要讲中断的下半部份的机制;(一)概述 linux将其分成了两个部分,一个叫做中断handler(top half),是全程关闭中断的,另外一部分是deferable task(bottom half),属于不那么紧急需要处理的事情。在执行bottom half的时候,是开中断的。系统可以把实时性的操作或者硬件的一些ACK放在上半部分来做,其他数据处理,
2017-06-05 18:34:00
969
原创 Camera模组散热设计
模组的散热设计对于camera的效果有一定的影响,温度过高拍摄暗处的时候会有明显的noise;热量来源功耗:高像素高帧率,必然增加手机照相模组的功耗。功耗越高,相同条件下,模组温度越高。建议:选择正确的初始化设置以及合理的电源供电方式;自动对焦:VCM 工作状态最大可以达到 80mA 电流。建议: 正确控制 VCM 的工作状态,正确处理 VCM PDN 脚的工作状态;模组尺寸:模组尺寸越来越小,越来
2017-05-29 17:56:13
1187
原创 Camera电源噪声处理
camera供电分为PMU和LDO,如果camera的供电设计不好,会导致camera效果伴有很强的noise,具体表现在较为暗的环境下竖条纹明显。在实验室关闭光源拍摄墙壁带有电源干扰的图片如下:首先了解布线原则:主板AVDD,DOVDD,DVDD,AFVDD 的滤波电容建议分别放置2颗,分别是0.1uf和4.7uf ,如果对AVDD 电源要求严格,建议分别放1uf 和10uf;主板AVDD,D
2017-05-29 17:31:19
4133
原创 Camera模组布线规则
为保证信号的质量,走线应尽量可能地短或直,尽量减少过孔(除GND 以外)和其它会引起线路阻抗不连续的因数,避免出现太多的拐弯,拐弯处避免使用90度走线,应使用弧形走线或45度走线;
2017-05-29 16:31:37
3354
原创 【Linux基础系列之】中断系统(1)-框架
本文分为两篇,第一篇主要描述中断控制器和中断处理流程;第二篇主要讲述中断的下半部分处理机制包括softirq,tasklet,workqueue;Linux中断系统(1)-中断框架 Linux中断系统(2)-中断下半部(一)中断综述 中断硬件系统主要有各个外设、中断控制器(Interrupt Controller)和CPU组成。各个外设提供irq request line连接到中断控制器,在发
2017-05-26 19:51:49
2219
原创 ARMv8-中断处理接口
不考虑EL2和EL3,IRQ处理分两种情况:用户态发生的中断和内核态发生的中断,相应的中断处理接口分别为:el1_irq el0_irq
2017-05-16 16:22:39
2098
原创 ARMv8-异常处理
ARM异常处理分为同步(synchronous)和异步异常(asynchronous)满足下面条件为同步异常: 1. 异常是由于直接执行或尝试执行指令而生成的。 2. 提供给异常处理程序的返回地址确定保存着指示引起异常的指令。 3. 异常是精确的。
2017-05-16 14:35:25
5995
原创 ARM基础学习-局部标号
局部标号主要用于在局部范围内使用。他由两部分组成:开头是一个0~99的数字,后面紧跟着一个通常表示该局部变量作用范围的符号。 局部变量的作用范围通常为当前段,也可以用伪操作ROUT来定义局部变量的作用范围。
2017-05-15 14:39:43
958
原创 ARMv8-AArch64寄存器和指令集
(一)简述 AArch拥有31个通用寄存器,系统运行在64位状态下的时候名字叫Xn,运行在32位的时候就叫Wn;AArch32与AArch64寄存器对应关系:(二)PSTATE PSTATE不是一个寄存器,它表示的是保存当前process状态信息的一组寄存器或者一些标志位信息的统称,当异常发生的时候这些信息就会保存到EL所对应的SPSR寄存器当中;寄存器:标志位:type ProcState
2017-05-10 21:48:30
22995
原创 ARMv8-AArch64简述
ARMv8是ARM版本升级以来最大的一次改变,ARMv8的架构继承以往ARMv7与之前处理器技术的基础,除了现有的16/32bit的Thumb2指令支持外,也向前兼容现有的A32(ARM 32bit)指令集,扩充了基于64bit的AArch64架构,除了新增A64(ARM 64bit)指令集外,也扩充了现有的A32(ARM 32bit)和T32(Thumb2 32bit)指令集;
2017-05-09 19:18:04
34175
1
原创 ARM基础学习-SWI异常中断处理
在ARM处理器中,我们常常使用SWI指令来产生一个软中断。软中断指令SWI指令中包含了一个24位的立即数,这个立即数指示了用户请求的特定的SWI功能,即这个立即数表示的是SWI指令所想要触发中断的中断号。所以,当SWI指令触发了一次异常后进入异常处理的程序时,异常程序必须要从SWI指令中提取出来中断号,即提出出来SWI指令中低24位的值,从而得到用户请求的特定的SWI功能。
2017-05-07 18:18:45
1659
原创 函数可重入性
什么是可重入性重入一般可以理解为一个函数在同时多次调用,例如操作系统在进程调度过程中,或者单片机、处理器等的中断的时候会发生重入的现象。
2017-05-07 17:16:19
579
原创 ARM基础学习-异常中断处理
中断类型当异常中断发生的时候,系统执行完当前指令后,将跳转到相应的异常中断处理程序,当处理程序执行完毕后,程序返回到发生中断的指令的下一条指令处执行;在进入异常中断处理程序时,要保存被中断的执行现场,在异常中断处理程序退出时,要恢复被中断的程序的执行现场;
2017-05-07 16:39:17
1923
原创 ARM基础学习-快速上下文切换技术
FCSE的原理快速上下文切换技术(FCSE)通过修改系统中不同进程的虚拟地址,避免在进行进程间切换时造成虚拟地址到物理地址的重映射,从而提高系统性能;
2017-05-06 16:40:38
1211
原创 ARM基础学习-Cache和写缓冲器
Cache介绍CPU的主频可以达到200MHZ,而一般性能的主存储器操用DRAM。其存储周期仅为100ns-200ns,主存储的性能将会影响整个系统的性能,Cache和写缓冲区位于主存储区和CPU之间,主要用来提高存储系统性能; 而cache经常与写缓冲器(write buffer)一起使用,使用writer buffer的目的是,将处理器和cache从较慢的对主存的写操作中脱离出来。
2017-05-06 16:20:57
2017
原创 ARM基础学习-存储管理单元MMU
在ARM系统中,存储单元MMU的主要完成以下工作: (1) 虚拟存储空间到物理存储空间的映射;ARM 采用页式虚拟存储管理,把虚拟空间分成固定大小的块,每一块称为一页;物理内存地址空间也分成同样大小的页;页的大小分为粗粒度和细粒度;MMU需要实现虚拟地址到物理地址的转换; (2) 存储器访问权限的控制; (3) 设置虚拟存储空间的缓冲的特性;页表是实现MMU的重要手段,页表存储与内存中,表的每
2017-05-06 12:39:38
1424
原创 ARM基础学习-寄存器寻址方式和指令
寻址方式数据都存在存储器中,寻址简单地说就是找到存储数据或指令的地址。存储器有很多存储单元,用于存储数据。arm指令
2017-04-30 17:13:02
8875
原创 ARM基础学习-寄存器
大学的时候学习过一段时间汇编,现在出来工作发现还需要捡起这些东西重新去学习,接下这一段时间先集中整理ARM的基础知识,然后扩展到ARMv8学习64位框架,然后学习MMU,学习它的中断处理方式;这篇文章以基础为主学习ARM寄存器;
2017-04-30 17:11:26
751
原创 coredump产生
coredump上一节分析了产生NE后生成tombstone的流程,有时候通过分析tombstone并不能解决问题,这时候我们需要coredump来分析问题,core文件会包含了程序运行时的内存,寄存器状态,堆栈指针,内存管理信息还有各种函数调用堆栈信息等,我们可以理解为是程序工作当前状态存储生成第一个文件,许多的程序出错的时候都会产生一个core文件,通过工具分析这个文件,我们可以定位到程序异常退
2017-04-29 10:05:29
2509
原创 c语言面试题重点整理·简单编程类
下面是常用到的一些面试题,不对的地方求纠正:(1)排序 插入法(2)排序冒泡法 (3)希尔排序(4)二分查找法int BinSearch1(int r[ ], int n, int k)//数组r[1] ~ r[n]存放查找集合{ low=1; high=n; while (low<=high) {
2016-03-23 20:48:01
885
hrtimer高精度定时器.odt
2020-04-30
DW9714_spec_v0 4.pdf
2020-04-21
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人