嵌入式带答案.docx
- 文档编号:14098671
- 上传时间:2023-06-20
- 格式:DOCX
- 页数:20
- 大小:87.94KB
嵌入式带答案.docx
《嵌入式带答案.docx》由会员分享,可在线阅读,更多相关《嵌入式带答案.docx(20页珍藏版)》请在冰点文库上搜索。
嵌入式带答案
嵌入式操作系统考试要求的内容
前3章(25%)
1.1)嵌入式系统的特点:
开发方式、内核大小、专用性、编译方式;
2)从开发环境与运行环境来看,嵌入式系统与一般PC的特点。
2.什么是交叉编译
在一个平台上生成另一个平台上的可执行代码。
3.操作系统的两大功能和四项基本任务
使计算机硬件便于使用;高效组织和正确地使用计算机的资源。
进程管理、进程间通信与同步、内存管理和I/O资源管理。
4.ARM是什么?
是一种嵌入式芯片的型号吗?
是AdvanceRISCMachine(ARM)公司提出的一种嵌入式芯片的内核,ARM公司不生产芯片而只是转让知识产权另外也提供基于ARM架构的开发设计技术:
软件工具,评估板,调试工具,应用软件,总线架构,外围设备单元,等等
5.嵌入式处理器的分类
嵌入式处理器可分为低端的嵌入式微控制器(MicroControllerUnit,MCU)、常用于计算机通信领域的嵌入式DSP处理器(EmbeddedDigitalSignalProcessor,EDSP)、中高端的嵌入式微处理器(EmbeddedMicroProcessorUnit,EMPU)和高度集成的嵌入式片上系统(SystemOnChip,SOC)。
6.谈一谈嵌入式实时系统从实时性的分类。
硬实时和软实时的区别就在于对外界的事件做出反应的时间。
硬实时系统:
必须对事件做出及时的反应,绝对不能错过事件处理的时限。
在硬实时系统中如果出现了这样的情况就意味着巨大的损失和灾难。
比如说航天飞机的控制系统,如果出现故障,后果不堪想象。
软实时系统:
在系统负荷较重的时候,允许发生错过时限的情况而且不会造成太大的危害。
比如液晶屏刷新允许有短暂的延迟。
7.目前比较流行的嵌入式操作系统有些(需例举3种)
VxWorks,QNX,PalmOS,WindowsCE,LynxOS,嵌入式Linux,uC/OS.
8.CISC和RISC
CISC:
ComplexInstructionSetComputer);
RISC:
reducedinstructionsetcomputer
从代码密度、寻址方式的多少、指令长度、指令数量、专用性、平均执行周期(CPI)、是否采用Load/Store结构,算术和逻辑操作仅针对寄存器?
9.Load/Store结构
10.流水线技术
通过指令的并行运行提高运行速度,ARM7三级流水(fetch,decode,execute),ARM9五级流水(memory,write)
11.ARM处理器的各种基本工作模式
用户模式、快速中断模式、外部中断模式、管理模式、中止模式、未定义指令中止模式和系统模式。
12.冯·诺依曼体系结构和哈佛体系结构
前者操作数和指令分时共用同一组总线,后者操作数和指令所采用的总线不同因而取指和取操作数可以同时进行,从而提高了运行速度
13.高速缓存
高速缓存是一种小型、快速的存储器,它保存部分主存内容的拷贝。
数据
14.闪速存储器(FLASH)与EEROM
EPROM,可擦除可编程ROM,EEPROM,电可擦写可编程只读存储器
FLASH(闪存):
是EEPROM的变种,EEPROM与闪存不同的是,它能在字节水平上进行删除和重写而不是整个芯片擦写,这样闪存就比EEPROM的更新速度快。
由于其断电时仍能保存数据,闪存通常被用来保存设置信息,如在电脑的BIOS(基本输入输出程序)、PDA(个人数字助理)、数码相机中保存资料等。
NandFlash与NorFlash相比较:
编程、擦除、读的速度以及可靠性
15.Nandflash/NorFlash写快/慢、简单/擦除前需要写0、读稍慢/稍快、不可靠/可靠
16.从编程的角度看,ARM微处理器的工作状态有哪些?
2种且可在2种状态之间切换:
第一种为ARM状态,此时处理器执行32位的字对齐的ARM指令;第二种为Thumb状态,此时处理器执行16位的、半字对齐的Thumb指令。
17.ARM体系结构两种存储字数据方法——大端格式和小段格式
大端:
字数据的高字节存储在低地址中,而字数据的低字节则存放在高地址中。
小端:
与大端存储格式相反,在小端存储格式中,低地址中存放的是字数据的低字节,高地址存放的是字数据的高字节。
18.ARM寄存器组织、分类,Thum状态和ARM状态下寄存器组织上的异同
通用寄存器包括R0~R15,可以分为三类:
不分组寄存器R0~R7;
分组寄存器R8~R14;
程序计数器PC(R15)。
Thumb状态下的寄存器集是ARM状态下寄存器集的一个子集
Thumb状态下和ARM状态下的R0~R7是相同的。
Thumb状态下和ARM状态下的CPSR和所有的SPSR是相同的。
Thumb状态下的SP映射到ARM状态下的R13。
Thumb状态下的LR映射到ARM状态下的R14。
Thumb状态下的程序计数器PC(R15)映射到ARM状态下的PC(R15)。
19.什么是异常向量
异常是由内部或外部源产生并引起处理器处理一个事件,它会导致正常的程序执行流程发生暂时的停止,例如外部中断或试图执行未定义指令都会引起异常。
异常出现后强制从异常类型对应的固定存贮地址开始执行程序,这些固定的地址称为异常向量。
第4章
这一部分不作要求
第5章(40%)
1.如何从键盘向main函数传入参数
用scanf函数
main()
{
inta[10];
inti;
for(i=0;i<10;i++)
scanf(“%d”,&a[i]);
printf(“\n)
for(i=0;i<10;i++)
printf(“%d”,a[i]);
}
2.带参数main函数
#include
main(argc,argv)
intargc;
char*argv[];
{
while(argc>1)
{++argv;
printf("%s\n",*argv);
--argc;}
}
3.增强程序可读性的寄存器定义格式
#define寄存器名(*(volatileunsigned*)寄存器在存储空间中的位置)
例如#definerUCON0(*(volatileunsigned*)0x50000004)
4.采用或逻辑对寄存器进行设置
A=1110000000000000=0x0eh<12
B=0000001100000000=0x03h<8
C=0000000010010000=0x09h<4
D=0000000000000110=0x06h<0
5.采用位掩码对寄存器的某个功能区位进行设置
fun3的位掩码:
FUN3_MASK=0xf<4
C’=0x0B<4
R&=~FUN3_MASK
R|=C’
6.如何对I/O口的功能进行配置并进行相关操作,让输出端口电平变化(配置为输出,然后向端口数据寄存器位写入相应电平),要求能进行编程
通过对G口8、9脚的操作实现LED轮流闪烁
#definerGPGCON(*(volatileunsigned*)0x56000060)
//PORTG控制寄存器
#definerGPGDAT(*(volatileunsigned*)0x56000064)
//PORTG数据寄存器
voidmain(void){
Intflag,I;
Target_Init()
for(;;){
If(flag==0){
for(i=0;i<1000000;i++);//延时
rGPGCON=rGPGCON&0xfff0ffff|0x00050000;
//配置8、9脚为输出
rGPGDAT=rGPGDAT&0xeff|0x200;
//8脚低电平,9脚高电平
for(i=0;i<1000000;i++);//延时
Flag=1;}
Else{
for(i=0;i<1000000;i++);//延时
rGPGCON=rGPGCON&0xfff0ffff|0x00050000;
//配置8、9脚为输出
rGPGDAT=rGPGDAT&0xdff|0x100;
//8脚高电平,9脚低电平
for(i=0;i<1000000;i++);//延时
Flag=0;}
7.CPU与外设传输数据的方式有哪几类
查询方式、中断方式、DMA。
DMA不占用cpu,但占用系统总线。
8.中断部分应掌握如下内容:
1)中断过程、与中断相关的寄存器的作用、中断挂起寄存器和中断源挂起寄存器的区别、与中断屏蔽有关的寄存器(中断屏蔽寄存器、子中断屏蔽寄存器以及CPSR)
⏹中断过程
保存现场:
PC→LR,CPSR→SPSR
根据设置的中断模式选择IRQ或FIQ
从中断向量处获取中断服务程序的地址
根据优先级和中断标志识别是哪一个中断发生,并进行相应处理
中断返回,恢复现场:
PC→LR,CPSR→SPSR
中断屏蔽寄存器:
为了能接受中断请求必须将F或I位设置为0,同时将中断
屏蔽寄存器的相应位设置为0。
中断挂起寄存器:
共32位,每一位与一中断源相对应,只有一位能为1,指示相应中断挂起。
各挂起的中断源由各中断仲裁器确定那个中断挂起。
(中断挂起的含义是:
相应的中断是下一个待处理的中断
在中断服务程序中需要将相应中断清除)
中断源挂起寄存器:
共32位,当某一个中断源产生中断请求,相应位置1,在中断服务程序中必须清除
中断模式寄存器:
共32位,每一位与一中断源相对应,设置相应的中断源为快速中断还是普通中断。
中断优先权寄存器:
ARM将中断分为6组,每一组设一个优先权仲裁器,在中断优先权寄存器中,每一组有一个ARB_MODE位设置是否使能改组各中断源的优先级滚动变化,另有两位ARB_SEL以设置改组各中断源的优先级。
中断偏移寄存器:
指示普通中断中是哪一个中断挂起,当中断挂起寄存器或中断源挂起寄存器中的某位清除时,这个寄存器被清除。
子中断源挂起寄存器:
指示子中断源是否有请求。
向这个寄存器中的某位写数据,则可清除这一位。
CPSR:
程序状态寄存器(currentprogramstatusregister) cpsr在用户级编程时用于存储条件码;CPSR包含条件码标志,中断禁止位,当前处理器模式以及其他状态和控制信息。
9.PWM编程:
改变频率和脉冲宽度以及定时器观测值的读取
改变频率:
定时器减法缓冲寄存器(TCNTBn);
改变脉冲宽度:
比较缓冲寄存器(TCMPBn);
定时器观测值:
定时器观测寄存器(TCNTOn)。
10.串口:
帧错误、奇偶校验错误,溢出错误,前两种错误的校验原理,数据的发送和接收、回环模式、自动流控制,串口数据传输的编程,从某一个内存单元取数,然后发往串口(包括DMA方式)
使用DMA方式实现从存贮器发送数据到串口0
#include
#include“..\INC\config.h”
#defineSEND_DATA(*(volatileunsignedchar*)0x30200000)//待发送的地址
#defineSEND_ADDR((volatileunsignedchar*)0x30200000)
voidmain(void){
volatileunsignedchar*p=SEND_ADDR;
intI;
Target_init();
Delay(1000)
SEND_DATA=0x41;
for(i=0;i<128;i++)
*pp++=0x41+i;//上三条语句提供源数据
rUCON0=rCON0&0xff3|0x8;//Uart0设置为DMA的方式
//下面的语句对DMA0初始化
rDISRC0=(U32)(SEND_ADDR);
rDISCC0=(0<<1)|(0<0);//源=AHB,传送后地址增加
rDIDST0=(U32)UTXH0;//发送FIFO缓冲区地址
rDIDSTC0=(1<<1)|(1<0)//目标=APB,传送后地址不变
rDCON0=(0<<31)|(0<<30)|(1<<29)|(0<<28)(0<<27)|(1<<23)|(1<<22)|(0<<20)|
50);
//设置DMA控制器:
握手模式,与APB同步,使能中断,单位传输,单个模式,目标=UART0,硬件请求模式,不自动加载,半字,计数初值=50
rMASKTRIG0=(1<<1);//打开DMA通道0
while
(1)
}
11.(▲)DMA:
概念、原理、数据传输过程,S3C2410的DMA控制寄存器的单个服务模式和整体服务模式,这一部分单独编程不作要求。
概念:
DirectMemoryAcess,是指存贮器和外设在DMA控制器的控制下直接传输数据而不通过CPU,在DMA数据传输前需要从CPU获得总线的控制权
DMA数据传输过程
1)外设向DMA控制器发出DMA请求
2)DMA控制器向CPU发出总线请求
3)CPU执行完现行的总线周期后向DMA控制器发出应答信号
4)CPU将总线控制权让给DMA控制器
5)DMA控制器向外部设备发出DMA请求应答信号
6)进行DMA数据传输
7)数据传输完毕DMA向CPU发出中断请求,CPU在接收到中断后进行相应处理
8)CPU从中断返回并从DMA控制器收回总线控制权
在单个服务模式下,主FSM的3种状态执行完后就停止,并等待下一个DMA请求,并等待下一个DMA请求。
如果产生了新的DMA请求,则所有三个状态将被重复。
因此,对于每一个原子传送操作,DMAACK先后置1和清零。
相反,在整体服务模式下,主FSM一直在状态3等待直到CURR_TC变为0,因此DMAACK在整个传送过程中置1,仅当CURR_TC变为0才清零。
12.AD转换器:
作用、类型、编程
⏹作用:
模拟信号与CPU之间的联系和接口
⏹类型:
双积分A/D转换器:
对模拟信号Vi积分一个固定时间T;然后用参考电源Vf反相积分Ti直到积分电容放电到0:
Vi=Vf·Ti/T
逐次逼近A/D转换器:
由逐次逼近寄存器SAR,D/A转换器、比较器以及时序和逻辑控制等部分组成。
比较时先从SAR的最高位开始,逐次确定各位的数码为1还是0.
13.触摸屏的工作原理与编程
两个金属涂层分别为X、Y方向的电极;当给X方向的电极施加一确定的电压,而在Y方向电极对不施加电压时,触点处的电压值可在Y+或Y-上测量出来。
从而确定出X坐标。
Y坐标的确定同理
14.LCD:
LCD的显示原理:
显示的最小单位-像素、显示缓冲区中填写的是什么信息-每点的颜色信息
汉字的显示原理:
嵌入式控制系统中最常用的汉字是16×16点阵,它是由行列各16个点,共256个点组成的点阵图案,每行的16个点在内存中占两个字节,一个16×16点阵汉字共16行,在内存中占32个字节。
根据这些字节在内存中存放的顺序,第一行的第一个字节称“0”号字节,第一行第二个字节称“1”号字节;第二行的第一个字节称“2”号字节,第二个字节称“3”号字节。
以此类推,最后一行的第一个字节称“30”号字节,第二个字节称“31”号字节,每个字节高位在前,低位在后,即D7在一个字节的最左侧,D0在最右侧。
汉字的区位码和内码、字模:
区位码:
汉字库结构作了统一规定,即将字库分成94个区,每个区有94个汉字(以位做区别),每一个汉字在汉字库中有确定的区和位编号(用两个字节),就是所谓的区位码(区位码的第一个字节表示区号,第2个字节表示位号),因而只要知道了区位码,就可知道该汉字在字库中的地址。
内码:
组成两字节代码的最高位为0,即每个字节仅只使用7位,这样在机器内使用时,由于英文的ASCII码也在使用,可能将国标码看成两个ASCII码,因而规定用国标码在机内表示汉字时,将每个字节的最高位“置”1,以表示该码表示的是汉字,这些国标码两字节最高位加1后的代码称为机器内的汉字代码,简称内码。
字模:
每个汉字在字库中是以点阵字模形式存储的。
字模提取软件(可在网上搜索一下,至少要知道一种),LcdZimo.rar
S3C2440(或2410)下的编程,STNLCD部分不作要求,仅要求TFTLCD部分,要搞懂原理。
编程要求:
逻辑颜色和物理颜色的转换;
汉字和ASCII码的显示。
第6章(10%)
1.需要知道嵌入式系统的两种软件编程模式:
裸机编程和基于操作系统的编程
2.裸机编程:
开发工具ADS(作用、开发的方式、语言),如何利用超级终端和DNW进行程序下载
ARMADS的全称为ARMDeveloperSuite,它是ARM公司推出的新一代ARM集成开发环境。
裸机程序编辑、编译软件。
C、汇编。
程序下载步骤:
(1)连接好开发板电源,串口线,USB线,并设置开发板为NORFlash启动系统,分别打开串口超级终端和DNW,上电启动开发板。
(2)保证USB驱动已经安装好(前面已经详细介绍了USB驱动的安装方法),这时可以看到DNW的标题栏显示[USB:
OK],如果没有安装好驱动会显示[USB:
x]
3)点DNW菜单Configuration,设置USB下载运行地址为0x30000000
(4)这时在超级终端的BIOS功能菜单中选择功能号[d],出现USB下载等待提示信息:
(5)点击DNW程序的“USBPort”“Transmit”,如图选择刚刚编译出的映象文件(光盘“\images\2440test”目录中有已经编译好的可执行文件),这样就开始下载了
超级终端也用于在基于操作系统的情形
开发的程序既可以下载到nandflash也可下载到内存中运行。
3.基于操作系统的编程:
Bootloader是什么,它的作用。
Bootloader:
是在操作系统内核运行之前运行的一段小程序。
通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。
通常,BootLoader是严重地依赖于硬件而实现的,特别是在嵌入式世界。
因此,在嵌入式世界里建立一个通用的BootLoader几乎是不可能的。
在嵌入式系统中,通常没有象Bios那样的固件程序(有的嵌入式CPU也会内嵌一段短小的启动程序),因此整个系统的加载启动任务完全由BootLoader完成
操作系统的内核(在操作系统中的作用:
提供硬件抽象层、磁盘及文件控制、多任务等功能、计算机系统的必要组成部分?
内核不是计算机系统必要组成部分。
Linux内核的组成、在目标板上linux操作系统的安装过程(bootloader、内核、根文件系统)、虚拟机上linux的安装、linux的基本操作命令,网络文件系统NFS嵌入式系统编程中的作用,利用NFS进行程序下载的原理,如何在PC端编译linux程序,并下载到目标板运行、在PC端linux运行的程序怎样编译;基于嵌入式操作系统开发的程序下载方式(u盘、网络文件传输、NFS、串口传输)。
第7章(25%)
1.虚拟文件系统的作用
Linux之所以能支持多种文件系统,其实是由于提供了一个虚拟文件系统VFS,VFS作为实际文件系统的上层软件,掩盖了实际文件系统底层的具体结构差异,为系统访问位于不同文件系统的文件提供了一个统一的接口
设备:
以文件的方式访问(设备文件)
2.设备驱动的作用(对设备初始化和释放;把数据从内核传送到硬件和从硬件读取数据;读取应用程序发送给设备文件的数据和回送应用程序请求的数据;检测和处理设备出现的错误。
)、linux操作系统下有哪几类设备类型:
(设备类型:
字符设备或者块设备、网络设备)、设备文件及其在文件系统中所属目录、硬盘、USB盘的设备文件命名、设备类型,主设备号和次设备号(对设备文件的识别使用设备类型,主设备号和次设备号。
主设备号:
按照设备使用的驱动程序不同而赋予设备不同的主设备号。
主设备号与驱动程序一一对应。
次设备号:
用于区分使用同一驱动程序的不同设备。
)
设备驱动程序的file_operations结构(file_operations结构体中主要成员的含义如下:
open()用来完成驱动程序的设备初始化操作,并且还会增加设备计数,以防止文件关闭前模块被卸载出内核。
主要完成的操作有:
检查设备错误(诸如设备未就绪或相似的硬件问题);如果是首次打开,则初始化设备;标识次设备号;分配和填写要放在file→private_data内的数据结构;增加使用计数。
llseek()函数用来修改一个文件的当前读写位置,并将新位置返回,在出错时,这个函数返回一个负值
read()函数用来从设备中读取数据,成功时函数返回读取的字节数,出错时返回一个负值
write()函数向设备发送数据,成功时该函数返回写入的字节数。
如果此函数未被实现,当用户进行write调用时,将得到-EINVAL返回值。
ioctl()提供设备相关的控制命令的实现(既不是读操作也不是写操作),当调用成功时,返回给调用程序的一个非负值。
内核本身识别部分的控制命令,而不必调用设备驱动中的ioctl()。
如果设备驱动不提供ioctl()函数,对于内核不能识别的命令,用户进行ioctl()系统调用时将得到-EINVAL返回值
)
、Linux内核模块(为了把Linux内核中需要的部分都包含在内核中,而又不使其过于庞大。
可采用模块的方式,让编译出的内核本身不需要包含所有功能,而在这些功能需要使用时,其对应代码被动态加载到内核中。
这种机制就称为模块,具有如下特点:
1模块本身不被编译为内核映像,从而控制了内核的大小。
2模块一旦被加载,他就和内核中其他部分一样。
)
→、字符设备驱动(7章ppt)、linux文件操作(Linux系统的一个重要思想是“一切都是文件”,例如对由于字符设备(比如键盘和鼠标)和块设备(硬盘,USB存贮器)等设备的访问都是通过文件操作的方式进行的。
→设备驱动在操作系统的文件系统调用或C库函数调用时(本质也是基于系统调用)被访问。
→系统调用是指应用程序空间对内核空间访问
)、字符设备编程的主要内容和步骤,
cdev结构体
在linux2.6内核中使用cdev结构体描述字符设备,cdev结构体的定义为
structcdev
{
structkobjectkobj;//内嵌的kobject对象
structmodule*owner;//所属模块
structfile_operations*ops;//文件操作结构体
structlist_headlist
dev_tdev;
unsignedintcount;
};
操作系统程序分析:
LED的控制(7章ppt30页)
⏹驱动程序代码
⏹#include
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 答案