欣欣工作室——带你走进单片机世界

         
累计访问3435854
当前在线39
首   页 | 常用器件 | 问答集萃 | 技术文摘 | 在线学习 | 共享工程 | 资料下载 | 网友交流

 
Web xinworks
 
搜索:  使用说明:输入关键字,按Enter键开始搜索,多个关键字用空格分开。
<1> [2] [3] [4] [5] [6] [7] [8] [9] [10] 总计96篇文章   


linux驱动程序设计 添加日期: 2007-01-29 阅读次数: 775
【摘要】对linux的devfs类型的驱动程序的编写可以从以下几大内容理解和入手:
通过分析驱动程序源代码可以发现驱动程序一般可分三部分:
核心数据结构;核心数据和资源的初始化,注册以及注消,释放;底层设备操作函数;

A.核心数据结构
struct file_operations fops 设备驱动程序接口
struct file_operations {
struct module *owner;
loff_t (*llseek) (struct file *, loff_t, int);
ssize_t (*read) (struct file *, char *, size_t, loff_t *);
ssize_t (*write) (struct file *, const char *, size_t, loff_t *);
int (*readdir) (struct file *, void *, filldir_t);
unsigned int (*poll) (struct file *, struct poll_table_struct *);
int (*ioctl) (struct inode *, struct file *, unsigned int, unsigned long);
int (*mmap) (struct file *, struct vm_area_struct *);
int (*open) (struct inode *, struct file *);
int (*flush) (struct file *);
int (*release) (struct inode *, struct file *);
int (*fsync) (struct file *, struct dentry *, int datasync);
int (*fasync) (int, struct file *, int);
int (*lock) (struct file *, int, struct file_lock *);
ssize_t (*readv) (struct file *, const struct iovec *, unsigned long, loff_t *);
ssize_t (*writev) (struct file *, const struct iovec *, unsigned long, loff_t *);
ssize_t (*sendpage) (struct file *, struct page *, int, size_t, loff_t *, int);
unsigned long (*get_unmapped_area)(struct file *, unsigned long, unsigned long, unsigned long, unsigned long);
};

linux设备驱动 添加日期: 2007-01-29 阅读次数: 598
【摘要】一. linux设备概述
在概念上一般把设备分为字符设备、块设备。字符设备是指设备发送和接收数据以字符形式的进行;而块设备则以整个数据缓冲区的形式进行。但是,由于网络设备等有其特殊性,实际上系统对它们单独处理。

系统用主设备号(MAJOR)加次设备(MINOR)号来唯一标识一个设备。相同主设备号表示同一类设备,例如都是硬盘;次设备号标识同类设备的个数。所有设备在适当的目录(通常在/dev目录下)下必须有相应的文件,这样字符设备和块设备都可以通过文件操作的系统调用了完成。不同的是,块设备操作经常要和缓冲区打交道,更加复杂一点。

linux操作系统网络驱动程序编写 添加日期: 2007-01-29 阅读次数: 663
【摘要】一.linux系统设备驱动程序概述
1.1 linux设备驱动程序分类
linux设备驱动程序在Linux的内核源代码中占有很大的比例,源代码的长度日益增加,主要是驱动程序的增加。在Linux内核的不断升级过程中,驱动程序的结构还是相对稳定。在2.0.xx到2.2.xx的变动里,驱动程序的编写做了一些改变,但是从2.0.xx的驱动到2.2.xx的移植只需做少量的工作。
linux系统的设备分为字符设备(char device),块设备(block device)和网络设备(network device)三种。字符设备是指存取时没有缓存的设备。块设备的读写都有缓存来支持,并且块设备必须能够随机存取(random access),字符设备则没有这个要求。典型的字符设备包括鼠标,键盘,串行口等。块设备主要包括硬盘软盘设备,CD-ROM等。一个文件系统要安装进入操作系统必须在块设备上。

网络设备在linux里做专门的处理。Linux的网络系统主要是基于BSD unix的socket机制。在系统和驱动程序之间定义有专门的数据结构(sk_buff)进行数据的传递。系统里支持对发送数据和接收数据的缓存,提供流量控制机制,提供对多协议的支持。

1.2 编写驱动程序的一些基本概念
无论是什么操作系统的驱动程序,都有一些通用的概念。操作系统提供给驱动程序的支持也大致相同。下面简单介绍一下网络设备驱动程序的一些基本要求。

1.2.1 发送和接收
这是一个网络设备最基本的功能。一块网卡所做的无非就是收发工作。所以驱动程序里要告诉系统你的发送函数在哪里,系统在有数据要发送时就会调用你的发送程序。还有驱动程序由于是直接操纵硬件的,所以网络硬件有数据收到最先能得到这个数据的也就是驱动程序,它负责把这些原始数据进行必要的处理然后送给系统。这里,操作系统必须要提供两个机制,一个是找到驱动程序的发送函数,一个是驱动程序把收到的数据送给系统。

1.2.2 中断
中断在现代计算机结构中有重要的地位。操作系统必须提供驱动程序响应中断的能力。一般是把一个中断处理程序注册到系统中去。操作系统在硬件中断发生后调用驱动程序的处理程序。linux支持中断的共享,即多个设备共享一个中断。

1.2.3 时钟
在实现驱动程序时,很多地方会用到时钟。如某些协议里的超时处理,没有中断机制的硬件的轮询等。操作系统应为驱动程序提供定时机制。一般是在预定的时间过了以后回调注册的时钟函数。在网络驱动程序中,如果硬件没有中断功能,定时器可以提供轮询(poll)方式对硬件进行存取。或者是实现某些协议时需要的超时重传等。

C语言中的字节对齐问题 添加日期: 2007-01-27 阅读次数: 613
【摘要】一.什么是字节对齐,为什么要对齐?

    现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特定的内存地址访问,这就需要各种类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐。
    对齐的作用和原因:各个硬件平台对存储空间的处理上有很大的不同。一些平台对某些特定类型的数据只能从某些特定地址开始存取。比如有些架构的CPU在访问一个没有进行对齐的变量的时候会发生错误,那么在这种架构下编程必须保证字节对齐.其他平台可能没有这种情况,但是最常见的是如果不按照适合其平台要求对数据存放进行对齐,会在存取效率上带来损失。比如有些平台每次读都是从偶地址开始,如果一个int型(假设为32位系统)如果存放在偶地址开始的地方,那么一个读周期就可以读出这32bit,而如果存放在奇地址开始的地方,就需要2个读周期,并对两次读出的结果的高低字节进行拼凑才能得到该32bit数据。显然在读取效率上下降很多。

二.字节对齐对程序的影响:

    先让我们看几个例子吧(32bit,x86环境,gcc编译器):
设结构体如下定义:
struct A
{
    int a;
    char b;
    short c;
};
struct B
{
    char b;
    int a;
    short c;
};
现在已知32位机器上各种数据类型的长度如下:
char:1(有符号无符号同)    
short:2(有符号无符号同)    
int:4(有符号无符号同)    
long:4(有符号无符号同)    
float:4    double:8
那么上面两个结构大小如何呢?
结果是:
sizeof(strcut A)值为8
sizeof(struct B)的值却是12

ASCII字符表 添加日期: 2006-12-30 阅读次数: 638
【摘要】目前计算机中用得最广泛的字符集及其编码,是由美国国家标准局(ANSI)制定的ASCII码(American Standard Code for Information Interchange,美国标准信息交换码),它已被国际标准化组织(ISO)定为国际标准,称为ISO 646标准。适用于所有拉丁文字字母,ASCII码有7位码和8位码两种形式。

因为1位二进制数可以表示(21=)2种状态:0、1;而2位二进制数可以表示(22)=4种状态:00、01、10、11;依次类推,7位二进制数可以表示(27=)128种状态,每种状态都唯一地编为一个7位的二进制码,对应一个字符(或控制码),这些码可以排列成一个十进制序号0~127。所以,7位ASCII码是用七位二进制数进行编码的,可以表示128个字符。

第0~32号及第127号(共34个)是控制字符或通讯专用字符,如控制符:LF(换行)、CR(回车)、FF(换页)、DEL(删除)、BEL(振铃)等;
通讯专用字符:SOH(文头)、EOT(文尾)、ACK(确认)等;

第33~126号(共94个)是字符,其中第48~57号为0~9十个阿拉伯数字;65~90号为26个大写英文字母,97~122号为26个小写英文字母,其余为一些标点符号、运算符号等。

注意:在计算机的存储单元中,一个ASCII码值占一个字节(8个二进制位),其最高位(b7)用作奇偶校验位。所谓奇偶校验,是指在代码传送过程中用来检验是否出现错误的一种方法,一般分奇校验和偶校验两种。奇校验规定:正确的代码一个字节中1的个数必须是奇数,若非奇数,则在最高位b7添1;偶校验规定:正确的代码一个字节中1的个数必须是偶数,若非偶数,则在最高位b7添1。 
为了便于查询,以下列出ASCII码表: 

汽车电子保护电路设计 添加日期: 2006-09-27 阅读次数: 924
【摘要】    汽车环境对电子产品而言是非常苛刻的:任何连接到12V电源上的电路都必须工作在9V至16V的标称电压范围内,其它需要迫切应对的问题包括负载突降、冷车发动、电池反向、双电池助推、尖峰信号、噪声和极宽的温度范围。在负载突降时,交流发电机的输出电压迅速升高到60V或更高的电压;冷车发动指的是在低温时起动汽车,这会引起电池电压下降至6V或更低;电池反向是在激活一个没电的电池时,由于粗心地将电缆极性接反造成的。很多牵引车都配备两个串联起来的12V电池,以在寒冷的天气中帮助起动一个电池没电的汽车。这将使电气系统的电压范围提高到了28V,直到汽车起动且牵引车司机断开跨接电缆为止。 

考虑到汽车电气系统由大电流电动机、继电器、螺线管、车灯和不断颤动的开关触点组成,因此出现尖峰信号和噪声就一点也不奇怪了。另外,交流发电机是采用斩波励磁调整的三相电机,有时会以非常大的电流对电池充电。因此,对于工作在汽车环境中的电路设计来说,尤其是需要适应在负载突降和双电池助推情况下产生的高输入电压电路。 

无源保护电路 

用于汽车电子产品的无源保护网络如图1所示。与此相同或类似的电路广泛用于保护与汽车 12V 总线连接的各种系统。这种网络防止高压尖峰、持续过压、电池反向和电流过度消耗造成损害。图1的电流保护作用很明显,如果负载电流超过1A的时间很长,保险丝F1就会熔化。D1与F1结合防止电池反向连接造成损害,大电流流经正向偏置的D1并烧断保险丝。电解电容器大约在额定电压的150%时有一个有趣的特性:随着终端电压的提高,这种电容消耗的电流也越来越大,就C1而言,它在输入持续升高时起箝位作用(最终烧断保险丝)。双电池助推时的电压为28V左右,这不会烧断保险丝,因为C1 25V的额定值足够高,额外消耗的电流很少。电感器增加了很小的电阻,以限制峰值故障电流以及输入瞬态的转换率,从而在存在尖峰时帮助C1实现箝位。 

无源网络的主要缺点是它依靠烧断保险丝来防止过流、过压和电池反向造成损害。另一个缺点是,它依靠电解电容实现箝位。这种电容器老化以后,电解质会变干,等效串联电阻(ESR)提高的特性也就消失了,这会损害箝位效果。有时D1采用大的齐纳二极管以帮助这个电容器发挥作用。人们已经设计出了有源电路来克服这些缺点。 

有源电路 

图2显示了一个有源解决方案,该方案用于屏蔽敏感电路,使其免受变化不定的12V汽车系统的影响。采用LT1641来驱动输入N沟道MOSFET,而上述提供无源解决方案就不具备这种附加保护:首先,LT1641在输入低于9V时断开负载,以防在低输入电压时系统失灵,并在起动时或充电系统出现故障时,减少系统向非关键负载提供宝贵的电流的机会;其次,LT1641在首次加电时逐渐升高输出电压,对负载实行软启动;第三,通过限流和定时断路器保护输出免受过载和短路影响。如果发生电流故障,断路器就以1至2Hz的速率自动重新尝试建立连接,可以设定保护电路上行线路保险丝的容限,让它在LT1641的下行线路出现电流故障时不熔化;最后,图2所示电路隔离出现在输入端的过压状态,同时提供箝位输出,以便负载电路在出现过压时能继续正常工作。 

CRC算法与实现 添加日期: 2006-09-21 阅读次数: 1054
【摘要】引言 

CRC的全称为Cyclic Redundancy Check,中文名称为循环冗余校验。它是一类重要的线性分组码,编码和解码方法简单,检错和纠错能力强,在通信领域广泛地用于实现差错控制。实际上,除数据通信外,CRC在其它很多领域也是大有用武之地的。例如我们读软盘上的文件,以及解压一个ZIP文件时,偶尔会碰到“Bad CRC”错误,由此它在数据存储方面的应用可略见一斑。

差错控制理论是在代数理论基础上建立起来的。这里我们着眼于介绍CRC的算法与实现,对原理只能捎带说明一下。若需要进一步了解线性码、分组码、循环码、纠错编码等方面的原理,可以阅读有关资料。

利用CRC进行检错的过程可简单描述为:在发送端根据要传送的k位二进制码序列,以一定的规则产生一个校验用的r位监督码(CRC码),附在原始信息后边,构成一个新的二进制码序列数共k+r位,然后发送出去。在接收端,根据信息码和CRC码之间所遵循的规则进行检验,以确定传送中是否出错。这个规则,在差错控制理论中称为“生成多项式”。

1 代数学的一般性算法

在代数编码理论中,将一个码组表示为一个多项式,码组中各码元当作多项式的系数。例如 1100101 表示为
1·x6+1·x5+0·x4+0·x3+1·x2+0·x+1,即 x6+x5+x2+1。

设编码前的原始信息多项式为P(x),P(x)的最高幂次加1等于k;生成多项式为G(x),G(x)的最高幂次等于r;CRC多项式为R(x);编码后的带CRC的信息多项式为T(x)。

NAND Flash和NOR Flash的比较 添加日期: 2006-09-19 阅读次数: 983
【摘要】NOR和NAND是现在市场上两种主要的非易失闪存技术。Intel于1988年首先开发出NOR 
flash技术,彻底改变了原先由EPROM和EEPROM一统
天下的局面。紧接着,1989年,东芝公司发表了NAND flash结构,强调降低每比特的成
本,更高的性能,并且象磁盘一样可以通过接口
轻松升级。但是经过了十多年之后,仍然有相当多的硬件工程师分不清NOR和NAND闪存。

  相“flash存储器”经常可以与相“NOR存储器”互换使用。许多业内人士也搞不清
楚NAND闪存技术相对于NOR技术的优越之处,因
为大多数情况下闪存只是用来存储少量的代码,这时NOR闪存更适合一些。而NAND则是高
数据存储密度的理想解决方案。 
  NOR的特点是芯片内执行(XIP, eXecute In Place),这样应用程序可以直接在flash
闪存内运行,不必再把代码读到系统RAM中。
NOR的传输效率很高,在1~4MB的小容量时具有很高的成本效益,但是很低的写入和擦除
速度大大影响了它的性能。
  NAND结构能提供极高的单元密度,可以达到高存储密度,并且写入和擦除的速度也
很快。应用NAND的困难在于flash的管理和需要
特殊的系统接口。

步进电机小知识 添加日期: 2006-09-15 阅读次数: 1145
【摘要】1.什么是步进电机?
步进电机是一种将电脉冲转化为角位移的执行机构。通俗一点讲:当步进驱动器接收到一个脉冲信号,
它就驱动步进电机按设定的方向转动一个固定的角度(及步进角)。您可以通过控制脉冲个数来控制
角位移量,从而达到准确定位的目的;同时您可以通过控制脉冲频率来控制电机转动的速度和加速度,
从而达到调速的目的。

2.步进电机分哪几种?
步进电机分三种:永磁式(PM) ,反应式(VR)和混合式(HB)
永磁式步进一般为两相,转矩和体积较小,步进角一般为7.5度 或15度;
反应式步进一般为三相,可实现大转矩输出,步进角一般为1.5度,但噪声和振动都很大。在欧美等发
达国家80年代已被淘汰;混合式步进是指混合了永磁式和反应式的优点。它又分为两相和五相:两相
步进角一般为1.8度而五相步进角一般为 0.72度。这种步进电机的应用最为广泛。

袖珍式调频耳机收音机 添加日期: 2006-07-13 阅读次数: 1143
【摘要】收音机电路见图1。它的新颖之处在于前级晶体管VT1以不同于超再生式及超外的方式进行工作,同时具有混频、本振、锁相环同步检波及低频放大4种功能。L1、C2组成Q值较低的FM频段(87MHz-108MHZ)宽带输入回路,中心频率98MHZ。L2、C5、C6组成本振调谐回路,本振频率为输入接收频率接收频率及本振信号的二次谐波,混频后输出的中频信号落在音频范围内。由于VT1的输出电导是集电极电流的函数,所以它一身具有控制本振频率的功能。
VT1作为本机振荡器时,接成共基极电路,由于 L1、C2对本振频率失谐,所以VT1的基极等效接地。
VT1作为混频器时,则为共发射极电路。
VT1作为同频检波器时,也是共基极电路,这是国为C3取值很大,对音频信号容抗很小,可认为VT1的基极交流接地。此时音频(即混频后所得的中频)信号的放大倍数约为R3/R2。C7为高频旁路电路,用于将检波后的载频成分旁路。VT1的本振频率在一定范围内受控于输入信号频率,这是因为当本振信号的二次谐波接近于一个调频电台的发射频率时,VT1的集成电极电流中将有二者混频后输出的音频成,使VR1的输出电导随之改变,使本振频率也发生变化,即本振频率与外来信号同步,与锁相接收的原理完全类似,具有AFC功能。

 后页
本网站资料仅供学习之用,如果侵犯了您的权益请通知,我们会删除相关下载。



粤ICP备06035157号