嵌入式系统设计大作业
1、叙述嵌入式系统开发过程中所要解决的两个问题。
2、叙述嵌入式平台的搭建过程,以linux为例。
3、给出现今有哪些用于嵌入式开发的芯片名称,他们分别是哪些公司的产品?
体系结构是什么?
4、现今较流行的嵌入式操作系统有哪些?
5、PXA270嵌入式开发板的接口有哪些?
6、请写出Nor Flash和Nand Flash的区别。
7、冯。
诺依曼架构与哈佛架构的区别。
8、单周期3级流水的情况下,第10个指令周期时,第几条指令执行结束?
9、下面是linux下的一个简单的设备驱动程序,写出linux设备驱动常用的数据结构,同时阅读下面代码,请给出测试程序中的每条语句加以注释。
设备驱动程序Keypad.c的源代码:
#include <linux/module.h>
#include <linux/fs.h>
#include <linux/init.h>
#include <linux/poll.h>
#include <linux/types.h>
#include <linux/fs.h>
#include <linux/rtc.h>
#include <linux/delay.h>
#include <asm/hardware.h>
#include <asm/delay.h>
#include <asm/uaccess.h>
#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<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#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 );
if( !(fd >=0) )
{
printf("%s file open failed\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);
while(1)
{
do
{
pre_data = data;
read( fd, (char * )&data, sizeof(data) );
data = (data & 0xff);
}while(data == 0);
if( pre_data == 0)
{
printf("Write %d LED\n",data);
write( fd, (const char *)&data, sizeof((const char )data) );
}
}
close( fd );
return 0;
}
10、基于Intel Gilelo开发板,设计一个项目,项目题目自选,给出项目的总体设计图,以及对图中模块的功能分析,若可以,给出实现项目的详细设计和程序及代码,及实物。
提示:百度arduino关键字,可提供各种资料。