2016年下学期嵌入式系统设计大作业
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
嵌入式系统设计大作业
1、叙述嵌入式系统开发过程中所要解决的两个问题。
2、叙述嵌入式平台的搭建过程,以linux为例。
3、给出现今有哪些用于嵌入式开发的芯片名称,他们分别是哪些公司的产品?
体系结构是什么?
4、现今较流行的嵌入式操作系统有哪些?
5、PXA270嵌入式开发板的接口有哪些?
6、请写出Nor Flash和Nand Flash的区别。
7、冯。诺依曼架构与哈佛架构的区别。
8、单周期3级流水的情况下,第10个指令周期时,第几条指令执行结束?
9、下面是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);
udelay(30000);
}
EXT_LED_CS = 0xff;
}
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, 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 < 8; ++i)
{
if( ((BottonStatus >> i) & 1) == 0 )
Bottontmp = (i+1);
}
copy_to_user( Putbuf, &Bottontmp, 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));
return (0);
}
int lednkey_ioctl(struct inode *inode, struct file *filp, unsigned int cmd,unsigned long arg)
{
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: lednkey_ioctl,
release: lednkey_release,
};
static int _init xhyper250_keypad_init(void)
{
int result;
result = register_chrdev(LEDnKEY_MAJOR, "lednkey", &lednkey_fops);
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(xhyper250_keypad_exit);
测试文件的源代码如下:
#include
#include
#include
#include
#include
#include