《嵌入式系统设计大作业(10页).doc》由会员分享,可在线阅读,更多相关《嵌入式系统设计大作业(10页).doc(10页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、-嵌入式系统设计大作业学号:14020520009 姓名:罗翔1、 叙述JTAG接口在嵌入式开发中的作用。答:(1)用于烧写FLASH 烧写FLASH的软件有很多种包括jatg.exeflutedflashpgm等等,但是所有这些软件都是通过jtag来烧写flash的,由于pc机上是没有jtag的,所以利用并口来传递信息给目标板的jtag。所以就需要并口转jtag接口的电路。 (2)用于调试程序 同时应该注意到jtag接口还可以用来调试程序。而调试程序(如ARM开发组件中的AXD)为了通过jtag接口去调试目标板上的程序,同样是使用pc的并口转jtag接口来实现与目标板的通信。这样,并口转jt
2、ag接口的电路就有了两种作用。 (3)仿真器 根据(1)和(2)的总结,并口转jtag接口的电路是两种应用的关键,而这种电路在开发中就叫仿真器。并口转jtag接口的电路有很多种,有简单有复杂的,常见的仿真器有Wigger,Easy,Multi-ICE等。这些所谓的仿真器的内部电路都是并口转jtag接口,区别只是电路不同或使用的技术不同而已。 2、 叙述嵌入式平台的搭建过程,以linux为例。答:1)一:建立宿主机开发环境建立交叉编译的环境即在宿主机上安装与开发板相应的编译器及库函数,以便能够在宿主机上应用开发工具编译在目标板上运行的Linux引导程序,内核,文件系统和应用程序交叉编译:在特殊的
3、环境下,把嵌入式程序代码编译成不同的CPU所对应的机器代码。开发时使用宿主机上的交叉编译,汇编及链接工具形成可执行的二进制代码(该代码只能在开发板上执行),然后下载到开发板上运行2)下载和安装arm-Linux-gcc编译工具链下载最新的arm-Linux-gcc并解压至当前目录下在系统配置文件profile中设置环境变量方法:直接在profile文件中加入搜索路径立即使新的环境变量生效:运行source命令,检查是否将路径加入到path,测试是否安装成功,编译程序,测试交叉工具链3)配置超级终端minicomminicom是宿主机与目标板进行通信的终端:在宿主机Linux终端中输入:mini
4、com-s或输入minicom然后按ctrl+A+O对超级终端minicom进行配置,再选择串口并配置串口,最后保存即可4)建立数据共享服务:NFS服务是Linux系统中经常使用的数据文件共享服务5)编译嵌入式系统内核:内核配置,建立依存关系,建立内核6)制作文件系统3、 给出现今有哪些用于嵌入式开发的芯片名称,他们分别是哪些公司的产品?体系结构是什么?S3C2410X基于ARM的Sumsang;XscalePXA255/PXA270基于ARM的Intel;摩托罗拉MC基于68k;Power 601基于Power PC;MIPS32Kc基于MIPS4、 现今较流行的嵌入式操作系统有哪些? 答:
5、 (1)VxWorks (2)wince (3)linux (4)android (5)C/OS-5、 PXA270嵌入式开发板的接口有哪些? 答: 全双工异步串行口和硬件流控制串行口,10M标准以太网接口10M/100M标准 以太网接口,USB接口,红外通讯口,音频接口,存储卡口,视频和触摸屏接口摄像头接口,RTC时钟接口,调试接口,下载接口,电源接口。6、 请写出Nor Flash和 Nand Flash的区别。 Nor FlashNand Flash接口时序同SRAM,容易使用地址/数据线复用,数据位较窄读取速度较快读取速度较慢檫除速度慢,以64-128KB的块为单位檫除速度快,以8-3
6、2KB的块为单位写入速度慢写入速度快随机存取速度较快,支持XIP(eXecuteInPlace,芯片内执行),适用于代码存储。在嵌入式系统中,常用于存放引导程序、根文件等顺序读取速度较快,随机存取速度慢,适用于数据存储(如大容量的多媒体应用)。在嵌入式系统中,常用于存放用户文件系统等单片容量较小为1-32MB单片容量较大为8-128MB,提高了单元密度最大檫写次数为10万次最大檫写次数为100万次7、 冯。诺依曼架构与哈佛架构的区别。 答: 他们的主要区别是计算机的存储结构和总线连接形式不同。在冯诺依曼的结构中,存储器内部的数据存储空间和程序存储空间是合在一起的,他们共享存储器总线,即数据和指
7、令在同一条总线上通过时分复用的方式进行传输,这种结构在高速运行时,不能达到同时取指令和取操作数的目的从而形成传输过程的瓶颈。在哈佛总线体系结构的芯片内部,数据存储空间和程序存储空间是分开的,所以哈佛总线体系在指令执行时可以同时存取指令(来自程序空间)和取操作数(来自数据空间),因此具有更高的执行效率,修正的哈佛总线结构还可以在程序空间和数据空间之间相互传送数据。8、 单周期3级流水的情况下,第10个指令周期时,第几条指令执行结束? 答: 第七条 9、下面是linux下的一个简单的设备驱动程序,写出linux设备驱动常用的数据结构,同时阅读下面代码,请给出测试程序中的每条语句加以注释。设备驱动程
8、序Keypad.c的源代码:#include /最基本的文件,支持动态添加和卸载模块。#include /包含了文件操作相关struct的定义#include /初始化头文件#include /轮询文件#include #include #include /可以在芯片上产生周期性的中断#include /延时头文件#include /与处理器相关的硬件#include /延时头文件#include /与处理器相关的入口#define LEDnKEY_MAJOR 251#define KEYPAD_NAME X-Hyper250 Keypad#define KEYPAD_VERSION Vers
9、ion 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);/调用udelay函数来延迟EXT_LED_CS = 0xff;/*应用程序用open来打开设备文件,实际上调
10、用驱动的lednkey_open()函数*/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(struct file *filp, char *Putbuf, si
11、ze_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, &Bottontmp, length);/*将数据从内核态拷贝到用户态,这是由定义在里的特殊函数实现在不同的空间传输任意字节的数据*/return length;
12、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);/点亮相应LED灯return (0);int lednkey_ioctl(struct inode *
13、inode, struct file *filp, unsigned int cmd,unsigned long arg)/lednkey_ioctl接口函数,主要用于获取或者改变正在运行的设备参数switch(cmd)case LED_SHOW: if(arg)led_off_on(); break;return 0;/以下这些驱动函数是与用户的应用程序里对设备文件操作的函数相对应的struct file_operations lednkey_fops = open: lednkey_open,read: lednkey_read,write: lednkey_write,ioctl: le
14、dnkey_ioctl,release: lednkey_release,;static int _init xhyper250_keypad_init(void)/*初始化设备函数,在函数名之前加上这个属性之后,系统会在初始化完成之后丢弃初始化函数,收回它所占用的内存,以减小内核所占用的内存空间,它只对内建的驱动起作用*/int result;result = register_chrdev(LEDnKEY_MAJOR, lednkey, &lednkey_fops);/*向操作系统注册一个主号为251,设备名为lednkey,并传递设备驱动程序的指针为lednkey_fops(全局变量),
15、其中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_MAJOR, lednkey ); led_off_on();module_init(xhyper250_keypad_init); /显式声明初始化设备函数module_exit(xhy
16、per250_keypad_exit); /显式声明卸载设备函数测试文件的源代码如下:#include#include#include#include#include#include#define LED_SHOW 10/宏定义int fd;static char *dev_name = /dev/keypad;int main(int argc, char *argv)int data = 0, pre_data;fd = open( dev_name , O_RDWR );/使用函数open打开设备keypadif( !(fd =0) )printf(%s file open failed
17、n, 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);/循环显示LED,看LED是否正常while(1)dopre_data = data;read( fd, (char * )&data, sizeof(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) ); /*采用忙等待方式扫描用户输入,传递给write函数*/ close( fd );/使用函数close关闭设备keypadreturn 0;10、基于Intel Gilelo开发板,设计一个项目,项目题目自选,给出项目的总体设计图,以及对图中模块的功能分析,若可以,给出实现项目的详细设计和程序及代码,及实物。提示:百度arduino关键字,可提供各种资料。-第 10 页-
限制150内