嵌入式试题

1以下哪个设备不属于常见的嵌入式系统硬件(硬盘)
2CMP指令的作用是(比较命令)
3BIC指令的作用是清除指令
4ADD R2,R3,RSL #3的作用是 R2+(R3>>3) # RSL逻辑右移,LSL逻辑左移
5下面哪个是有效的立即数:
首先把这个数用二进制表示出来,然后看这个数中1的最大间隔是多少,要看两次,一次是顺序看,一次是循环看,循环看是把首尾相连,然后首尾都要看,如果不满足要求,肯定是非法的。如果有一次小于等于八(包括这两个1)则有可能是合法的,可以进行下一步判断;这时候又分为两种情况:如果顺序看时1的最大间隔数==8,此时看看这个数最高位1的前面或者最低位1的后面是否有偶数个0,只要满足一种,则这个数是合法的;如果最大间隔数<=8,此时可以循环看,两端得到的间隔个数是否有一个为偶数,如果有一个为偶数,则合法
0x102 非 000100000010
0xff04 非 1111111100000100
0xff000000 11111111000000000000000000000000
0xff1 非 111111110001
6以下关于信号和槽的描述正确的是 C,用于对象间通信
A 使用SOCKET网络通信
B 用于UDP网络通信
C 用于对象间通信
D 用于串口通信
7

8下面哪条指令会影响流水线的执行效率(C)
A MOV
B ADD
C BL 带链接程序跳转,也就是要带返回地址。
D SUB
9如果在ARM处理器中,软件关闭快速中断,应该选用下面哪个指令(B)
A CPSR寄存器中设置1位为1
B CPSR寄存器中设置F位为1
C CPSR寄存器中设置N位为1
D CPSR寄存器中设置Z为为1
10ARM系统中会使用一个寄存器作为堆栈指针使用,简称SP寄存器,在6410芯片中一般使用以下哪个寄存器作为SP寄存器使用 (R13)
11存储一个32位数0x12345678到2000H~2003H四个字节单元中,若以大端模式存储,则2000H存储单元的内容为0x78。
12在嵌入式ARM处理器中,下面哪种中断方式优先级最高(Reset也就是复位)
当软件指令中执行BL XXX 后,请问会影响到哪个寄存器(C)
A R12
B R13
C R14
D R15
S3C6410I/O口的控制寄存器是(D)
A 端口控制寄存器
B 端口数据寄存器
外部中断控制寄存器
以上都不是
下面哪条指令不属于ARM的伪操作(.nop)
SUB R0,R1,#6属于 立即 寻址方式
链接:https://www.nowcoder.com/questionTerminal/e47d32b8a3d6405aa5efc2b9ac5ac61e?orderByHotValue=1&mutiTagIds=3766&page=6&onlyReference=false 来源:牛客网
1、寄存器寻址 ADD R0,R1,R2 ; R0<–R1+R2
2、立即寻址 ADD R3,R3,#1 ; R3<–R3+1
3、寄存器移位寻址 ADD R3,R2,R1,LSL (726)#3 ; R3<–R2+8×R1
4、寄存器间接寻址 LDR R0,[R1] ; R0<–[R1]
5、变址寻址 LDR R0,[R1,R2] ; R0<–[R1+R2]
6、多寄存器寻址 LDMIA R1,{R0,R2,R5} ; R0<–[R1], R2<–[R1+4], R5<–[R1+8]
7、堆栈寻址 LDMFD SP!,{R1-R7,LR};将数据出栈,放入R1~R7,LR这8个寄存器,同时SP自动更新。
8、块复制寻址 stmia r0!,{r1-r7};将r1-r7的数组保存到以r0开始向上增长的地址空间中
9、相对寻址 BL SUBR ; 转移到SUBR

ARM指令集和Thumb指令集分别是(32 16)位的

(单选题) 若R1=2000H,2000H)=0x28,2008H)=0x87,则执行指令LDR R0,[R1,#8]!后R0的值为(本题3.0分) A、 0x2000 B、 0x28 C、 0x2008 D、 0x87
答案是:标准答案:D
嵌入式系统应用软件一般在宿主机上开发, 在目标机上运行, 因此需要一个( 交叉编译) 环境。
无符号二进制数左移一位,则数值增大一倍

1.ARM指令集是(32)位宽,Thumb指令集是(16)位宽的。
2.ARM的Cortex-A处理器总共(37)个寄存器,System模式下使用(17)个寄存器。
3.ARM汇编时寄存器有多个别名,通常PC是指(R15),LR是指(R14),SP是指(R13)。
4.下面属于ARM子程序调用指令的是(c)A、B B、BX C、BL D、MOV
5.ARM中可以访问状态寄存器的指令是(MRS),能够访问内存的指令是(LDR)。
6.ARM处理器中优先级别最高的异常为(reset).
7.条件码中表示不相等的是(NE)。
8.ARM7是(3)级流水线,ARM9是(5)级流水线。
9.在串行异步通讯中,发送端串口的(TxD)要和接收端串口的(RxD)相连接。
10.用ARM汇编指令写出实现64位加法和64位减法的代码段,使用的寄存器请自行分配。假定低32位数存放在r0和r1里面,高32位数存放在r2和r3里面。

//加法:
ADDS r0, r0, r1 	//加S是因为要让这个操作影响标志位
ADC r2, r2, r3 	//ADC是带进位的加法,如果上一条指令产生进位则一起加进来
//减法:
SUBS r0, r0, r1 	//加S是因为要让这个操作影响标志位
SBC r2, r2, r3 	// SBC是带进位的减法指令
  1. 简述ARM发生异常时,ARM核心会自动做哪些事情?从异常返回时,要做哪些事情?
    当异常产生时, ARM core:
    1.拷贝CPSR到SPSR_
    2.设置适当的CPSR位:
    改变处理器状态进入ARM状态
    改变处理器模式进入相应的异常模式
    设置中断禁止位禁止相应中断(如果需要)
    3.保存返回地址到LR_
    4.设置PC为相应的异常向量
    返回时, 异常处理需要:
    1.从SPSR_恢复CPSR
    2.从LR_恢复PC
    Note:这些操作只能在ARM态执行.
  2. 用简单语言描述一下串口的通信协议?并说明每位的作用是什么?
    起始位+数据位+校验位+停止位
    起始位:数据的开始
    数据位:数据
    校验位:校准数据
    停止位:结束,校准时钟
    13.计算机的架构主要有哪两种,区别是什么?
    1、性质不同:冯·诺依曼体系结构,采用二进制,按照程序顺序执行。
    哈佛结构是一种将程序指令存储和数据存储分开的存储器结构。
    2、特点不同:哈佛结构将程序和数据存储在不同的存储空间中,即程序存储器和数据存储器是两个独立的存储器,每个存储器独立编址、独立访问。诺依曼结构的计算机运行过程中,把要执行的程序和处理的数据首先存入主存储器,计算机执行程序时,将自动地并按顺序从主存储器中取出指令一条一条地执行。
    3、组成不同:哈佛结构的计算机由CPU、程序存储器和数据存储器组成。诺依曼结构指令由操作码和地址码组成。
  3. 描述CPU的运行原理。
    1、取指令:CPU的控制器从内存读取一条指令并放入指令寄存器。
    2、指令译码(解码):指令寄存器中的指令经过译码,决定该指令应进行何种操作,操作数在哪里.
    3、执行指令(写回),以一定格式将执行阶段的结果简单的写回。运算结果经常被写进CPU内部的暂存器,以供随后指令快速存取。
    4、修改指令计数器,决定下一条指令的地址。
  4. 完成一个最简单的Linux 内核模块程序设计
#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>
//指定license版本
MODULE_LICENSE("GPL");
//设置初始化入口函数
static int __init hello_world_init(void)
{
printk(KERN_DEBUG "hello world!\n");
return 0;
}
//设置出口函数
static void __exit hello_world_exit(void)
{
printk(KERN_DEBUG "goodbye world!\n");
}
//将上述定义的init()和exit()函数定义为模块入口/出口函数
module_init(hello_world_init);
module_exit(hello_world_exit);
  1. 先将R1中的低16位传送给R2的高16位,再将R2中的高8位数据传送到R3中的低8位中。
MOV R1, #0xff
MOV R2, R1, LSL #0x10;
MOV R3, R2, LSR #0x14;
NOP
END
  1. 解释下面每条指令的作用。
MOV R1,PC			@搬移指令,R1=PC
ADD R1,R2,#3		@加法指令,R1=R2+3
LDR R1,=0x64000010	@伪指令,R1=0x64000010
LDR PC,[PC,#4]		@load/store指令,PC=PC+4
MRS R1,CPSR			@程序状态寄存器操作指令,R1=CPSR
BL LOOP				@带返回的跳转指令,保存PC-4到LR,跳转到LOOP处执行
STMFD R13!,{R1-R12,lr}@块操作指令,保存R1-R12寄存器的内容到R13所指向栈的地址处
LDMFD sp!,{r1-r12,pc}^@将堆栈中的内容出栈并存储到r1-r12以及pc
  1. 简述内核编程与系统编程的区别。
    内核编程既不能访问C库也不能访问标准的C头文件。
    内核编程时必须使用GNU C。
    内核编程缺乏像用户空间那样的内存保护机制。
    内核编程时难以执行浮点数运算。
    内核给每个进程只有一个很小的定长堆栈。
    由于内核支持异步中断、抢占和SMR,因此必须时刻注意同步和并发。
    要考虑可移植性的重要性。

  2. 简述冯诺依曼架构的核心
    存储程序、顺序执行。
    计算机必须具有如下功能:
    把需要的程序和数据送至计算机中;
    必须具有长期记忆程序、数据、中间结果及最终运算结果的能力;
    能够完成各种算术、逻辑运算和数据传送等数据加工处理的能力;
    能够根据需要控制程序走向,并能根据指令控制机器的各部件协调操作;
    能够按照要求将处理结果输出给用户

  3. 描述x86、ARM指令集的特点和区别。
    x86架构采用CISC,而ARM采用RISC。
    21.ARM的架构相较于x86有哪些特点?
    相较于基于CISC的x86架构处理器,由于为了满足电脑产业发展而不断加入指令集,使得处理器日益庞大,但每个指令集用到的频率也越差越大,许多指令到后来已经相当少用,甚至是可以被新的指令所取代。而ARM架构则大幅简化架构,仅保留所需要的指令,可以让整个处理器更为简化,拥有小体积、高效能的特性。另外,ARM的架构可以做到高密度整合,由于ARM授权的弹性以及核心架构的单纯,ARM处理器架构可以很容易与其它专职的特殊核心,像GPU、多媒体译码核心、基频调制解调器、I/O控制等架构整合,透过SoC的方式,一颗小小的ARM架构应用处理器,完成近年x86架构处理器积极跨足的单芯片设计,并且通过各种不同的核心分工各司其职。

  4. 存储器包含:(cache、主存储器、辅助存储器)

  5. CPU内部包含:(运算器、控制器)。
    24.ARM的边界对齐格式有:字节,半字,字
    25.arm三级流水线把指令执行过程分割成3部分,有fetch,decode,execute.
    26.arm内核的常见系列: ARM7 系列- ARM9 系列
    27.ext2/3/4都属于linux的文件系统格式:对
    28.移植操作需要修改操作系统中与处理器相关的程序:F
    29.程序运行的资源可以是显示器,但不能是数组或者变量:错
    30.液晶显示在文本模式可以显示中文和英文:错
    31就绪只能切换到运行:对
    32.调试程序时需要停止运行才能查看变量内容:对
    33.rom,ram的特性,作用,区别
    1.构造不同:RAM指的是随机存储内存。而ROM属于只读内存,是一种固态半导体存储器。
    2.用途不同:RAM和ROM分别对应电脑的内存和硬盘设备,内存(RAM)负责应用程序的运行和数据交换,而硬盘(ROM)就是一个存储空间,存储着许多静态文件包括视频,照片,音乐,软件等。
    3.存储原理不同:ROM只能读出信息,不能写入信息,当计算机关闭电源后其中的内容仍会保存。RAM则可以对任一存储单元进行读或写操作,当计算机关闭电源后正在进程中的的信息不再保存,需要等待开机需要重新载入。

34.Qt开发的优势
1.首先就是跨平台特性。Qt支持多数主流操作系统。但MFC只用于Windows界面开发。
2.开源特性。 QT提供了源代码,方便用户学习及开发。
3.具有良好的封装机制。各个模块相互协作,易于理解。
4.丰富的API函数,提高了用户的实际开发效率。
5.支持OpenGL2D、3D图形渲染。

35.交叉编译的概念,阶段
在当前编译平台下,编译出来的程序能运行在体系结构不同的另一种目标平台上,但是编译平台本身却不能运行该程序,阶段有预处理、编译、汇编、链接

36.fiq中断响应为什么比IRQ快
1.FIQ的处理优先级比IRQ更高,甚至可以打断正在执行的IRQ;
2.FIQ模式有自己独有的寄存器,而IRQ需要和其他模式共用寄存器,在中断处理的保护/恢复现场会更快;
3.在异常向量表中,FIQ处在最末尾。在异常向量表中IRQ只能保存中断处理程序的首地址,在发生IRQ时需要一次跳转;而FIQ处在最末尾,所以可以直接将FIQ模式下的中断处理程序紧接着存放,这样在处理FIQ时就少一次跳转。

37.arm处理器的7种工作模式和作用
用户模式(USR):正常程序执行模式,不能直接切换到其他模式
系统模式(SYS):运行操作系统的特权任务,但具有可以直接切换到其他模式的特权
快中断模式(FIQ):支持高速数据传输及通道处理,FIQ异常响应时进入此模式
中断模式(IRQ):用于通用中断处理,IRQ异常响应时进入此模式
管理模式(SVC):操作系统保护模式,系统复位和软件中断响应时进入此模式(由系统调用执行软中断SWI命令触发)
中止模式(ABT):用于支持虚拟内存和/或存储器保护,在ARM7TDMI没有大用处
未定义模式(UND):支持硬件协处理器的软件仿真,未定义指令异常响应时进入此模式
除用户模式外,其余6种工作模式都属于特权模式
特权模式中除了系统模式以外的其余5种模式称为异常模式

38.aapcs规定的arm寄存器r12-r15寄存器的使用规则
寄存器R12用作过程调用中间临时寄存器,记作IP。在子程序之间的连接代码段中常常有这种使用规则。
寄存器R13用作堆栈指针,记作SP。在子程序中寄存器R13不能用作其他用途。寄存器SP在进入子程序时的值和退出子程序时的值必须相等
寄存器R14称为连接寄存器,记作LR。它用于保存子程序的返回地址。如果在子程序中保存了返回地址,寄存器R14则可以用作其他用途。
寄存器R15是程序计数器,记作PC。它不能用作其它用途。

39.编写一个hello.c驱动程序,并在驱动程序加载时显示HelloWord,卸载是显示bye
编写相应的makefile文件

#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,cruel world\n");
}
module_init(hello_init);
module_exit(hello_exit);
--------------------------
obj-m := hello.o
KDIR := /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
default:
        $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules

40.解释语句:

.global_start让 _start 符号成为可见的标识符,这样链接器就知道跳转到程序中的什么位置
-start:
	STR lr,[sp,#-4]!	
将lr寄存器也称链接寄存器r14(用于保存子程序的返回地址)的值(32)存入sp指向堆栈的地址,从sp到sp-3地址单元。感叹号是表示保存后sp的值跟着改变,及sp=sp-3
ADD R1,R0,R0:将r0+r0存入r1
ADD R2,R1,R0
ADD R3,R1,R2
STR R3,[sp,#4]!	入栈
ADD R3,R1,R1
BL g		带链接跳转
ADD sp,sp,#4		出栈
  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

<千繁/>

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值