自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(98)
  • 资源 (1)
  • 收藏
  • 关注

转载 linux工作项

工作项、工作队列和工作者线程把推后执行的任务叫做工作(work),描述它的数据结构为work_struct ,这些工作以队列结构组织成工作队列(workqueue),其数据结构为workqueue_struct ,而工作线程就是负责执行工作队列中的工作。系统默认的工作者线程为events。工作队列(work queue)是另外一种将工作推后执行的形式。工作队列可以把工作推后,交由一

2016-06-30 13:17:15 471

转载 工作队列

工作队列(work queue)是Linux kernel中将工作推后执行的一种机制。这种机制和BH或Tasklets不同之处在于工作队列是把推后的工作交由一个内核线程去执行,因此工作队列的优势就在于它允许重新调度甚至睡眠。工作队列是2.6内核开始引入的机制,在2.6.20之后,工作队列的数据结构发生了一些变化,因此本文分成两个部分对2.6.20之前和之后的版本分别做介绍。

2016-06-30 09:38:15 522

转载 linux开机自启动linux

开机后自动运行用户的应用程序或启动系统服务的命令保存在开发板根文件系统的/usr/etc/rc.local文件中。有的开发板开机后自动运行图形界面程序,需要按住ctrl+c让开发板进入到linux的SHELL提示符界面。其实可通过注释掉rc.local文件中调用图形界面的命令,增加运行用户应用程序的命令,达到开机自动运行用户应用程序的目的。 下面以我做的实验为例,描述具体的实现步骤

2016-06-29 09:04:46 289

转载 自旋锁

对于互斥, 旗标是一个有用的工具, 但是它们不是内核提供的唯一这样的工具. 相反, 大部分加锁是由一种称为自旋锁的机制来实现. 不象旗标, 自旋锁可用在不能睡眠的代码中, 例如中断处理. 当正确地使用了, 通常自旋锁提供了比旗标更高的性能. 然而, 它们确实带来对它们用法的一套不同的限制.    自旋锁概念上简单. 一个自旋锁是一个互斥设备, 只能有 2 个值:"上锁"和"解锁". 它常常实现

2016-06-27 00:05:36 343

转载 自旋锁

Linux 2.4.x及以前的版本都是非抢占式内核方式,如果编译成单处理器系统,在同一时间只有一个进程在执行,除非它自己放弃,不然只有通过"中断"才能中断其 执行。因此,在单处理器非抢占式内核中,如果需要修改某个重要的数据结构,或者执行某些关键代码,只需要禁止中断。( 只有禁止中断)在对称多处理器,仅仅禁止某个CPU的中断是不够的,当然我们也可以将所有CPU的中断都禁止,但这样做开销很

2016-06-27 00:00:23 433

转载 并发总结

"小王,小王,别睡了,瞧你,咋还睡着了呢…"我催促他说."现在是公元前还是公元后啊,我的MM等急了没.."呵呵,看他一脸傻笑。提醒各位路过的MM,如果没有男友的,可以联系小王,电话:拐拐拐。“什么,我的,呵呵,没办法,谁让我这有才呢..”算算前边有关并发控制的有关内容,都到五了,一连来了十一招,今天也不好意思再卖官子了,做一个最后的实例总结篇,下一节,就要开始新的内容了哦,

2016-06-26 01:45:43 200

转载 并发5

小涛,还有多少啊,你看我本来就开玩笑似的说说火车票,飞机票的事,看MM的事,你在眉飞色舞,鸡飞狗跳的没完了呢…”"啊?怎么这样呢,本来一个寝室,做人的差别就那么大嗫,平时不好好学习,有问题了问我,给你免费教学,还满腹牢骚,也太不够朋友了吧…."我锤着桌子说."朋友,我还不够朋友啊,你没听说吗:朋友为我,两肋插刀,我为朋友,插它两刀..“小王打断我,”听你念经似的,都三个小时了,你瞧

2016-06-26 01:42:49 176

转载 并发4

出招表七:信号量(信号量其实和自旋锁是一样的,就是有一点不同:当获取不到信号量时,进程不会原地打转而是进入休眠等待状态)Linux系统中与信号量相关的操作主要有一下4种:1)定义信号量    struct semaphore sem;2)初始化信号量   void sema_init (struct semphore *sem, int val);    //设置s

2016-06-26 01:40:39 200

转载 并发3

算了,既然给你那么多秘籍了,也不在乎这剩下的两三招:出招表五:顺序锁(seqlock)使用顺序锁,读执行单元绝不会被写执行单元阻塞,同时写执行单元也不需要等待所有读执行单元完成读操作后才进行写操作。但是写执行单元之间仍然是互斥的。如果读执行单元在读操作期间,写执行单元已经发生了操作,那么,读执行单元必须重新读取数据,以便确保得到的数据是完整的。致命弱点:顺序锁有一个限制,就

2016-06-26 01:39:55 158

转载 并发2

上集说到哪儿了呢?瞧这记性,什么?说到"天要下雨,娘要嫁人"那段。。这是谁在答话,废话,我当然知道讲到这里了,我是说驱动讲到哪里了。算了,不管了..话说Linux开源社区的开发者们做了什么工作呢,很简单:利用spin_lock()/spin_unlock()作为自旋锁的基础,将它们和关中断local_irq_disable()/开中断local_irq_enable(),关

2016-06-26 01:39:07 275

转载 并发1

小涛,你说十一黄金周,火车站,飞机场那些售票系统咋没一个宕掉的呢。你不宕掉也没关系,来两个卖错票的,说不定哥就去上海看世博,去北京看青梅竹马的表妹了…”小王抱怨道。“晕死..哥鄙视你,你说都老大不小的人了,怎么脑子里天天都是MM之类的事了,能不能有点男子气概啊..”。“靠,能跟你比啊,你是饱汉不知饿汉饥,要是像你一样十一和…”  "嗯,啊,哼哼.."没等他说完,我赶忙塞了双臭袜子(哪天

2016-06-26 01:37:33 195

转载 irq

中断还是中断,我讲了很多次的中断了,今天还是要讲中断,为啥呢?因为在操作系统中,中断是必须要讲的..       那么什么叫中断呢, 中断还是打断,这样一说你就不明白了。唉,中断还真是有点像打断。我们知道linux管理所有的硬件设备,要做的第一件事先是通信。然后,我们天天在说一句话:处理器的速度跟外围硬件设备的速度往往不在一个数量级上,甚至几个数量级的差别,这时咋办,你总不能让处理器在那里

2016-06-26 01:31:04 414

转载 irq

一、基本概念中断分为同步中断和异步中断。同步中断是由CPU控制单元产生的,“同步”是指只有在一条指令执行完毕后,CPU才会发出中断,而不是发生在代码指令执行期间,比如系统调用。而异步中断是由其他硬件设备依照CPU时钟信号产生的,即意味着中断能够在指令之间发生,例如键盘中断。按照Intel的微处理器手册,同步中断和异步中断也分别称为异常(或者软件中断)和中断。中断大家都比较熟悉,是由

2016-06-26 01:29:36 509

转载 西选手

内核同步讲的比较多了,我也就不太啰嗦了,先说一些概念,然后就是方法。       同步就是避免并发和防止竞争条件。有关临界区的例子我就不举了,随便一本操作系统的书上都有。锁机制的提出也算解决了一些问题,我们待会再说,现在只要知道锁的使用是自愿的,非强制的。linux自身也提供了几种不同的锁机制,区别主要在于当锁被争用时,有些会简单地执行等待,而有些锁会使当前任务睡眠直到锁可用为止,这个后面

2016-06-26 01:28:21 313

转载 自旋锁

Linux 设备驱动中必须解决的一个问题是多个进程对共享资源的并发访问,并发访问会导致竞态,linux 提供了多种解决竞态问题的方式,这些方式适合不同的应用场景。 Linux 内核是多进程、多线程的操作系统,它提供了相当完整的内核同步方法。内核同步方法列表如下:中断屏蔽原子操作自旋锁读写自旋锁顺序锁信号量读写信号量BKL (大内核锁)Seq 锁一、并

2016-06-26 01:26:57 1318

转载 linux中断

linux内核中也存在多任务,这些任务可能是不同的类型,它们之间可能也需要进行同步和互斥,在讨论linux内核中的同步和互斥之前有必要先讨论下linux内核中的“任务”类型。linux内核中的任务包括:中断和异常软中断和taskletworkqueue内核定时器内核线程系统调用一、中断和异常1.中断和异常的基本概念1. 中断:指当需要时CPU暂时停止当前程序的执行转而执行处理新

2016-06-26 01:09:35 448

转载 定时器

时钟时间维护和利用是操作系统的一个基础任务。操作系统中的时间相关的服务包括:时间维护时钟同步time-of-day的表示下一个事件的调度处理器以及内核定时器进程统计进程度量linux最初的实现包括了对这些服务的支持。其模型如图所示(TOD:time of day):这种实现下每一种架构都有自己的一套时钟实现方案代码,同时也只支持低分辨率定时器,无

2016-06-26 01:05:25 826

转载 linux内核同步之每CPU变量、原子操作、内存屏障、自旋锁

linux内核中的各种“任务”都能看到内核地址空间,因而它们之间也需要同步和互斥。linux内核支持的同步/互斥手段包括:技术功能作用范围每CPU变量为每个CPU复制一份数据所有CPU原子操作原子的读-修改-写一个计数器的指令所有CPU内存屏障避免指令被重新排序本地CPU或所有CPU自旋锁 

2016-06-26 01:02:01 1648 1

转载 Linux内核驱动之原子变量

有时, 一个共享资源是一个简单的整数值. 假设你的驱动维护一个共享变量 n_op, 它告知有多少设备操作目前未完成. 正常地, 即便一个简单的操作例如:n_op++;可能需要加锁. 某些处理器可能以原子的方式进行那种递减, 但是你不能依赖它. 但是一个完整的加锁体制对于一个简单的整数值看来过分了. 对于这样的情况, 内核提供了一个原子整数类型称为 atomic_t, 定义在 .一个 a

2016-06-26 00:51:25 1131

转载 Linux内核中锁机制之完成量、互斥量

在上一篇博文中笔者分析了关于信号量、读写信号量的使用及源码实现,接下来本篇博文将讨论有关完成量和互斥量的使用和一些经典问题。 八、完成量下面讨论完成量的内容,首先需明确完成量表示为一个执行单元需要等待另一个执行单元完成某事后方可执行,它是一种轻量级机制。事实上,它即是为了完成进程间的同步而设计的,故而仅仅提供了代替同步信号量的一种解决方法,初值被初始化为0。它在include\li

2016-06-26 00:34:17 458

转载 Linux内核中锁机制之信号量、读写信号量

在上一篇博文中笔者分析了关于内存屏障、读写自旋锁以及顺序锁的相关内容,本篇博文将着重讨论有关信号量、读写信号量的内容。 六、信号量关于信号量的内容,实际上它是与自旋锁类似的概念,只有得到信号量的进程才能执行临界区的代码;不同的是获取不到信号量时,进程不会原地打转而是进入休眠等待状态。它的定义是include\linux\semaphore.h文件中,结构体如图6.1所示。其中的co

2016-06-26 00:25:37 975

转载 Linux内核中锁机制之内存屏障、读写自旋锁及顺序锁

在上一篇博文中笔者讨论了关于原子操作和自旋锁的相关内容,本篇博文将继续锁机制的讨论,包括内存屏障、读写自旋锁以及顺序锁的相关内容。下面首先讨论内存屏障的相关内容。三、内存屏障不知读者是是否记得在笔者讨论自旋锁的禁止或使能的时候,提到过一个内存屏障函数。OK,接下来,笔者将讨论内存屏障的具体细节内容。我们首先来看下它的概念,Memory Barrier是指编译器和处理器对代码进行

2016-06-26 00:22:14 1716

转载 Linux内核中锁机制之原子操作、自旋锁

很多人会问这样的问题,Linux内核中提供了各式各样的同步锁机制到底有何作用?追根到底其实是由于操作系统中存在多进程对共享资源的并发访问,从而引起了进程间的竞态。这其中包括了我们所熟知的SMP系统,多核间的相互竞争资源,单CPU之间的相互竞争,中断和进程间的相互抢占等诸多问题。通常情况下,如图1所示,对于一段程序,我们的理想是总是美好的,希望它能够这样执行:进程1先对临界区完成操作,然后进

2016-06-26 00:12:19 2792

转载 (转)内核中断,异常,抢占总结篇

一、基本概念中断分为同步中断和异步中断。同步中断是由CPU控制单元产生的,“同步”是指只有在一条指令执行完毕后,CPU才会发出中断,而不是发生在代码指令执行期间,比如系统调用。而异步中断是由其他硬件设备依照CPU时钟信号产生的,即意味着中断能够在指令之间发生,例如键盘中断。按照Intel的微处理器手册,同步中断和异步中断也分别称为异常(或者软件中断)和中断。中断大家都比较熟悉,是由

2016-06-23 21:05:48 423

转载 6lowpan简介

摘要:6LowPan,即IPv6 over IEEE 802.15.4,为低速无线个域网标准。IPv6作为网络层互联方案,6LowPan技术引起了广泛的关注。为此,介绍基于6LowPan的技术,讨论技术优势,分析关键技术,重点介绍其在智能家居无线网络中的应用,对其应用前景进行展望。   关键词:6LowPan;IEEE 802.15.4;低速无线个域网:IPv6      近年来集成了

2016-06-22 09:56:08 12827

转载 如何在C/C++中动态分配二维数组

在C/C++中动态分配二维数组可以先申请一维的指针数组,然后该数组中的每个指针再申请数组,这样就相当于二维数组了,但是这种方法会导致每行可能不相邻,从而访问效率比较低。如何申请连续的二维数组了?本文将分别三个方面讲解:一.动态申请列大小固定的二维数组二.C语言中动态申请连续的二维数组三.C++语言中动态申请连续的二维数组 一.动态申请列大小固定的二维数组

2016-06-22 09:31:22 1882

转载 cJSON学习笔记 续集

0.前言    本文试图说明如何使用CJSON构造各种各样的JSON数据包。在前段时间已经写过一篇cJSON的文章,所以本文成为“续集”。    【相关博文】    【前端学习——JSON学习】——学习各种各样的JSON格式    【cJSON学习笔记】——本学习笔记的前一“集”。    【代码仓库】——cJSON-Example

2016-06-19 18:13:07 192

转载 json 转换篇

Jni中C++和Java的参数传递 如何使用JNI的一些基本方法和过程在网上多如牛毛,如果你对Jni不甚了解,不知道Jni是做什么的,如何建立一个基本的jni程序,或许可以参考下面下面这些文章:利用VC++6.0实现JNI的最简单的例子 JNI入门教程之HelloWorld篇 SUN JNI Tutorial这些资料的例子中,大多数只是输入一些简单的参数,获取没有参数。而在

2016-06-18 15:32:27 287

转载 java和c之间进行数据传递

在java和c之间进行数据传递,两者之间数据的传递有这样几种情况:java和c之间基本数据类型 的交互,java向c传递对象类型,c向java返回对象类型,c调用java类。下面就这样几种情况分类说明。1、java 向c传递基本数据类型对于基本数据类型,java和c是相互对应的,所以可以直接使用。它们的对应关系为;------------------------------

2016-06-18 15:25:24 207

转载 JSON

[cpp] view plain copy "code" class="cpp">#include   #include     void test_jsonc()  {        struct json_object *infor_object = NULL;      infor_object = json_object_new_

2016-06-18 15:13:48 286

转载 json-c库使用总结

1. json_object_get与json_object_put函数 struct json_object* json_object_get(struct json_object *jso); // 将jso对象的引用计数加1,返回jso自身void json_object_put(struct json_object *jso); // 将jso对象的引用计数减1。此时如果jso的引

2016-06-18 15:04:48 590

转载 Jsoncpp的使用

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。 易于人阅读和编写。同时也易于机器解析和生成。 它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括

2016-06-18 15:01:38 196

转载 c语言解析json

我使用的是cJSON:http://sourceforge.net/projects/cjson/ 先看json的数据结构 c中没有对象,所以json数据是采用链表存储的 C代码  typedef struct cJSON {      struct cJSON *next,*prev;   // 数组 对象数据中用到      struct c

2016-06-17 16:00:07 535

转载 Linux下的platform总线驱动(一)

版权所有,转载请说明转自 http://my.csdn.net/weiqing1981127一.Platform设备驱动概念主要讲解平台设备驱动的模型和基本概念,同时因为驱动加载的方式有动态加载和静态加载两种方式,这里我们分别对动态加载和静态加载两种情况下,如何使用平台设备和驱动加以叙述。最后使用mini2440开发板,运用Platform和device_attribute机制

2016-06-16 00:18:48 223

转载 Linux下spi驱动开发 2013-04-10 11:32:27

转载至:http://www.embedu.org/Column/Column367.htm一、概述基于子系统去开发驱动程序已经是linux内核中普遍的做法了。前面写过基于I2C子系统的驱动开发。本文介绍另外一种常用总线SPI的开发方法。SPI子系统的开发和I2C有很多的相似性,大家可以对比学习。本主题分为两个部分叙述,第一部分介绍基于SPI子系统开发的理论框架;第

2016-06-16 00:15:01 305

转载 Linux下spi驱动开发(1)

一、概述基于子系统去开发驱动程序已经是linux内核中普遍的做法了。前面写过基于I2C子系统的驱动开发。本文介绍另外一种常用总线SPI的开发方法。SPI子系统的开发和I2C有很多的相似性,大家可以对比学习。本主题分为两个部分叙述,第一部分介绍基于SPI子系统开发的理论框架;第二部分以华清远见教学平台FS_S5PC100上的M25P10芯片为例(内核版本2.6.29),编写一个SPI驱动程序

2016-06-16 00:13:27 337

转载 linux spi驱动分析

关于spi的学习,我觉得最好的方法还是看Linux的源代码,主要是driver/spi/spi.c(h),spidev.c(h)。spi dev的示例可以看看at25.c,spi总线的示例可以看omap_uwire或者spi_s3c24xx.c和spi_s3c24xx_gpio.c。在看这些代码之前,需要对Linux的设备模型有一定的了解。另外,网上有两篇教程不错,《linux spi子系统驱

2016-06-16 00:08:08 570

转载 linux内核SPI总线驱动分析(一)

下面有两个大的模块:一个是SPI总线驱动的分析            (研究了具体实现的过程)另一个是SPI总线驱动的编写(不用研究具体的实现过程)SPI总线驱动分析 1 SPI概述      SPI是英语Serial Peripheral interface的缩写,顾名思义就是串行外围设备接口,是Motorola首先在其MC68HCXX系列处理器上定义

2016-06-16 00:03:55 490

转载 Linux下SPI从设备驱动的编写

SPI(Serial Peripheral Interface) 是一个同步的四线制串行线,用于连接微控制器和传感器、存储器及外围设备。三条信号线持有时钟信号(SCLK,经常在10MHz左右)和并行数据线带有“主出,从进(MOSI)”或是“主进,从出(MISO)”信号。数据交换的时候有四种时钟模式,模式0和模式3是最经常使用的。每个时钟周期将会传递数据进和出。如果没有数据传递的话,时钟将不会循环。

2016-06-16 00:00:24 8880 2

转载 linux中断编程函数

总结下linux中断编程的函数,方便下次使用时查看。1.中断申请和释放int request_irq( unsigned int irq,  irq_handler_t handler, unsigned long irqflags, const char * devname, void *dev_id )irq---中断号handler---中断处理函数i

2016-06-15 23:57:08 437

linux 嵌入式开发讲义

嵌入式开发1111111111111111111111111111111111111

2009-10-11

空空如也

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

TA关注的人

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