自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(51)
  • 收藏
  • 关注

转载 LINUX环境并发服务器的三种实现模型

服务器设计技术有很多,按使用的协议来分有TCP服务器和UDP服务器。按处理方式来分有循环服务器和并发服务器。1  循环服务器与并发服务器模型在网络程序里面,一般来说都是许多客户对应一个服务器,为了处理客户的请求,对服务端的程序就提出了特殊的要求。目前最常用的服务器模型有:·循环服务器:服务器在同一时刻只能响应一个客户端的请求·并发服务器:服务器在同一时刻可以响应多个客户端的请求

2015-06-27 15:16:16 419

转载 自旋锁和互斥体

2.5 内核中的并发  随着多核笔记本电脑时代的到来,对称多处理器(SMP)的使用不再被限于高科技用户。SMP和内核抢占是多线程执行的两种场景。多个线程能够同时操作共享的内核数据结构,因此,对这些数据结构的访问必须被串行化。  接下来,我们会讨论并发访问情况下保护共享内核资源的基本概念。我们以一个简单的例子开始,并逐步引入中断、内核抢占和SMP等复杂概念。  2.5.1

2015-06-15 11:50:00 532

转载 块设备驱动注册和注销、加载与卸载、块设备驱动的I/O请求

块设备驱动注册和注销块设备驱动的第一个任务就是将他们自己注册到内核中,其函数原型如下:    int register_blkdev(unsigned int major, const char* name);major参数是块设备要使用的主设备号,name为设备名,它会在/proc/devices中被现实.如果major为0,内核会自动分配一个新的主设备号,并由该函数返回

2015-06-15 11:32:26 807

转载 Linux FrameBuffer详解

1. 背景知识在多媒体的推动下,彩色LCD越来越多地应用到嵌入式系统中,PDA和手机等大多都采用LCD作为显示器材,因此学习LCD的应用很有实际意义!LCD工作的硬件需求:要使一块LCD正常的显示文字或图像,不仅需要LCD驱动器,而且还需要相应的LCD控制器。在通常情况下,生产厂商把LCD驱动器会以COF/COG的形式与LCD玻璃基板制作在一起,而LCD控制器则是由外部的电路来实现,现在很

2015-06-13 19:20:27 4031

转载 linux输入子系统分析

首先说明一下,本文是基于Linux-2.6.38版本内核来分析Linux输入子系统架构和原理的。这阵子本来没有打算花时间来分析Linux input system的,然而当在研究S3C6410触摸屏驱动的时候悲剧不期而至,内核中并没有实现6410的触摸屏驱动,不过有关于S3C2410触摸屏的驱动,往s3c2410_ts.c文件里面一看,居然实现过程中用到了输入子系统这一神马机制。瞄了下代码,流程基

2015-06-13 17:38:39 464

转载 Linux串口驱动

linux 串口 驱动 理解                                一、核心数据结构串口驱动有3个核心数据结构,它们都定义在1、uart_driveruart_driver包含了串口设备名、串口驱动名、主次设备号、串口控制台(可选)等信息,还封装了tty_driver(底层串口驱动无需关心tty_driver)struct uart_dr

2015-06-12 10:03:11 708

转载 _IO, _IOR, _IOW, _IOWR 宏的用法与解析 ( ioctl设备控制---定义命令 )

今天在写字符驱动验证程序的时候要用到ioctl函数,其中有一个cmd参数,搞了半天也不了解是什么意思,那个cmd还有什么命令码了什么的,还好google下,觉得这篇文章写的不错,就转来看看:在驱动程序里, ioctl() 函数上传送的变量 cmd 是应用程序用于区别设备驱动程序请求处理内容的值。cmd除了可区别数字外,还包含有助于处理的几种相应信息。 cmd的大小为 32位,共分 4 个域:

2015-06-11 12:19:23 693

转载 Kconfig详解

当执行#make menuconfig时会出现内核的配置界面,所有配置工具都是通过读取"arch/$(ARCH)Kconfig"文件来生成配置界面,这个文件就是所有配置的总入口,它会包含其他目录的KconfigKconfig的作用:Kconfig用来配置内核,它就是各种配置界面的源文件,内核的配置工具读取各个Kconfig文件,生成配置界面供开发人员配置内核,最后生成配置文件.config

2015-06-11 11:08:56 292

转载 Linux内核中的Kconfig、Makefile、.config

毛毛同学今天学习了驱动程序模块的安装与卸载,在这个过程中毛毛发现,内核的目录中有许多的Kconfig、Makefile文件,但是毛毛不知道为什么需要这些文件,这些文件又是用来做什么的。下面我们就和陶毛毛同学一起来学习下这些文件的作用是什么。         首先我们来学习什么Makefile,什么是Kconfig ,什么是.config         Makefile:一个文本形式的文件

2015-06-11 10:51:00 337

转载 嵌入式linux环境下的视频采集(V4L2)

Video for Linux two(Video4Linux2)简称V4L2,是V4L的改进版。V4L2是linux操作系统下用于采集图片、视频和音频数据的API接口,配合适当的视频采集设备和相应的驱动程序,可以实现图片、视频、音频等的采集。在远程会议、可视电话、视频监控系统和嵌入式多媒体终端中都有广泛的应用。  一、Video for Linux two  在Linux下,所有

2015-06-04 11:42:21 1470

转载 双链表、链式栈、链式队列 及实现

一、双链表在单链表的基础上再增加一个指向它前驱的指针,就构成了双链表。所以双链表有三个变量:数据信息info、前驱指针llink、后继指针rlink。 二、双链表操作和实现   由于双链表也为单链表的一种变型,一些相似的操作就没一一列举,可以参考数据结构(四)——单链表 、带头结点的单链表、循环链表 及其实现 1、

2015-05-13 17:00:37 337

转载 二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现

一、基本概念每个结点最多有两棵子树,左子树和右子树,次序不可以颠倒。性质:1、非空二叉树的第n层上至多有2^(n-1)个元素。2、深度为h的二叉树至多有2^h-1个结点。满二叉树:所有终端都在同一层次,且非终端结点的度数为2。在满二叉树中若其深度为h,则其所包含的结点数必为2^h-1。完全二叉树:除了最大的层次即成为一颗满

2015-05-13 16:59:26 382

转载 单链表 、带头结点的单链表、循环链表 及其实现

一、 链式存储      以结点的形式存储数据。除了存放一个结点的信息外,还需附设指针。                数据在内存中存储是不连续的,每个结点只能也只有它能知道下一个结点的存储位置。  二、单链表  单链表是线性表链式存储的一种,其储存不连续。单链表的数据结构中包含两个变量:数据和指向下一结点的指针。

2015-05-13 16:58:01 463

转载 队列定义及实现、循环队列实现

一、队列    队列是一种特殊的线性表,它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。在队列这种数据结构中,最先插入的元素将是最先被删除的元素;反之最后插入的元素将最后被删除的元素,因此队列又称为“先进先出”(FIFO—first in first out)的线性表。

2015-05-13 16:54:53 546

原创 递归的应用实战一

列一: 斐波拉契数列strlen递归解法传统解法:int strlen(char* s){int n = 0;while(*s){n++;s++;}return n;}递归解法

2015-05-09 11:07:49 270

原创 栈与递归

上面这个函数通过递归实现字符串的逆序输出。

2015-05-09 09:21:02 295

原创 栈的应用实战二

2015-05-08 17:54:24 295

原创 栈的应用实战一

小结:

2015-05-08 17:42:46 338

原创 栈的定义和实现

栈的顺序结构实现,代码复用----线性表的顺序存储结构----顺序表栈的链式结构实现----代码复用----单链表

2015-05-08 16:35:42 360

原创 双向链表

单链表的局限:头文件:#ifndef _DLINKLIST_H_#define _DLINKLIST_H_typedef void DLinkList;typedef struct _tag_DLinkListNode DLinkListNode;struct _tag_DLinkListNode{

2015-05-08 11:04:25 298

原创 循环链表

循环链表的应用:头文件:#ifndef _CIRCLELIST_H_#define _CIRCLELIST_H_typedef void CircleList;typedef struct _tag_CircleListNode CircleListNode;struct _tag_CircleListNode{    CircleL

2015-05-08 10:52:15 297

原创 静态链表

单链表的相对劣势:单链表的实现严重依赖指针,数据元素中必须包含一个额外的指针域,没有指针的程序设计语言无法实现。静态链表是在顺序表的基础上利用数组实现的单链表。头文件:#ifndef _STATICLIST_H_#define _STATICLIST_H_typedef void StaticL

2015-05-08 09:44:57 322

原创 线性表的链式存储结构

链式存储定义:为了表示每个数据元素与其直接后继元素之间的逻辑关系,每个元素除了存储本身的信息外,还需要存储指示其直接后继的信息。单链表包括:表头结点:链表中的第一个结点,包含指向第一个数据元素的指针以及链表自身的一些信息。数据结点:链表中代表数据元素的结点,包含指向下一个数据元素的指针和数据元素的信息。尾结点:   链表中的最后一个数据结点,其下一个元素指针为空,表示无后继

2015-05-08 08:30:41 308

原创 线性表线性存储结构

线性表存数结构分为:顺序存储结构和链式存储结构顺序存储结构: 用一段地址连续的存储单元依次存储线性表中的数据元素。在C语言中可以用一维数组来实现顺序存储结构。1、存储空间的起始位置:数组node2、线性表的最大容量:数组长度 MAXSIZE3、线性表的当前长度:length#define MAXSIZE 20typedef struct  _tag_list

2015-05-07 21:37:59 347

转载 (转)嵌入式Linux系统BSP的设计与实现

1. 引言    嵌入式系统由硬件环境、嵌入式操作系统和应用程序组成,硬件环境是操作系统和应用程序运行的硬件平台,它随应用的不同而有不同的要求。硬件平台的多样性是嵌入式系统的主要特点,如何使嵌入式操作系统在不同的硬件平台上有效地运行,是嵌入式系统开发中需要解决的关键问题。解决的方法是在硬件平台和操作系统之间提供硬件相关层来屏蔽这些硬件的差异,给操作系统提供统一的运行环境,这种硬件相关层就是嵌入

2015-05-07 18:43:35 771

原创 3种编程方式实现交换变量a.b的值

1、通过中间变量#define swap1(a,b) \{ \int temp = a;\a = b; \b = a; \}2、加减运算#define swap2(a,b) \{ \a = a + b ;\b = a - b ;\a = a - b ;\}3、异或运行#define swap3(a,b) \{

2015-05-05 18:55:50 1805

转载 彻底搞清值传递和地址传递

1. 考题一:程序代码如下:void Exchg1(int x, int y)  {  int tmp;  tmp=x;  x=y;  y=tmp;  printf(“x=%d,y=%d/n”,x,y)}void main(){  int a=4,b=6;  Exchg1 (a,b) ;  printf(“a=%d,b=%d/n”,a,b)}

2015-05-05 00:22:59 355

转载 Linux守护进程的编程实现

Linux 守护进程的编程方法 守护进程(Daemon)是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。守护进程是一种很有用的进程。Linux的大多数服务器就是用守护进程实现的。比如,Internet服务器inetd,Web服务器httpd等。同时,守护进程完成许多系统任务。比如,作业规划进程crond,打印进程lpd等。 守护进程的编程本

2015-04-28 16:33:46 304

转载 Makefile详解

首先介绍make实用程序的语法和常用选项,然后细剖makefile文件的组成。make命令make [选项] [目标] [宏定义]通过命令行参数中的target,可指定make要编译的目标,并且允许同时定义编译多个目标,操作时按照从左向右的顺序依次编译target选项中指定的目标文件。如果命令行中没有指定目标,则系统默认target指向描述文件中第一个目标文件。-d

2015-04-26 20:18:18 470

转载 详解arm-linux-交叉工具链

1.安装工具链进入嵌入式开发前,事先要安装交叉工具链,步骤如下:(1) 解压工具链到某一目录下 tar zxvf  arm-linux-gcc-4.3.2.tar.gz  -C /(2) 修改/etc/profile,添加pathmunge  /usr/local/arm/4.3.2/bin,或针对某一用户修改~/.bashrc或~/.bash_profile(3)

2015-04-26 20:02:05 456

转载 Linux下tcp并发服务器的几种设计的模式套路

在做网络服务的时候tcp并发服务端程序的编写必不可少。tcp并发通常有几种固定的设计模式套路,他们各有优点,也各有应用之处。下面就简单的讨论下这几种模式的差异:    1、 单进程,单线程模式    在accept之后,就开始在这一个连接连接上的数据收接收,收到之后处理,发送,不再接收新的连接,除非这个连接的处理结束。    优点:        简单。  

2015-04-24 15:17:17 389

转载 Linux网络编程:基于TCP的程序开发

面向连接的TCP程序设计       基于TCP的程序开发分为服务器端和客户端两部分,常见的核心步骤和流程:       其实按照上面这个流程调用系统API确实可以完全实现应用层程序的开发,一点问题没有。可随着时间的推移,你会觉得这样子的开发毫无激情。为什么TCP的开发就要按照这样的流程来呢?而且一般出的问题几乎都不在这几个系统调用上,原因何在?当我们弄清网络开发的本质,协议栈的设计原

2015-04-22 16:24:27 411

转载 多线程程序设计

一、线程理论基础1. 多线程线程(thread)技术早在60年代就被提出,但真正应用多线程到操作系统中去,是在80年代中期,solaris是这方面的佼佼者。传统的Unix也支持线程的概念,但是在一个进程(process)中只允许有一个线程,这样多线程就意味着多进程。现在,多线程技术已经被许多操作系统所支持,包括Windows/NT、Linux。2. 为什么有了进程,还要引入

2015-04-22 00:14:09 405

转载 Linux进程间通信——使用消息队列

下面来说说如何用不用消息队列来进行进程间的通信,消息队列与命名管道有很多相似之处。有关命名管道的更多内容可以参阅我的另一篇文章:Linux进程间通信——使用命名管道一、什么是消息队列消息队列提供了一种从一个进程向另一个进程发送一个数据块的方法。  每个数据块都被认为含有一个类型,接收进程可以独立地接收含有不同类型的数据结构。我们可以通过发送消息来避免命名管道的同步和阻塞

2015-04-21 19:44:56 274

转载 进程间通讯----共享内存

共享内存    共享内存是被多个进程共享的一部分物理内存。共享内存是进程间共享数据的一种最快的方法,一个进程向共享内存区域写入了数据,共享这个内存区域的所有进程就可以立刻看到其中的内容。原理图如下:共享内存的实现分为两个步骤:一、 创建共享内存,使用shmget函数。二、 映射共享内存,将这段创建的共享内存映射到具体的进程空间去,使用shmat函数。

2015-04-21 18:40:45 406

转载 信号量--进程同步编程

1.信号量机制信号量机制即利用pv操作来对信号量进行处理。什么是信号量?信号量(semaphore)的数据结构为一个值和一个指针,指针指向等待该信号量的下一个进程。信号量的值与相应资源的使用情况有关。当它的值大于0时,表示当前可用资源的数量;当它的值小于0时,其绝对值表示等待使用该资源的进程个数。注意,信号量的值仅能由PV操作来改变。    

2015-04-21 12:46:38 637

转载 进程间通信--信号量详解及编程实例

信号量概述信号量定义:它是一个特殊变量,只允许对它进行等待和发送信号这两种操作。P(信号量变量sv):等待。如果sv大于0,减小sv。如果sv为0,挂起这个进程的执行。V(信号量变量sv):发送信号。如果有进程被挂起等待sv,使其恢复执行。如果没有进行被挂起等待sv,增加sv。PV操作伪代码[cpp] view plaincopypr

2015-04-21 11:24:23 369

转载 信号通讯

信号(signal)机制是Unix系统中最为古老的进程间通信机制,很多条件可以产生一个信号:1、当用户按某些按键时,产生信号。2、硬件异常产生信号:除数为0、无效的存储访问等等。这些情况通常由硬件检测到,将其通知内核,然后内核产生适当的信号通知进程,例如,内核对正访问一个无效存储区的进程产生一个SIGSEGV信号。3、进程用kill函数将信号发送给另一个进程。4、用

2015-04-20 22:57:09 429

转载 管道通信

什么是管道?       管道是单向的、先进先出的,它把一个进程的输出和另一个进程的输入连接在一起。一个进程(写进程)在管道的尾部写入数据,另一个进程(读进程)从管道的头部读出数据。管道的分类   管道包括无名管道和命名管道两种,前者用于父进程和子进程间的通信,后者可用于运行于同一系统中的任意两个进程间的通信。无名管道的创建  无名管道由pi

2015-04-20 22:46:23 465

转载 V4L2应用程序框架

V4L2是V4L的升级版本,linux下视频设备程序提供了一套接口规范。常用的结构体在内核目录include/linux/videodev2.h中定义struct v4l2_requestbuffers  //申请帧缓冲,对应命令VIDIOC_REQBUFSstruct v4l2_capability      //视频设备的功能,对应命令VIDIOC_QUERYCAPst

2015-04-18 13:39:28 990

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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