2 勇士后卫头盔哥

尚未进行身份认证

我要认证

暂无相关简介

等级
TA的排名 7w+

linux设备驱动中的异步通知机制

前言异步通知的意思是:一旦设备就绪,则主动通知应用程序,这样应用程序根本就不需要查询设备状态,这一点非常类似于硬件上“中断”的概念,比较准确的称谓是“信号驱动的异步I/O”.信号是在软件层次上对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的.信号是异步的,一个进程不必通过任何操作来等待信号的到达,事实上,进程也不知道信号到底什么时候到达。应用层实现...

2020-09-05 11:47:15

移值linux3.4.2内核之内核裁剪

前言由上图可知,留给kernel分区的大小只有2M但是我们制作出来的内核已经超过了2M首先裁剪内核里无关的CPU/单板文件如上图所示,我们可以AT2440EVB单板去掉执行make menuconfig后按下’/’,进行搜索条目找到该配置选项的路径,然后选择对应单板相关的即可,其余可以去掉裁剪无关的文件系统ext2、ext3、ext4裁剪光盘文件系统CD-ROM进入File systems->CD-ROM/DVD Filesystems裁剪不常用的杂项文件系统进入F

2020-08-07 19:26:57

移值linux3.4.2内核之修改分区

前言内核启动后的打印信息如下所示看到内核中有8个分区,但是我们的uboot只有4个分区修改内核分区我们搜索"Boot Agent"字段,可以发现在以上文件出现过,我们可以断定应该是要修改common-smdk.c文件,因为它是一个比较通用的文件,我们进去查看该文件,可以看到里面有个数组smdk_default_nand_part[],内容如下所示:所以我们必须修改该数组,修改为和我们uboot对应分区一致的分区布局上面部分宏的定义,如下所示:MTDPART_OFS_RETAIN: 填

2020-08-03 16:55:03

移值linux3.4.2内核之框架及初步修改

前言先类比下Windows PC的启动流程,一上电后BIOS会去引导扇区读取系统引导程序引导windows内核的启动,内核启动过程中会去识别C盘,D盘,装载驱动程序,启动应用,对于嵌入式LINUX来说,BIOS称为Bootloader,它主要完成的工作有如下3步1.装载内核到内存中2.设置TAG参数3.启动内核,将参数传递给内核,r0=0,r1=机器ID,r2=TAG参数的地址内核启动中主要完成的工作有如下3步1.根据r1判断能该内核能否支持该机器,若支持的话调用相应的单板初始化函数2.装载

2020-08-03 13:01:54

二叉树的线索化

前言线索化二叉树就是将二叉树转换为双向链表的过程,也就是从非线性到线性的转化,对于结点的先后访问次序每次都去遍历的话效率太低,所以得引入双向链表来反映某种二叉树的遍历次序,利用结点的right指针指向遍历中的后继结点,利用结点的left指针指向遍历中的前驱结点,那么如何在遍历时记录结点间的访问次序,我们可以使用队列来进行操作,遍历结束后队列记录了访问次序,循环访问队列连接队列中的结点,如下图所示...

2020-07-28 20:58:05

二叉树的操作(三)

二叉树的比较与相加二叉树的克隆操作克隆操作就是将当前的二叉树复制一份出来,其复制接口的返回值为堆空间中的一颗新二叉树,这个二叉树的地址是不一样的,但是这颗树的其他属性和数据元素在对应位置都是相当的,接口的定义如下所示sharedPointer <BTree<T>> clone()const设计思路在堆空间里面先创建一个二叉树结点出来,然后把数据元素复制到新创建的二叉树结点中,接下来就递归的克隆左子树和右子树,然后指定左右子树的父亲,也就是新创建出来的结点,递归公式如下

2020-07-26 16:52:06

二叉树的操作(二)

二叉树的属性操作1.二叉树结点的数目对于二叉树结点数目的计算需要用递归来解决,在node为根节点的二叉树中统计结点数目的递归公式如下所示 return 0; node == NULLcount(node) count(node->left)+count(node->right)+1; node!=NULL;代码如下:int count(BTreeNode<T>* node)const{

2020-07-24 22:07:32

二叉树的操作(一)

二叉树的查找二叉树也有两种查找方式,一种是基于数据元素值的查找和基于结点的查找,之前说过通用树结构的查找,一样也是一个递归调用的过程,递归公式如下图所示值查找的递归公式基于值的查找virtual BTreeNode<T>* find(BTreeNode<T>* node,const T& value)const{ BTreeNode<T>* ret = NULL; if(node!=NULL) { if(node-&

2020-07-20 23:03:55

在LCD显示摄像头图像

框架我们将从摄像头读到数据在LCD上显示,首先将摄像头数据读出到一块内存上,然后设置好LCD控制器从这块内存读取数据到LCD显示屏上,对于摄像头数据格式来说有YUV,MJPEG,RGB,而我们的LCD只支持RGB格式的数据格式,所以这里面还要将读取到的摄像头头数据进行一数据格式的转化,除了数据格式的转换外还需要分辨率的转化,如下图所示流程:...

2020-06-29 11:56:00

LINUX驱动之IIC驱动

前言1.Linux的I2C体系结构分为3个组成部分1.1 I2C核心层提供了I2C总线驱动和设备驱动的注册,注销方法,I2C通信方法上层的即Algorithm)与具体适配器无关的代码以及探测设备,检测设备地址的上层代码等,主要用于提供统一的I2C操作函数1.2 I2C适配器层对I2C硬件体系结构中适配器端的实现,适配器可由CPU控制,甚至可以直接集成在CPU内部,主要用于IIC设备的硬件操作1.3 I2C设备驱动层I2C设备驱动(也称为客户驱动)是对设备端的实现,设备一般挂接在受CPU控制的

2020-06-27 16:45:46

二叉树的定义

前言定义:二叉树是由n(n>=0)个结点组成的有限集合,该集合或者为空,或者是由一个根结点加上两颗分别称为左子树和右子树的,互不相交的二叉树组成在此之前我们已经实现过了通用树结构,通用树结构中的每个结点都可以有任意多的孩子,都可能具有无线形态,所以很复杂,我们可以简化结点中孩子的数量,之前实现的通用树结构是用双亲孩子表示法来实现的,如下图所示,每个结点都有一个指向双亲的指针,每个结点都有若干个指向其孩子的指针除此之外还有一种树结构模型叫孩子兄弟表示法,如下图所示,每个结点都有一个指向其第一个

2020-06-25 09:30:00

树的操作(三)

树的属性操作树的属性操作具体指的就是树中结点的数目,树的高度,树的度数等…1.树中结点的数目查找树中结点数目的操作是递归完成的,是递归就有递归出口,当结点为空或者结点的子链表长度为0时就为递归出口,上图就是递归公式的提炼,我们看到下图,要求出该树的结点数可以分为3个部分,count(B)表示求以B为根结点的树的结点数,count©表示求以C为根结点的树的结点数,count(D)表示求以D为根结点的树的结点数,看得count(A)的同时又用到count©这就是一个递归调用的过程代码演示int c

2020-06-21 23:52:03

树的操作(二)

树的清除操作树这种数据结构可以看做是一种容器,树的清除操作就是将树中的所有结点清除,也就是释放堆中的结点,如上图所示,假设我们要将树中数据元素清除,可以先将根结点里面的每一棵子树给清除掉,最后再将根节点清除即可,在清除子树的时候又用到清除树的操作所以这是一个递归调用的过程,出口就是树只有一个根节点且没有子树,公式定义如下代码实现void free(GTreeNode<T>* node){ if(node!=NULL) { for(node->ch

2020-06-20 21:43:48

树的操作(一)

树的查找在之前树的定义中我们可以知道,我们提供的查找操作有基于数据元素值的查找和基于结点的查找,树是一种非线性结构,当我们查找根据数据元素值查找时需要用到递归调用,从根节点出发自顶向下对子节点进行查找对于树中数据元素和结点的查找如下基于数据元素值的查找基于结点的查找插入操作对于插入操作有插入新结点和插入新元素两种操作,树是非线性的,无法采用下标的形式定位数据元素,每一个树结点都有唯一的前驱结点(父节点),因此,必须先找到前驱结点才能完成新结点的插入对于插入新结点的流程图如下所示对于插入数

2020-06-20 12:41:49

树的定义

前言树是一种非线性的数据结构,树是由n(n>=0)个结点组成的有限集合,如果n=0称为空树,如果n>0则包含根结点,根结点只有直接后继,但没有直接前驱,除根以外的其他结点划分为m(m>=0)个互不相交的有限集合T0,T1…Tm-1,每个集合又是一颗树,并且称之为根的子树(sub tree),可以看出树也是递归的一种树中度的概念1.树的结点包含一个数据及若干指向子树的分支2.结点拥有的子树数目称为结点的度 度为0的结点称为叶结点 度不为0的结点称为分支结点3.树的度定义为

2020-06-18 09:40:30

终端与控制台

前言我们知道一个进程的输入输出它是需要终端设备协助下才能去完成的,终端就是计算机外围设备,用来处理用户信息输入和结果输出,终端本身无计算能力,只是一个连接设备(如通过串口连接),后来将通过串口连接的各种设备都称为终端设备,比如串行端口终端:dev/ttySn,伪终端/dev/pty,虚拟终端/dev/tty,控制台/dev/console,对于控制台的概念如下图所示演变终端,控制台慢慢从硬件概念演化成软件概念,就是所谓的虚拟终端,使用软件来模拟以前的硬件终端设备,Linux系统中的6虚拟终端(tty

2020-06-13 12:22:23

项目中的排序工程

前言struct Test : public Object{ int id; int data1[1000]; double data2[500];}..................Test t[1000]Sort::Bubble(t,1000,false);如上述代码所示,如果当待排数据元素为体积庞大的对象时,如何提高排序的效率,大家肯定会想到用更高效的排序方法来提高效率,但是发现效率的提高是微不足道的,问题的关键在于排序过程中不可

2020-06-12 15:20:08

归并排序和快速排序

前言之前文章提到过的希尔排序它有划时代的意义,打破了一个认知——排序算法的复杂度不可能超过O(n*n),之后各种各样更高效的排序算法就开始出现了,比如这次文章中提到的归并排序和快速排序归并排序基本思想:将两个或者两个以上的有序序列合并成一个新的有序序列,有序序列V[0]…V[m]和V[m+1]…V[n-1]合并成V[0]…V[n-1],这种归并方法称为2路归并,以此类推,将多个有序序列归并为一个新的有序序列,称为多路归并,特别注意的是,要归并的序列必须是有序的,如下图所示,归并排序其实是一个递归调用

2020-06-12 13:07:52

冒泡排序和希尔排序

冒泡排序基本思想每次从后向前进行(假设为第i次),j=n-1,n-2,…,i,两两比较V[j-1]和V[j]的关键字,如果发生逆序则交换V[j-1]和V[j]的值,如下图所示从无序序列区域最后一个元素开始冒泡,若发现逆序则交换元素,一次冒泡过后有序序列区域增加一个元素且仍有序下图是动画演示过程,Exchang用来标记无序序列是否已经有序,若已经有序则Exchang置为0避免再次冒泡比较浪费时间,时间复杂度为O(n*n)且是稳定排序代码演示 template <typename T&gt

2020-06-11 17:37:10

选择排序和插入排序

前言所谓排序就是计算机内经常进行的一种操作,其目的就是将一组"无序"的数据元素调整为"有序"的数据元素,排序也存在稳定性的定义:如果在序列中有两个数据元素R[i]和R[j],它们的关键字(排序的依据)K[i]==K[j],且在排序之前,对象R[i]排在R[j]前面,如果在排序之后,对象R[i]仍在对象R[j]的前面,则称这个排序方法是最稳定的,否则称这个排序方法是不稳定的,在排序中也有多关键字排序,所谓多关键字排序就是有多个排序依据,且它们的优先级不同,当优先级相同时则看一下关键字,对于多关键字排序,只要

2020-06-11 12:31:48

查看更多

勋章 我的勋章
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv4
    勤写标兵Lv4
    授予每个自然周发布9篇以上(包括9篇)原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。