ImageVerifierCode 换一换
格式:DOCX , 页数:16 ,大小:263.31KB ,
资源ID:12734950      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/12734950.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(嵌入式作页.docx)为本站会员(b****0)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

嵌入式作页.docx

1、嵌入式作页1.名词含义Framebuffer、ARM、xscale、PXA255、RISC、体系结构Framebuffer:驱动程序的一种,帧缓冲区。通过Framebuffer设备,上层软件可以通过一个良好定义的软件接口访问图形硬件,而不需要关心底层图形硬件是如何工作的。FrameBuffer 是出现在 2.2.xx 内核当中的一种驱动程序接口。 Linux是工作在保护模式下,所以用户态进程是无法象DOS那样使用显卡BIOS里提供的中断调用来实现直接写屏,Linux抽象出FrameBuffer这个设备来供用户态进程实现直接写屏。Framebuffer机制模仿显卡的功能,将显卡硬件结构抽象掉,可

2、以通过Framebuffer的读写直接对显存进行操 作。用户可以将Framebuffer看成是显示内存的一个映像,将其映射到进程地址空间之后,就可以直接进行读写操作,而写操作可以立即反应在屏幕上。这种操作是抽象的,统一的。用户不必关心物理显存的位置、换页机制等等具体细节。这些都是由Framebuffer设备驱动来完成的。 但Framebuffer本身不具备任何运算数据的能力所有显示任务都有CPU完成在应用程序中,一般通过将 FrameBuffer 设备映射到进程地址空间的方式使用。FrameBuffer 设备还提供了若干ioctl命令,通过这些命令,可以获得显示设备的一些固定信息(比如显示内存

3、大小)、与显示模式相关的可变信息(比如分辨率、象素结构、每扫描线的字节宽度),以及伪彩 色模式下的调色板信息等等。ARM:(1)英国知识产权和设计公司,专门从事基于RISC(精简指令集)技术芯片设计开发,作为知识产权供应商,本身不直接从事芯片生产,而是转让设计许可,提供内核、体系扩展技术;(2)一种技术的名子:(3)一类微处理器的通称,广泛应用于移动通信、手持计算、多媒体数字消费等嵌入式解决方案的RISC标准,特点有:小体积、低功耗、成本低、高性能;16/32位双指令集;全球众多合作伙伴。包括:ARM2,3、ARM6,60,610、ARM7,710、ARM7D,7DM、ARM7TDMI、ARM

4、8,810、ARM9,920、ARM9E系列、ARM10E系列、Strong ARM、Secure Core系列、Xscale等。Xscale:ARM微处理器的一款。Xscale处理器是基于ARMv5TE系列结构的解决方案,是一款性能全、性价比高、功耗低的处理器。采用7级流水线,32K数据/指令缓存。支持16位的Thumb指令和DSP指令集。为多媒体的应用支持SIMD。有七种工作模式(用户、系统、特权、快速中断、外部中断、中止。未定义指令)。已使用在数字移动电话、个人数字助理和网络产品等场合。PXA255:Intel公司提供的一种嵌入式系统硬件开发平台(处理器)。特性有:(1)基于Intel

5、Xscale Microarchitecture且具有其特性的;(2)在Intel Xscale Microarchitecture基础上集成了许多其他的功能单元。实验板硬件资源:XscalePXA255处理器、64位SDRAM(存储器)、32位Flash、网口、声卡、LCD、触摸屏、USB从口、(1Slot)PCMCIA、实时钟电源控制器、红外口、(1 Slot)CF、(1 Slot)MMC(多媒体卡接口)、DMA控制器。实验板软件资源:操作系统(Linux 2.4.18 kernel)、驱动程序、文件系统、GUI。RISC:微处理器的体系结构。相比传统的CISC结构优势在于精简指令集。精华

6、为通过简化计算机指令功能,简化计算机指令格式,使指令的平均执行周期减少,同时大量使用通用寄存器,来提高计算机的工作主频,提高程序执行的速度。特点有:采用固定长度的指令格式;使用单周期指令,便于流水线操作执行;使用大量寄存器,数据处理指令只对寄存器进行操作;采用加载/存储指令批量传输数据,以提高数据的传输效率;在一条数据处理指令中,同时完成逻辑处理和移位处理两个功能;在循环处理中使用地址的自动增减,提高运行效率。体系结构:嵌入式硬件与软件的衔接,确定嵌入式系统设计的部件、部件功能、部件间接口的设计并集中于嵌入式系统的核心部分处理器的运算与内存的存取。2、对pxa255电路模块图进行翻译(1)In

7、tel Strata Flash:Intel公司的一种Flash Memory,内存器件的一种,闪存在没有 电流供应的条件下也能够长久地保持数据,其存储特性相当于硬盘。(2)SDRAM: Synchronous Dynamic Random Access Memory,同步动态随机存储器,同步是指 Memory工作需要同步时钟,内部的命令的发送与数据的传输都以它为基准;动态是指存储阵列需要不断的刷新来保证数据不丢失;随机是指数据不是线性依次存储,而是自由指定地址进行数据读写,用来临时存放数据的,特点是掉电数据会丢失。(3)10 Base-T Ethernet 1Port: 10Mbps数字基带

8、信号传输,采用双绞线介质,有效传输距离100米的以太网口。(4)Serial 2 Port:两个串口,支持蓝牙,全双工串口。(5)JTAG Port: Joint Test Action Group,联合测试工作组)是一种国际标准测试协议(IEEE 1149.1兼容),主要用于芯片内部测试(6)USB Slave Port:USB从设备接口。(7)PCMCIA 1 Slot: PCMCIA(PERSONAL COMPUTER MEMORY CARD INTERNATIONAL ASSOCIATION),这个是指支持这个协会指定的标准的卡的卡槽。(8)CF 1 Slot: CF卡(Compact

9、 Flash)的卡槽。(9)MMC 1 Slot: MMC卡(Multimedia Card),多媒体卡的卡槽。(10)External Interface:额外的接口。(11)Touch Screen:触摸屏。(12)6.4inches TFT LCD:6.4英寸TFT液晶屏。(13)RTC:real time clock,实时时钟。(14)IrDA: IrDA红外连接通信。(15)Audio:声卡。3、叙述基于linux的嵌入式平台的搭建过程 (1)处理器以及硬件开发平台的选择 以处理器为主,结合考虑硬件平台的情况。处理器考虑的问题包括应用类型及I/O接口、主频和功耗、对不同类型存储器的支

10、持、封装等;硬件平台的选择和设计包括内存和外围存储器、输入输出接口以及设备等几项主要内容。 (2)操作系统的选择 由于已经选择了Linux操作系统,因此此处主要是内核版本的选取以及对内核功能的裁剪。 (3)开发环境的选取 即开发工具的选取,主要是指开发软件的选取,比如常用的minicom。 (4)开发实施 首先,Bootloader的烧制。目的是对硬件系统基本功能的支持,比如串口通信。其次,内核文件的制作。接下来,内核文件的拷贝。此时,对通过串口或者网口实施传输,能够大幅度提高传输速度。最后,在主机使用开发软件,完成对硬件系统的开发工作。包括硬件驱动程序、上层的应用程序、系统的集成与调试等。4

11、、冯。诺依曼架构与哈佛架构的区别。 哈佛结构是一种将程序指令存储和数据存储分开的存储器结构。中央处理器首先到程序指令存储器中读取程序指令内容,解码后得到数据地址,再到相应的数据存储器中读取数据,并进行下一步的操作(通常是执行)。程序指令存储和数据存储分开,可以使指令和数据有不同的数据宽度。 冯诺伊曼结构也称普林斯顿结构,是一种将程序指令存储器和数据存储器合并在一起的存储器结构。程序指令存储地址和数据存储地址指向同一个存储器的不同物理位置,因此程序指令和数据的宽度相同。(数据总线地址总线共用) 在通用计算机系统中,应用软件的多样性使得计算机要不断地变化所执行的代码的内容,并且频繁地对数据与代码占

12、有的存储器进行重新分配,这种情况下,冯诺依曼结构占有绝对优势,因为统一编址可以最大限度地利用资源,而哈佛结构的计算机若应用于这种情形下则会对存储器资源产生理论上最大可达50%的浪费,这显然是不合理的。 但是在嵌入式应用中,系统要执行的任务相对单一,程序一般是固化在硬件里。嵌入式计算机在工作时与通用计算机有着一些区别:嵌入式计算机在工作期间的绝大部分时间是无人值守的,而通用计算机工作期间一般是有人操作的;嵌入式计算机的故障可能会导致灾难性的后果,而通用计算机一般就是死死机,重新启动即可。这两点决定了对嵌入式计算机的一个基本要求:可靠性。选用哈佛结构代替更加合理。5、单周期3级流水的情况下,第10

13、个指令周期时,第几条指令执行结束?结束。6、下面是linux下的一个简单的设备驱动程序,写出linux设备驱动常用的数据结构,同时阅读下面代码,请给出测试程序中的每条语句加以注释。设备驱动程序Keypad.c的源代码:#include #include #include #include #include #include #include #include #include #include #include #define LEDnKEY_MAJOR 251#define KEYPAD_NAME X-Hyper250 Keypad#define KEYPAD_VERSION Version

14、 0.1#define EXT_KEY_CS EXT_PORT2#define EXT_LED_CS EXT_PORT3#define LED_SHOW 10/*EXT_KEY_CS 为向外部LED进行数值设定,它定义在其它头文件里*/void led_off_on() /*/ int i; EXT_LED_CS = 0xff; for(i =0 ; i8;+i) EXT_LED_CS = (1 i) & 0xff); /* 点亮相应LED */ udelay(30000); /* 使之亮一段时间 */ EXT_LED_CS = 0xff; /* LED灭 */* 当应用程序系统调用open函

15、数来打开设备文件时,调用此函数 */int lednkey_open(struct inode *inode, struct file *filp) MOD_INC_USE_COUNT; /* 内核提供的一个宏,检查使用驱动程序的用户数 */ return (0); /* success */ int lednkey_release(struct inode *inode, struct file *filp) /* 释放设备文件 */ led_off_on(); MOD_DEC_USE_COUNT; return (0);/* 按键读取函数 */ssize_t lednkey_read(st

16、ruct file *filp, char *Putbuf, size_t length, loff_t *f_pos) unsigned short BottonStatus; unsigned char Bottontmp = 0; int i; BottonStatus = ( EXT_KEY_CS & 0xff ); /* 按键状态读取 */ for(i = 0 ; i i) & 1) = 0 ) Bottontmp = (i+1); /* 将数据从内核态拷贝到用户态,这是由定义在里的特殊函数实现在不同空间传输任意字节的数据 */ copy_to_user( Putbuf, &Bott

17、ontmp, length); return length;ssize_t lednkey_write(struct file *filp, const char *Getbuf, size_t length, loff_t *f_pos) int num; unsigned char UsrWantLed; copy_from_user( &UsrWantLed, Getbuf, length); /* 将数据从用户态拷贝到核心态 */ num = ( (UsrWantLed) & 0xff ); /* 确定那一位要进行设定 */ EXT_LED_CS = (1 (num-1); /* 点亮

18、相应地LED灯 */ return (0); /* 这是接口函数,主要用于获取或改变正在运行的设备参数 */int lednkey_ioctl(struct inode *inode, struct file *filp, unsigned int cmd,unsigned long arg) switch(cmd) case LED_SHOW: /* 如果要点亮LED灯 */ if(arg) led_off_on(); /* 则点亮 */ break; return 0;/* 以下这些驱动函数是与用户的应用程序里对设备文件操作的函数相对应的 */struct file_operations

19、lednkey_fops = open: lednkey_open, read: lednkey_read, write: lednkey_write, ioctl: lednkey_ioctl, release: lednkey_release,;/* 初始化设备函数,在函数名之前加上这个属性后,系统会在初始化完成之后就丢弃初始化函数,收回它所站的内存,以减小内核占用的空间,它只对内建的驱动起作用 */static int _init xhyper250_keypad_init(void) int result; result = register_chrdev(LEDnKEY_MAJOR,

20、 lednkey, &lednkey_fops);/* 向操作系统注册一个主号为251,设备名为“lednkey”,并传递设备驱动程序的指针为led_fops(全局变量),其中register_chrdev()是内核提供的函数,作用是完成注册新的字符设备 */printf(%s %s initialized.n,KEYPAD_NAME, KEYPAD_VERSION); led_off_on(); return 0;/* 向操作系统卸载设备函数 */static void _exit xhyper250_keypad_exit(void) unregister_chrdev( LEDnKEY_

21、MAJOR, lednkey ); led_off_on();module_init(xhyper250_keypad_init); /* 显示声明初始化设备函数 */ module_exit(xhyper250_keypad_exit); /* 显示声明卸载设备函数 */* 通过上述两个声明使内核知道驱动程序的进入点 */测试文件的源代码如下:#include#include#include#include#include#include#define LED_SHOW 10int fd;static char *dev_name = /dev/keypad;int main(int arg

22、c, char *argv) int data = 0, pre_data; fd = open( dev_name , O_RDWR ); if( !(fd =0) ) printf(%s file open failedn, dev_name ); exit(-1); printf(nkeypad App : press the push button see show led - Exit Ctrl-C n,dev_name); ioctl(fd,LED_SHOW,1); while(1) do pre_data = data; read( fd, (char * )&data, siz

23、eof(data) ); data = (data & 0xff); while(data = 0); if( pre_data = 0) printf(Write %d LEDn,data); write( fd, (const char *)&data, sizeof(const char )data) ); close( fd ); return 0;1)数据结构structfile_operations structmodule*owner; loff_t(*llseek)(structfile*,loff_t,int); ssize_t(*read)(structfile*,char

24、_user*,size_t,loff_t*); ssize_t(*aio_read)(structkiocb*,char_user*,size_t,loff_t); ssize_t(*write)(structfile*,constchar_user*,size_t,loff_t*); ssize_t(*aio_write)(structkiocb*,constchar_user*,size_t,loff_t); int(*readdir)(structfile*,void*,filldir_t); unsignedint(*poll)(structfile*,structpoll_table

25、_struct*); int(*ioctl)(structinode*,structfile*,unsignedint,unsignedlong); long(*unlocked_ioctl)(structfile*,unsignedint,unsignedlong); long(*compat_ioctl)(structfile*,unsignedint,unsignedlong); int(*mmap)(structfile*,structvm_area_struct*); int(*open)(structinode*,structfile*); inode_operations。 in

26、t(*flush)(structfile*); int(*release)(structinode*,structfile*); int(*fsync)(structfile*,structdentry*,intdatasync); int(*aio_fsync)(structkiocb*,intdatasync); int(*fasync)(int,structfile*,int); int(*lock)(structfile*,int,structfile_lock*); ssize_t(*readv)(structfile*,conststructiovec*,unsignedlong,

27、loff_t*); ssize_t(*writev)(structfile*,conststructiovec*,unsignedlong,loff_t*); ssize_t(*sendfile)(structfile*,loff_t*,size_t,read_actor_t,void*); ssize_t (*sendpage)(structfile*,structpage*,int,size_t,loff_t*,int); unsignedlong(*get_unmapped_area)(structfile*,unsignedlong,unsignedlong, unsignedlong

28、,unsignedlong); int(*check_flags)(int); int(*dir_notify)(structfile*filp,unsignedlongarg); int(*flock)(structfile*,int,structfile_lock*);2)程序注释#include#include#include#include#include#include#defineLED_SHOW10intfd;staticchar*dev_name=/dev/keypad;intmain(intargc,char*argv)intdata=0,pre_data;fd=open(dev_name,O_RDWR);/使用函数open打开设备keypadif(!(fd=0)/打开失败,显示出错信息printf(%sfileopenfailedn,dev_name);exit(-1);/打开成功,提示用户输入printf(nkeypadApp:pressthepushbuttonseeshowled-ExitCtrl-Cn,dev_name);/循环显示LED,看LED是否正常ioctl(fd,LED_SHOW,1);while(1)/采用忙等待方式扫描用户输入,传递给write函数dopre_data=da

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1