嵌入式作页Word格式.docx
- 文档编号:5998712
- 上传时间:2023-05-05
- 格式:DOCX
- 页数:16
- 大小:263.31KB
嵌入式作页Word格式.docx
《嵌入式作页Word格式.docx》由会员分享,可在线阅读,更多相关《嵌入式作页Word格式.docx(16页珍藏版)》请在冰点文库上搜索。
操作系统(Linux2.4.18kernel)、驱动程序、文件系统、GUI。
RISC:
微处理器的体系结构。
相比传统的CISC结构优势在于精简指令集。
精华为通过简化计算机指令功能,简化计算机指令格式,使指令的平均执行周期减少,同时大量使用通用寄存器,来提高计算机的工作主频,提高程序执行的速度。
特点有:
采用固定长度的指令格式;
使用单周期指令,便于流水线操作执行;
使用大量寄存器,数据处理指令只对寄存器进行操作;
采用加载/存储指令批量传输数据,以提高数据的传输效率;
在一条数据处理指令中,同时完成逻辑处理和移位处理两个功能;
在循环处理中使用地址的自动增减,提高运行效率。
体系结构:
嵌入式硬件与软件的衔接,确定嵌入式系统设计的部件、部件功能、部件间接口的设计并集中于嵌入式系统的核心部分——处理器的运算与内存的存取。
2、对pxa255电路模块图进行翻译
(1)IntelStrataFlash:
Intel公司的一种FlashMemory,内存器件的一种,闪存在没有电流供应的条件下也能够长久地保持数据,其存储特性相当于硬盘。
(2)SDRAM:
SynchronousDynamicRandomAccessMemory,同步动态随机存储器,同步是指Memory工作需要同步时钟,内部的命令的发送与数据的传输都以它为基准;
动态是指存储阵列需要不断的刷新来保证数据不丢失;
随机是指数据不是线性依次存储,而是自由指定地址进行数据读写,用来临时存放数据的,特点是掉电数据会丢失。
(3)10Base-TEthernet1Port:
10Mbps数字基带信号传输,采用双绞线介质,有效传输距离100米的以太网口。
(4)Serial2Port:
两个串口,支持蓝牙,全双工串口。
(5)JTAGPort:
JointTestActionGroup,联合测试工作组)是一种国际标准测试协议(IEEE1149.1兼容),主要用于芯片内部测试
(6)USBSlavePort:
USB从设备接口。
(7)PCMCIA1Slot:
PCMCIA(PERSONALCOMPUTERMEMORYCARDINTERNATIONALASSOCIATION),这个是指支持这个协会指定的标准的卡的卡槽。
(8)CF1Slot:
CF卡(CompactFlash)的卡槽。
(9)MMC1Slot:
MMC卡(MultimediaCard),多媒体卡的卡槽。
(10)ExternalInterface:
额外的接口。
(11)TouchScreen:
触摸屏。
(12)6.4inchesTFTLCD:
6.4英寸TFT液晶屏。
(13)RTC:
realtimeclock,实时时钟。
(14)IrDA:
IrDA红外连接通信。
(15)Audio:
声卡。
3、叙述基于linux的嵌入式平台的搭建过程
(1)处理器以及硬件开发平台的选择
以处理器为主,结合考虑硬件平台的情况。
处理器考虑的问题包括应用类型及I/O接口、主频和功耗、对不同类型存储器的支持、封装等;
硬件平台的选择和设计包括内存和外围存储器、输入输出接口以及设备等几项主要内容。
(2)操作系统的选择
由于已经选择了Linux操作系统,因此此处主要是内核版本的选取以及对内核功能的裁剪。
(3)开发环境的选取
即开发工具的选取,主要是指开发软件的选取,比如常用的minicom。
(4)开发实施
首先,Bootloader的烧制。
目的是对硬件系统基本功能的支持,比如串口通信。
其次,内核文件的制作。
接下来,内核文件的拷贝。
此时,对通过串口或者网口实施传输,能够大幅度提高传输速度。
最后,在主机使用开发软件,完成对硬件系统的开发工作。
包括硬件驱动程序、上层的应用程序、系统的集成与调试等。
4、冯。
诺依曼架构与哈佛架构的区别。
哈佛结构是一种将程序指令存储和数据存储分开的存储器结构。
中央处理器首先到程序指令存储器中读取程序指令内容,解码后得到数据地址,再到相应的数据存储器中读取数据,并进行下一步的操作(通常是执行)。
程序指令存储和数据存储分开,可以使指令和数据有不同的数据宽度。
冯·
诺伊曼结构也称普林斯顿结构,是一种将程序指令存储器和数据存储器合并在一起的存储器结构。
程序指令存储地址和数据存储地址指向同一个存储器的不同物理位置,因此程序指令和数据的宽度相同。
(数据总线地址总线共用)
在通用计算机系统中,应用软件的多样性使得计算机要不断地变化所执行的代码的内容,并且频繁地对数据与代码占有的存储器进行重新分配,这种情况下,冯·
诺依曼结构占有绝对优势,因为统一编址可以最大限度地利用资源,而哈佛结构的计算机若应用于这种情形下则会对存储器资源产生理论上最大可达50%的浪费,这显然是不合理的。
但是在嵌入式应用中,系统要执行的任务相对单一,程序一般是固化在硬件里。
嵌入式计算机在工作时与通用计算机有着一些区别:
嵌入式计算机在工作期间的绝大部分时间是无人值守的,而通用计算机工作期间一般是有人操作的;
嵌入式计算机的故障可能会导致灾难性的后果,而通用计算机一般就是死死机,重新启动即可。
这两点决定了对嵌入式计算机的一个基本要求:
可靠性。
选用哈佛结构代替更加合理。
5、单周期3级流水的情况下,第10个指令周期时,第几条指令执行结束?
结束。
6、下面是linux下的一个简单的设备驱动程序,写出linux设备驱动常用的数据结构,同时阅读下面代码,请给出测试程序中的每条语句加以注释。
设备驱动程序Keypad.c的源代码:
#include<
linux/module.h>
linux/fs.h>
linux/init.h>
linux/poll.h>
linux/types.h>
linux/rtc.h>
linux/delay.h>
asm/hardware.h>
asm/delay.h>
asm/uaccess.h>
#defineLEDnKEY_MAJOR251
#defineKEYPAD_NAME"
X-Hyper250Keypad"
#defineKEYPAD_VERSION"
Version0.1"
#defineEXT_KEY_CSEXT_PORT2
#defineEXT_LED_CSEXT_PORT3
#defineLED_SHOW10
/*EXT_KEY_CS为向外部LED进行数值设定,它定义在其它头文件里*/
voidled_off_on()/**/
{
inti;
EXT_LED_CS=0xff;
for(i=0;
i<
8;
++i)
{
EXT_LED_CS=~((1<
<
i)&
0xff);
/*点亮相应LED*/
udelay(30000);
/*使之亮一段时间*/
}
/*LED灭*/
}
/*当应用程序系统调用open函数来打开设备文件时,调用此函数*/
intlednkey_open(structinode*inode,structfile*filp)
MOD_INC_USE_COUNT;
/*内核提供的一个宏,检查使用驱动程序的用户数*/
return(0);
/*success*/
intlednkey_release(structinode*inode,structfile*filp)/*释放设备文件*/
led_off_on();
MOD_DEC_USE_COUNT;
/*按键读取函数*/
ssize_tlednkey_read(structfile*filp,char*Putbuf,size_tlength,loff_t*f_pos)
unsignedshortBottonStatus;
unsignedcharBottontmp=0;
BottonStatus=(EXT_KEY_CS&
0xff);
/*按键状态读取*/
for(i=0;
i<
8;
++i)/*判断哪个键被按下*/
if(((BottonStatus>
>
1)==0)
Bottontmp=(i+1);
/*将数据从内核态拷贝到用户态,这是由定义在<
里的特殊函数实现在不同空间传输任意字节的数据*/
copy_to_user(Putbuf,&
Bottontmp,length);
returnlength;
ssize_tlednkey_write(structfile*filp,constchar*Getbuf,size_tlength,loff_t*f_pos)
intnum;
unsignedcharUsrWantLed;
copy_from_user(&
UsrWantLed,Getbuf,length);
/*将数据从用户态拷贝到核心态*/
num=((UsrWantLed)&
/*确定那一位要进行设定*/
EXT_LED_CS=~(1<
(num-1));
/*点亮相应地LED灯*/
/*这是接口函数,主要用于获取或改变正在运行的设备参数*/
intlednkey_ioctl(structinode*inode,structfile*filp,unsignedintcmd,unsignedlongarg)
switch(cmd)
caseLED_SHOW:
/*如果要点亮LED灯*/
{
if(arg)
led_off_on();
/*则点亮*/
break;
}
return0;
/*以下这些驱动函数是与用户的应用程序里对设备文件操作的函数相对应的*/
structfile_operationslednkey_fops={
open:
lednkey_open,
read:
lednkey_read,
write:
lednkey_write,
ioctl:
lednkey_ioctl,
release:
lednkey_release,
};
/*初始化设备函数,在函数名之前加上这个属性后,系统会在初始化完成之后就丢弃初始化函数,收回它所站的内存,以减小内核占用的空间,它只对内建的驱动起作用*/
staticint_initxhyper250_keypad_init(void)
intresult;
result=register_chrdev(LEDnKEY_MAJOR,"
lednkey"
&
lednkey_fops);
/*向操作系统注册一个主号为251,设备名为“lednkey”,并传递设备驱动程序的指针为led_fops(全局变量),其中register_chrdev()是内核提供的函数,作用是完成注册新的字符设备*/
printf("
%s%sinitialized.\n"
KEYPAD_NAME,KEYPAD_VERSION);
/*向操作系统卸载设备函数*/
staticvoid_exitxhyper250_keypad_exit(void)
{
unregister_chrdev(LEDnKEY_MAJOR,"
);
module_init(xhyper250_keypad_init);
/*显示声明初始化设备函数*/
module_exit(xhyper250_keypad_exit);
/*显示声明卸载设备函数*/
/*通过上述两个声明使内核知道驱动程序的进入点*/
测试文件的源代码如下:
#include<
stdio.h>
stdlib.h>
unistd.h>
sys/types.h>
sys/stat.h>
fcntl.h>
intfd;
staticchar*dev_name="
/dev/keypad"
;
intmain(intargc,char**argv)
intdata=0,pre_data;
fd=open(dev_name,O_RDWR);
if(!
(fd>
=0))
printf("
%sfileopenfailed\n"
dev_name);
exit(-1);
printf("
\nkeypadApp:
pressthepushbuttonseeshowled-ExitCtrl-C\n"
dev_name);
ioctl(fd,LED_SHOW,1);
while
(1)
do
{
pre_data=data;
read(fd,(char*)&
data,sizeof(data));
data=(data&
}while(data==0);
if(pre_data==0)
printf("
Write%dLED\n"
data);
write(fd,(constchar*)&
data,sizeof((constchar)data));
}
close(fd);
1)数据结构
struct
file_operations
{
struct
module
*owner;
loff_t
(*llseek)(struct
file
*,
loff_t,
int);
ssize_t
(*read)(struct
char
__user
size_t,
loff_t
*);
(*aio_read)(struct
kiocb
loff_t);
(*write)(struct
const
(*aio_write)(struct
int
(*readdir)(struct
void
filldir_t);
unsigned
int
(*poll)(struct
poll_table_struct
(*ioctl)(struct
inode
unsigned
int,
long);
long
(*unlocked_ioctl)(struct
(*compat_ioctl)(struct
(*mmap)(struct
vm_area_struct
(*open)(struct
inode_operations。
int(*flush)(struct
(*release)(struct
(*fsync)(struct
dentry
datasync);
(*aio_fsync)(struct
(*fasync)(int,
(*lock)(struct
file_lock
(*readv)(struct
iovec
long,
(*writev)(struct
(*sendfile)(struct
read_actor_t,
ssize_t(*sendpage)(struct
page
long
(*get_unmapped_area)(struct
(*check_flags)(int);
(*dir_notify)(struct
*filp,
arg);
(*flock)(struct
}
2)程序注释
#define
LED_SHOW
10
fd;
static
char*dev_name="
main(int
argc,char**argv)
data=0,pre_data;
fd=open(dev_name,O_RDWR);
//
使用函数
open
打开设备
keypad
if(!
(fd>
=0))
打开失败,显示出错信息
%s
open
failed\n"
exit(-1);
打开成功,提示用户输入
\nkeypad
App:
press
the
push
button
see
show
led-Exit
Ctrl-C\n"
循环显示
LED
,看
是否正常
ioctl(fd,LED_SHOW,1);
while
(1)
采用忙等待方式扫描用户输入,传递给
write
函数
do
pre_data=da
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式