西电2014嵌入式系统设计课程大作业(含答案)
- 格式:doc
- 大小:110.00 KB
- 文档页数:8
2014年上学期嵌入式系统设计课程大作业
1、叙述下列相关名词的含义
ARM、xscale、PXA255、RISC、体系结构
答:1)ARM:英国的一家公司;时下流行的一种体系结构。
2)XScale:ARM架构v5TE指令集的CPU。
3)PXA255:XScale的内核版本。
4)RISC:Reduced Instruction Set Computing,即精简指令集,一种CPU的设计概念;与之相对的是CISC,即复杂指令集
5)体系结构:嵌入式系统硬件与软件的衔接;它确定嵌入式系统设计的部件、部件功能、部件间借口的设计,并集中于嵌入式系统的核心部分——处理器的运算与内存的存取。
2、画出嵌入式硬件系统组成的模块结构图
3、叙述基于linux的嵌入式平台的搭建过程
答:Linux嵌入式平台的搭建符合嵌入式平台搭建的一般过程,但是具体到Linux嵌入式平台,又有些许不同,其搭建过程如下:
1)处理器以及硬件开发平台的选择
以处理器为主,结合考虑硬件平台的情况。处理器考虑的问题包括应用类型及I/O接口、主频和功耗、对不同类型存储器的支持、封装等;硬件平台的选择和设计包括内存和外围存储器、输入输出接口以及设备等几项主要内容。
2)操作系统的选择
由于已经选取了Linux操作系统,因此此处主要是内核版本的选取以及对内核功能的裁剪。
3)开发环境的选取
即开发工具的选取,主要是指开发软件的选取,比如常用的minicom。
4)开发实施
首先,Bootloader的烧制。目的是对硬件系统基本功能的支持,比如串口通信。其次,内核文件的制作。接下来,内核文件的拷贝。此时,可以通过串口或者网口实施传输,能够大幅度提高传输速度。最后,在主机使用开发软件,完成对硬件系统的开发工作。包括硬件驱动程序、上层的应用程序、系统的集成与调试等。
4、如下为xscale处理器的内核框图:
简述内核框图中每个模块的名称及指标。
答:1)Instruction Cache:指令Cache;大小32KB,32路,支持线性锁定
2)Micro-Processor:微处理器;七级流水
3)Data Cache:数据Cache;最大支持32KB,32路
4)Data Ram:数据Ram;最大支持28KB
5)Mini-Data Cache:迷你数据Cache;大小2KB,2路
6)Branch Target Buffer:分支目标缓存;128入口
7)IMMU/DMMU:指令/数据存储管理单元;32路,全相关,支持锁定
8)Fill Buffer:填充缓存;4~8入口
9)Performance Monitoring:功能显示器
10)Debug:硬件中断断点记录
11)Power Management Control:电源管理控制
12)MAC:乘加单元;40位累加/累乘,16位单指令多数据流操作,16*32位操作单周期支持13)Write Buffer:写缓存;8入口,支持合并操作
14)JTAG:边界扫描技术;支持JTAG操作
5、下述英文为BTB模块功能的详细介绍,阅读后说明该模块的作用。
答:分支目标缓存目标地址历史的分支,具体到每个入口(表项),由Tag和数据组成。Tag是以前执行分支的指令地址,数据包括以前执行分支的目标地址,以及2比特的历史信息。分支目标缓存取得当前的指令地址,检查这个地址是否是以前执行过的分支。它用现行指令的位[8:2]来选择分支目标缓存中的标志Tag,并与现行指令的位[31:9,1]进行匹配。若匹配且历史位指出该分支过去常产生,则分支目标缓存中的数据(目标地址[31:1])作为下一条指令地址送至指令Cache。
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 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 ; i<8;++i)
{
EXT_LED_CS = ~((1 << i) & 0xff); /*点亮相应LED灯*/
udelay(30000);
}
EXT_LED_CS = 0xff;
}
/*应用程序用open来打开设备文件,实际上调用驱动的lednkey_open()函数*/
int lednkey_open(struct inode *inode, struct file *filp) /*打开设备文件*/
{
MOD_INC_USE_COUNT;/*内核提供的一个宏,检查使用驱动程序的用户数*/