嵌入式复习题

一、选择题

1.下面哪一类嵌入式处理器最适合用于工业控制( )。

A.嵌入式微处理器       B.微控制器

C. DSP                  D.以上都不合适

2. 存储一个32位数0x2168465到2000H~2003H四个字节单元中,若以大端模式存储,则2000H存储单元的内容为( )。

A.0x21  B.0x68  C.0x65  D.0x02

3.以下关于GPIO的描述,错误的是?( )

A. 共有117个多功能I/O端口

B. GPxCON配置端口复用功能

C. 包含GPxCON,GPxDAT,GPxUP共3个寄存器

D. GPA没有上拉电阻配置功能

4.下面哪一种工作模式不属于ARM特权模式( )。

A.用户模式   B.系统模式  C.软中断模式  D.FIQ模式

5. 以下关于RAM,ROM,Flash的描述,正确的是()。

A. 全部为非易失性存储器

B. 全部为并行随机存储器

C. RAM存取速度最快

D. Flash不可以片内执行程序

6. 在嵌入式系统的存储结构中,存取速度最快的是(   )。

A.内存       B. Cache     C. Flash       D.寄存器组

4.以下S3C2440的定时器描述错误的是( )。

A.所有定时器均具备PWM功能

B.两级预分频可取的更宽的定时范围

C.基本时钟输入单位是PCLK

D.核心是比较器和计数器

7.以下关于S3C2410的存储控制器,以下描述错误的是?( )

A.设计中,可将SDRAM连接到BANK0

B.共27位地址总线,容量为1G,分8个BANK

C.通过steptone 技术,可实现Nand Flash启动

D.可通过OM1,OM0选择16位或32位数据宽度

8. ARM7TMDI的工作状态包括()。

A.测试状态和运行状态   B.挂起状态和就绪状态

C. 就绪状态和运行状态    D.ARM状态和Thumb状态

9.SDRAM,Nor Flash以及Nand Flash的存取速度由慢到快的速度排序是( )

A.SDRAM,Nor Flash, Nand Flash

B.SDRAM,Nand Flash,Nor Flash

C.Nand Flash, Nor Flash, SDRAM

D.Nor Flash, Nand Flash,SDRAM

10.以下哪对信号线用于UART的流控?( )         

A.TXD-RXD

B.RTS-CTS

C.DSR-DTR

D.DCD-RING

11.下面哪一种工作模式不属于ARM特权模式( )。

A.用户模式   B.系统模式  C.软中断模式  D.FIQ模式

12.S3C2410提供的符合I2C协议的设备连接串行线是( )。

A.SCL和RTX   B.RTX和RCX   C.SCL和SDA  D.SDA和RCX

13. 以下哪个不是ARM的7种运行状态之一:( )

A.快中断状态   B. 挂起状态   C.中断状态  D.无定义状态

14. 下列( )设备是字符设备。

A. hdc   B. fd0   C. hda1 D. tty1

15. ARM指令集和Thumb指令集分别是( )位的。

A. 32位,32位       B. 16位,32位

C. 16位,16位       D. 32位,16位

16. 嵌入式Linux操作系统一般在ROM中存放的布局并不包括(   )  

A.Bootloader     B.内核参数区   C.Linux内核  D.交叉编译器

17. 在大多数Linux发行版本中,以下哪个属于块设备 (  )。

A.串行口   B.硬盘  C.虚拟终端  D.打印机

18.以下关于S3C2410时钟源的描述,哪个是错误的?( )

A.PCLK用于为CPU内核提供时钟

B.UPLL为USB提供时钟源

C.输出时钟取决于M,P,S分频器的值

D.MPLL提供三路时钟输出,FCLK,HCLK以及PCLK。

19. NAND FLASH和NOR FLASH的区别正确的是( )

A.NOR的读速度比NAND稍慢   B.NAND的写入速度比NOR慢很多

C.NAND的擦除速度比NOR慢   D.大多数写入操作需要先进行擦除操作

20.以下关于ARM920T在ARM状态下的寄存器的描述,正确的是(  )。

A.R14 = R15 + 4

B.R1~ R15在所有模式下定义均相同

C.CPSR 为当前状态寄存器,低5位用于决定处理器工作模式

D.R13为程序计数器,R14为堆栈指针寄存器

二、简答题

1.什么是扇区,块,段?

扇区是块设备硬件对数据处理的基本单位,硬件每次传送一个扇区的数据到内存中。在内核模块中,通常以512字节来定义扇区的大小。

块是由Linux制定对内核或文件系统等数据处理的基本单位。通常,1个块由1个或多个扇区组成。因此,块必须是扇区大小的整数倍。

段是由若干个相邻的块组成,是Linux内存管理机制中一个内存页或者内存页的一部分。段的大小与块相关,是块的整数倍。

2.UART和I2C的区别。

通用异步收发传输器,通常称作UART,是一种异步收发传输器,是电脑硬件的一部分。将资料由串行通信并行通信间作传输转换,作为并行输入成为串行输出的芯片,通常集成于其他通讯接口的连结上。与标准信号幅度变换芯片进行搭配,作为连接外部设备的接口。

I2C总线是两线式串行总线,用于连接微控制器及其外围设备。是微电子通信控制领域广泛采用的一种总线标准。它是同步通信的一种特殊形式,具有接口线少,控制方式简单,器件封装形式小,通信速率较高等优点。I2C 总线支持任何IC 生产过程。通过串行数据线和串行时钟线在连接到总线的器件间传递信息。每个器件都有一个唯一的地址识别,而且都可以作为一个发送器或接收器。

3.什么是UART?并简单描述UART的数据传输流程。

通用异步收发传输器通常被称作UART,是电脑硬件的一部分,将资料由串行通信并行通信间作传输转换。UART是一种通用串行数据总线,用于异步通信。该总线双向通信,可以实现全双工传输和接收。在嵌入式设计中,UART用来主机与辅助设备通信,如汽车音响与外接AP之间的通信。

(1)平时数据线处于“空闭”状态(1状态)。

(2)当要发送数据时,UART改变TxD数据线的状态(变为0状态)并维持1位的时间,这样接收方检测到开始位后,再等待1.5位的时间就开始一位一位地检测数据线的状态得到所传输的数据。

(3)UART一帧中可以有5、6、7或8位的数据,发送方一位一位地改变数据线的状态将它们发送出去,首先发送最低位。

(4)如果使用校验功能,UART在发送完数据位后,还要发送1个校验位。有两种校验方法:奇校验、偶校验---数据位连同校验位中,“1”的数目等于奇数或偶数。

(5)最后,发送停止位,数据线恢复到“空闭”状态(1-状态)。

4.字符设备和块设备之间的主要区别是什么?

块和字符是两种不同的访问设备的策略;同一个设备可以同时支持块和字符两种访问策略;字符设备只能顺序访问,而块设备可以随机访问。Nand、SD卡(电储存)等随机访问效率等同于顺序访问。传统的机械式块设备虽可以随机访问,但连续访问效率更高,因此块设备驱动中有排序逻辑将用户的随机访问重新调整成尽量连续访问以提升效率。块设备通过系统缓存进行读取,不是直接和物理磁盘读取。字符设备可直接物理磁盘读取,不经过系统缓存。

5.简单描述ARM体系的主要特征

Load/Store体系结构;大量的寄存器,都可用于多种用途;三地址指令(两个源操作数寄存器和结果寄存器独立设定);每条指令都可以条件执行,包含非常强大的多寄存器Load和Store指令;能在单时钟周期内完成操作数的移位操作;能过协处理器指令集来扩展ARM指令集,包括在编程模式下增加了新的寄存器和数据类型;在Thumb体系结构中以高密度16位压缩形式表示指令集。

6.对于S3C2440,进行嵌入式Linux开发一般需要哪几个步骤?

1)建立开发环境
操作系统一般使用RedHat-Linux,版本从7到9都可以,选择定制安装或全部安装,通过网络下载相应的GCC交叉编译器进行安装(例如arm-Linux-gcc、arm-μclibc-gcc),或者安装产品厂家提供的交叉编译器。
2)配置开发主机
配置MINICOM,一般的参数为波特率为115 200bps,数据位为8位,停止位为1,无奇偶校验,软件硬件流控设为无。
3)建立引导装载程序BOOTLOADER
从网络上下载一些公开源代码的BOOTLOADER,根据自己具体的芯片进行移植修改。
4)下载别人已经移植好的Linux操作系统:如μCLinux、ARM-Linux、PPC-Linux等。
5)建立根文件系统
www.busybox.net下载使用BUSYBOX软件进行功能裁减,产生一个最基本的根文件系统,再根据自己的应用需要添加其他程序。
6)建立应用程序的Flash磁盘分区:一般使用JFFS2或YAFFS文件系统。
7)开发应用程序
8)烧写内核、根文件系统、应用程序
9)发布产品

7.ARM中断控制器处理中断的流程。

1.保存现场。保存当前的PC值到R14,保存当前的程序运行状态到SPSR。

2.模式切换。 根据发生的中断类型,进入IRQ模式或FIQ模式。

3.获取中断源。若是IRQ中断,则PC指针跳到0x18处;若是FIQ中断,则跳到0x1C处

4.接下来PC指针跳入中断服务子程序处理中断。中断处理为各种中断定义不同的优先级别,并为每一个中断设置一个中断标志位。当发生中断时,通过判断中断优先级以及访问中断标志位的状态来识别到底哪一个中断发生了。进而调用相应的函数进行中断处理。

5.中断返回,恢复现场 当完成中断服务子程序后,将SPSR中保存的程序运行状态恢复到CPSR中,R14中保存的被中断程序的地址恢复到PC中,进而继续执行被中断的程序。

8.嵌入式微处理器和嵌入式微控制器的区别。

嵌入式微处理器,以CPU为基础。将微处理器装配在专门设计的电路板上,只保留和嵌入式应用有关的功能;外接电路必须包括ROM等各种外设等器件

嵌入式微控制器又称单片机,是将整个计算机系统浓缩集成到一块芯片中。一般以某种微处理器内核为核心,芯片内部集成ROM/EPROM、RAM、定时/计数器等各种必要功能和外设。

9.驱动程序与应用程序的区别。

应用程序一般有一个 main 函数,从头到尾执行一个任务。驱动程序却不同,它没有 main 函数,通过使用宏 module_init(初始化函数名),将初始化函数加入内核全局初始化函数列表中,在内核初始化时执行驱动的初始化函数,从而完成驱动的初始化和注册。之后驱动便等待被应用软件调用。驱动程序中有一个宏 moudule_exit(退出处理函数名)注册退出处理函数。它在驱动退出时被调用。应用程序可以和 GLIBC 库连接,因此可以包含标准的头文件,在驱动程序中不能使用标准 C 库,因此不能调用所有的 C 库函数包含的头文件只能是内核的头文件。

10.简单描述MMU。

MMU是内存管理单元,有时称作分页内存管理单元(PMMU)。它是一种负责处理中央处理器(CPU)的内存访问请求的计算机硬件。它的功能包括虚拟地址物理地址的转换、内存保护、中央处理器高速缓存的控制,在较为简单的计算机体系结构中,负责总线仲裁以及存储体切换。

11.简单描述下NOR Flash和NAND Flash的区别。

读写的基本单位不同。应用程序对NOR芯片操作以“字”为基本单位。应用程序对NAND芯片操作是以“块”为基本单位。要修改NAND芯片中一个字节,必须重写整个数据块。NOR闪存是随机存储介质,用于数据量较小的场合;NAND闪存是连续存储介质,适合存放大的数据。NOR地址线和数据线分开,所以NOR芯片可以像SRAM一样连在数据线上。NOR芯片的使用也类似于通常的内存芯片,它的传输效率很高,可执行程序可以在芯片内执行,不必再把代码 读到系统RAM中。由于NOR的这个特点,嵌入式系统中经常将NOR芯片做启动芯片使用。而NAND共用地址和数据总线,需要额外联结一些控制的输入输出,所以直接将NAND芯片做启动芯片比较难。NOR的存储密度低,所以存储一个字节的成本也较高,而NAND闪存的存储密度和存储容量均比较高。

12.什么是驱动程序?请详细描述。

驱动程序一般指的是设备驱动程序,是一种可以使计算机设备进行相互通信的特殊程序。相当于硬件的接口,操作系统只有通过这个接口,才能控制硬件设备的工作。因此,驱动程序被比作“ 硬件的灵魂”、“硬件的主宰”、“硬件和系统之间的桥梁”等。

13.简单说明字符设备注册函数int register_chrdev(unsigned int major,const char *name,struct file_operations *fops)中参数的意义。

其中: major是为设备驱动程序向系统申请的主设备号,如果是0,则系统为此驱动程序动态分配一个主设备好。name是设备名,fops是对各个调用的入口点说明,此函数返回0时表示成功;返回EINVAL,表示申请的主设备非法,主要原因是主设备号大于系统所允许的最大设备号;返回EBUSY,表示申请的主设备号正在被其他设备程序使用。如果动态分配主设备号成功,此函数将返回所分配的主设备号。

14.简单说明字符设备注销函数int unregister_chrdev(unsigned int major,const char *name)中参数的意义。

其中:Marjor为主设备号,name为设备名。Linux内核把name和major在内核注册的名称对比,如果不相等卸载失败,并返回-EINVAL;如果major大于最大的设备号。也返回-EINVAL

15.简单说明下面两个函数的意义以及函数参数的意义。

unsigned long copy_to_user(void * to,const void *from,usigned long len);
unsigned long copy_from_user(void * to,const void *from,usigned long len); 

这两个函数用于在用户空间和内核空间之间进行数据拷贝,两个函数具有相同的参数和返回值,事实上,除了数据的拷贝方向不一样外,它们是一致的。函数 copy_to_user()是把数据从内核空间拷贝到用户空间,而函数 copy_from_user()是把数据从用户空间拷贝到内核空间。 

参数:

to:数据的目标地址,即数据将要拷贝到哪里;
from:为数据的源地址,即数据从哪里拷贝;
len:需要拷贝的数据个数,以字节为单位; 

16.简述arm处理器的工作模式

ARM体系的CPU有以下7种工作模式

(1)用户模式:用于正常执行程序;

(2)快速中断模式:用于高速数据传输;

(3)外部中断模式:用于通常的中断处理;

(4)管理模式:操作系统使用的保护模式;

(5)数据访问终止模式:当数据或指令预取终止时进入该模式,可用于虚拟存储以及存储保护。

(6)系统模式:运行具有特权的操作系统任务;

(7)未定义指令中止模式:当未定义的指令执行时进入该模式,可用于支持硬件。

17.请完成以下SDRAM与S3C2410的硬件连线设计,其中A0 为SDRAM的第一条地址线引脚标号,BA0,BA1为SDRAM的BANK引脚标号,请将S3C2410相应的引脚填入到对应表格中,无需连接的请打✖号。

SDRAM的地址线用A[n]表示,即A0,A1,….

S3C2410的地址线用ADDR[n]表示,即ADDR0,ADDR1,…

BANK数量

容量

总线宽度

芯片数量

A0

BA0

BA1

2

4M

8BIT

1

ADDR0

ADDR21

2

16M

8BIT

2

ADDR1

ADDR23

4

64M

16BIT

2

ADDR2

ADDR24

ADDR25

4

128M

32BIT

1

ADDR2

ADDR25

ADDR26

18.已知S3C2410开发板,外部晶振频率Fin = 12M。请根据如下设计要求计算相关寄存器的值并填入表中。不使用的位设置为0,要求写出计算过程。附图为相关寄存器取值说明。

  1. 时钟输出:FCLK=200MHz,HCLK=100MHz,PCLK=50MHz
  2. UART0 工作模式为:PCLK输入,查询方式,8数据位,1停止位,无校验,波特率:115200

寄存器值表(使用16进制)

CLKDIVN

MPLLCON

GPHCON

ULCON0

UCON0

UBRDIV0

CLKDIVN计算:
因FCLK:HCKL:PCLK=4:2:1,根据表CLKDIVN可知,
PDIVN=[1],HDIVN=[0:1],DIVN_UPLL=[0],故:CLKDIVN=0x03
MPLLCON计算:
根据公式:MPLL(FCLK)=(m*Fin)/(p*2^s);其中m=MDIV+8,p=PDIV+2,s=SDIV
可知:200=12m/(p*2^s),显然该方程无唯一解,考虑MDIV,PDIV以及SDIV的取值范围分别为MDIV[0~255],PDIV[0~63],SDIV[0~3],固当分式分子分母为整数较容易计算,若使m=100,则:p=4,s=0,故:
MDIV=92=Ox5c; PDIV=4=Ox04; SDIV=0=0x00
因此:MPLLCON=Ox5c040
计算GPHCON:
UART0引脚与GPH2,GPH3复用,因此需要将其设置位UART模式,根据表GPHCON定义GPH2=[10],GPH3=[10],其他位设为0
故:GPHCON=0xA0
计算ULCON:
由题知,UART0采用8数据位,1停止位,无校验,根据ULCON定义可知
ULCON=Ox03
计算UCON:
UARTO采用查询方式,故UCON[3:2]=UCON[1:0]=[01];UART0时钟选择PCLK,故UCON[10]=[0];故UCON=0x05
计算UBRDIV0
UART0波特率为115200,PCLK=50MHZ,故:
UBRDIV0=(int)50000000/(115200X16)-1=26=0x1A

19.某设计采用CPU采用S3C2410,Nand Flash采用K9F1280,以下代码是CPU对该Nand Flash的读取操作的代码,阅读代码并完成以下问题。

  1. 阅读代码2~14行,NFADDR是什么?并给出NFADDR的地址。
  2. 阅读代码60~73行,解释该段代码的作用是什么,给出该代码段的关键语句注释。
  3. 利用代码中的已实现函数,完成向flash写入数据的功能,函数原型如下:

/**

 * 向页写入数据

 * @param buf       待写入数据段的首地址

 * @param page_addr 页地址

 */

void nand_program(unsigned char *buf, unsigned long page_addr){

    // code here

    return;

}

下表为完成代码编写需要的命令字定义表。

以下为程序代码:

 

 

 

(1)阅读代码2~14行,NFADDR是什么?并给出NFADDR的地址。

答:NFADDR是NANDFlash的地址寄存器,NFADDR的地址为0x4E000008。

(2)阅读代码60~73行,解释该段代码的作用是什么,给出该代码段的关键语句注释。

答:本段代码的作用是向NAND Flash(即NFADDR)地址寄存器写入地址。

关键代码注释:

static void write_addr(unsigned int addr)

{

    int i;

// 指向NFADDR地址寄存器

    volatile unsigned char *p = (volatile unsigned char *)&s3c2410nand->NFADDR;

// 写入地址A0~A7

    *p = addr & 0xff;

    for(i=0; i<10; i++);

// 写入地址A9~A16

    *p = (addr >> 9) & 0xff;

    for(i=0; i<10; i++);

// 写入地址A17~A24

    *p = (addr >> 17) & 0xff;

    for(i=0; i<10; i++);

// 写入地址A25

    *p = (addr >> 25) & 0xff;

    for(i=0; i<10; i++);

}

(3)利用代码中的已实现函数,完成向flash写入数据的功能,函数原型如下:

答:

/**

 * 向页写入数据

 * @param buf       待写入数据段的首地址

 * @param page_addr 页地址

 */

void nand_program(unsigned char *buf, unsigned long page_addr){

    nand_init();              // 初始化

    nand_select_chip();       // 片选芯片

    write_cmd(128);           // 写0x80命令字,开始写入地址和数据

    write_addr(page_addr);    // 写页地址

    wait_idle();              // 等待nand flash空闲可操作

    // 将数据写入页

    *p = (volatile unsigned char *)&s3c2410nand->NFDATA;

    for (int i = 0; i < 528; i++)

    {

        unsigned char *p = *buf;

        buf = buf++;

    }

    write_cmd(16);              // 写入0x10控制字,开始烧写数据

    wait_idle();                // 等待nand flash空闲可操作

    write_cmd(112);             // 写入读取芯片状态命令字0x70

    // 读取芯片状态数据,判读是否读写成功

    unsigned char writeStauts = read_data() & 0x01;

    if (writeStauts)

        // process code here if success to program

    else

        // process code here if fail to program

    return;

}

20.某设计采用CPU采用S3C2410,Nand Flash采用K9F1280,以下代码是CPU对该Nand Flash的读取操作的代码,阅读代码并完成以下问题。

1)阅读代码2~14行,给出变量NFCMD的值,说明该变量代表的含义是什么?

2)阅读代码92~105行,该段代码为由Nand Flash读取数据到CPU内存,给出该代码段的关键语句注释(95~103行)。

3)利用代码中的已实现函数,完成flash数据擦除功能(块擦除)的功能,函数原型如下:

/**

 * 块擦除

 * @param block_addr 要擦除的块地址

 */

void nand_erase_block(unsigned long block_addr){

    // code here

    return;

}

下表为K9F1280命令字定义表

 

以下为程序代码:

 

 

 

1)阅读代码2~14行,给出变量NFCMD的值,说明该变量代表的含义是什么?

答:NFCMD的值为0xff,该变量代表NFCMD寄存器的值。

2)阅读代码92~105行,解释该段代码的作用是什么?给出该代码段的关键语句注释。

答:本段代码的作用是从NAND Flash存储器中读数据。

关键代码注释:

void nand_read(unsigned char *buf, unsigned long start_addr, int size)

{

int i, j;

nand_init( )                                                         / * NAND初始化*/

 nand_select_chip();                                          /* 选中芯片 */

for(i=start_addr; i < (start_addr + size);)            /* 设地址 */

{

      write_cmd(0);                                              /* 发出READ0命令 */

      write_addr(i);                                                /* 写地址 */

      wait_idle();                                                    /* 等待*/

  for(j=0; j < NAND_SECTOR_SIZE; j++, i++)   /* 设地址 */

{

          *buf = read_data();                                    /* 读数据*/

          buf++;                                                    /* 数据缓存器自动加1*/

      }

    }

3)利用代码中的已实现函数,完成flash数据擦除的功能,函数原型如下:

答:

void  nand_erase_block(unsigned long block_addr)

{

int i;

 nand_init();                    // 初始化

    nand_select_chip();             // 片选芯片

    write_cmd(0x60);                 // 写0x60命令字,开始擦除数据

    write_addr(block_addr);          // 写块地址

    wait_idle();                    // 等待nand flash空闲可操作

    write_cmd(0xd0);                  // 写入0xd0控制字

    wait_idle();                    // 等待nand flash空闲可操作

    return;

}

21.编写hello_module驱动模块。要求需要具有各个功能模块,仅仅在模块注册时输出“hello,world!”,模块卸载时输出“goodbye,world!”。

#include <linux/init.h>

 #include <linux/module.h>

  MODULE_LICENSE("Dual BSD/GPL");

  static int hello_init(void)

  {

          printk(KERN_ALERT "hello, world!\n");

          return 0;

  }

   static void hello_exit(void)

 {

         printk(KERN_ALERT "goodbye,  world!\n");

 }

 module_init(hello_init);

 module_exit(hello_exit);

22.一个软件系统包括应用程序、库、操作系统,驱动程序。开发人员可以只关注自己熟悉的部分,对于相邻层,只需要了解它的接口,无需关注它的实现细节。现在需要完成如下任务:

        1. 什么是驱动程序?并简单描述驱动程序的开发步骤。
        2. 驱动程序进行模块化后,如何实现向内核注册。
        3. 请写一个点亮LED灯的驱动程序。

1)英文名为“Device Driver”,全称为“设备驱动程序”是一种可以使计算机和设备通信的特殊程序,可以 说相当于硬件的接口,操作系统只有通过这个接口,才能控制硬件设备的工作,假如某设备的驱动程序未能正确安装,便不能正常工作。 因此,驱动程序被誉为“ 硬件的灵魂”、“硬件的主宰”、和“硬件和系统之间的桥梁” 。

  • 查看原理图、数据手册。了解设备的操作方法。
  • 在内核找到相近的驱动程序,以它为模板进行开发。
  • 实现驱动程序的初始化。
  • 设计所要实现的操作。
  • 实现中断服务。
  • 编译驱动程序到内核。
  • 测试驱动程序。

2)模块初始化时,将主设备号与file operations结构一起向内核注册。

驱动程序有一个初始化函数,在安装驱动程序时会调用它。在初始化函数中,会将驱动程序的fileoperations结构连同其主设备号一起向内核进行注册。对于字符设备使用如下以下函数进行注册:

int register_chrdev(unsigned int major, const char *name, struct file operations *fops);

这样,应用程序操作设备文件时,Linux系统就会根据设备文件的类型(是字符设备还是块设备)、主设备号找到在内核中注册的fileoperations结构(对于块设备为block_device operations结构),次设备号供驱动程序自身用来分辨它是同类设备中的第几个。

3)点亮LED的驱动程序。

 

 

嵌入式课程期末考试复习资料嵌入式系统的定义 答:1以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。 5.嵌入式处理器的分类 答:1嵌入式微处理器MPU 2嵌入式微控制器MCU 3 嵌入式DSP处理器 4嵌入式片上系统SOC 5 嵌入式可编程片上系统SOPC 4. ARM处理器有几种工作状态,各自的特点。工作状态之间如何进行转换,异常响应时,处理器处于何种状态。 答:ARM有两种工作状态: ①ARM状态,此时处理器执行32位的字对齐的ARM指令。 ②Thumb状态,此时处理器执行16位的、半字对齐的Thumb指令. 在程序的执行过程中,微处理器可以随时在两种工作状态之间切换,并且不影响处理器运行模式和相应寄存器中的内容。但ARM微处理器在上电或复位后,应该处于ARM状态。 执行BX跳转指令,将操作数的状态位(位0)设置为1时,可以使处理器从ARM状态切换到Thumb状态。此外,当处理器处于Thumb状态时发生异(如IRQ、FIQ、Undef、Abort、SWI等),则异常处理返回时,自动切换到Thumb状态。 将操作数的状态位(位0)设置为0时,可以使处理器从Thumb状态切换到ARM状态。此外,当处理器进行异常处理时,把PC指针放入异常模式链接寄存器中,并从异常向量地址开始执行程序,系统自动ARM状态。 THUMB指令集在功能上只是ARM指令集的一个子集,某些功能只能在ARM状态下执行,如CPSR和协处理器的访问. 进行异常响应时,处理器会自动进入ARM状态. 即使是一个单纯的THUMB应用系统,必须加一个汇编的交互头程序,因为系统总是自动从ARM开始启动
1、 ARM微处理器有 7种工作模式,它们分为两类 非特权模式 、 特权模式 。其中用户模式属于 非特权模式 2、 ARM支持两个指令集, ARM核因运行的指令集不同,分别有两个状态 ARM 、 Thumb ,状态寄存器CPSR的 T 位反映了处理器运行不同指令的当前状态 3、 ARM核有多个寄存器,其中大部分用于通用寄存器,有小部分作为专用寄存器, R15 寄存器用于存储PC,R13通常用来存储 SP 4、 ARM处理器有两种总线架构,数据和指令使用同一接口的是 冯诺依曼 ,数据和指令分开使用不同接口的是 哈佛结构 1. 下列不是嵌入式系统特点的是: A. 系统内核小 B. 专用性强 C. 系统精简 D. 实时性要求不高 2. 关于ARM汇编和C语言混合编程下列错误的是: A.C语言中可以直接嵌入某些汇编指令 B. C语言中可以调用汇编的子程序 C. 汇编程序中可以调用C语言的函数 D. C语言嵌入的汇编指令时,不可以使用C的变量 3. 关于ATPCS规则,说法错误的是: A. 只能使用R0-R3来传递参数 B. R13为堆栈指针SP,需要保护 C. R14为连接寄存器,用于存放程序返回地址 D. 单字的返回值存放在R0 4. 关于交叉编译描述正确的是: A. 编译器运行在目标机,生成的可执行文件在宿主机上运行 B.编译器运行在宿主机,生成的可执行文件在宿主机上运行 C.编译器运行在目标机,生成的可执行文件在目标机上运行 D.编译器运行在宿主机,生成的可执行文件在目标机上运行 5. 建立嵌入式Linux开发环境中,使用Bootp协议的直接目的是: A. 分配宿主机的IP地址 B. 分配目标机的IP地址 C. 用于宿主机和目标机之间通讯 D. 用于监控目标机的运行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值