选择题
-
哪个设备不属于常见的嵌入式系统硬件(硬盘)
-
CMP指令的作用是(比较命令)
-
BIC指令的作用是(清除指令)
-
ADD R2,R3,RSL #3的作用是 R2+(R3>>3) # RSL逻辑右移,LSL逻辑左移
-
下面哪个是有效的立即数:
- 首先把这个数用二进制表示出来,然后看这个数中1的最大间隔是多少,要看两次,一次是顺序看,一次是循环看,循环看是把首尾相连,然后首尾都要看,如果不满足要求,肯定是非法的。如果有一次小于等于八(包括这两个1)则有可能是合法的,可以进行下一步判断;这时候又分为两种情况:如果顺序看时1的最大间隔数==8,此时看看这个数最高位1的前面或者最低位1的后面是否有偶数个0,只要满足一种,则这个数是合法的;如果最大间隔数<=8,此时可以循环看,两端得到的间隔个数是否有一个为偶数,如果有一个为偶数,则合法
- 0x102 非 000100000010
- 0xff04 非 1111111100000100
- 0xff000000 11111111000000000000000000000000
- 0xff1 非 111111110001
-
以下关于信号和槽的描述正确的是 (C)
- A 使用SOCKET网络通信
- B 用于UDP网络通信
- C 用于对象间通信
- D 用于串口通信
-
下面哪条指令会影响流水线的执行效率(C)
- A MOV
- B ADD
- C BL 带链接程序跳转,也就是要带返回地址。
- D SUB
-
如果在ARM处理器中,软件关闭快速中断,应该选用下面哪个指令(B)
- A CPSR寄存器中设置I位为1
- B CPSR寄存器中设置F位为1
- C CPSR寄存器中设置N位为1
- D CPSR寄存器中设置Z为为1
-
ARM系统中会使用一个寄存器作为堆栈指针使用,简称SP寄存器,在6410芯片中一般使用以下哪个寄存器作为SP寄存器使用 (R13)
-
存储一个32位数0x12345678到2000H~2003H四个字节单元中,若以大端模式存储,则2000H存储单元的内容为0x78。
-
在在嵌入式ARM处理器中,下面哪种中断方式优先级最高(Reset也就是复位)
-
当软件指令中执行BL XXX 后,请问会影响到哪个寄存器(C)
- A R12
- B R13
- C R14
- D R15
-
S3C6410 I/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 -
嵌入式系统应用软件一般在宿主机上开发, 在目标机上运行, 因此需要一个( 交叉编译) 环境。
-
无符号二进制数左移一位,则数值增大一倍
填空题
- ARM系列微处理器支持的边界对齐方式有:___字节对齐,___半字对齐和___字对齐
- ARM的三级流水线把指令执行过程分割为三部分,分别是___取值,___译码和___执行
- ARM内核就是CPU里面实现运算的核心,请举出两个常见的系列:___ARM7系列(9,9E,10E,11),___Cortex系列
- ARM系统中包括两种指令集,分别是 ARM指令集和Thumb指令集
判断题
- 所有的电子设备均属于嵌入式设备 — 错
- ext4属于Linux的文件系统格式 —对
- 嵌入式Linux操作系统属于免费的操作系统 —对
- 移植操作系统时需要修改操作系统中与处理器直接相关的程序 —错
- 嵌入式开发需要专门的软件和硬件设备 —对
- 程序运行过程中的资源可以是显示器/键盘,但不可以是一个数组或者变量 —错
- 液晶工作在文本模式下的时,既可以显示英文字符也可以显示汉字 —错
- 处于就绪状态的进程只能切换到运行状态 —对(没找到确切答案)
- 调试程序时,需要停止程序运行后才可查看变量内容 —对
- 操作系统移植成功后即可使用文件系统 —错
简答题
-
简述RAM以及ROM的特性及作用有什么区别
-
- RAM随机存取,断电丢失
- ROM随机读出,一次写入,断电保护
-
-
什么是交叉编译?一般交叉编译包括几个阶段?
- 简单地说,就是在一个平台上生成另一个平台上的可执行代码
- 一个计算机环境中运行的编译环境,能编译出另外一种环境下运行的代码,我们就说这种编译器支持交叉编译。这个编译过程就叫交叉编译。
- 配置环境变量->配置参数->make->make install
-
FIQ中断响应为什么比IRQ中断响应快。
- FIQ 快速中断
- IRQ 外部中断
- 原因
- 优先级高;可以打断
- 独有的寄存器->方便恢复现场
- 异常向量表排最后,可以直接跳转
-
ARM处理器共有七种工作模式,它们分别的名称分别是,并简述各种模式的作用
- 用户模式User 正常模式,大部分运行在这种工作模式
- 快速中断模式FIQ 发生高优先级的中断
- 外部中断模式IRQ 发生低优先级的中断
- 特权模式SVC(Supervisor) 当复位或者软中断指令发生
- 数据访问终止模式ABT(Abort) 存取异常时发生
- 未定义模式UND(Undef) 执行未定义的指令时发生
- 系统模式SYS(System) 特权模式,使用和USER相同的指令集
-
简述AAPCS中规定的ARM寄存器的R12-R15寄存器使用规则是什么?
- AAPCS Procedure Call Standard for the ARM Architecture
- R12 别名IP,程序调用过程中备份寄存器,中间寄存器。调用过程中的临时寄存器
- R13 别名SP,栈指针
- R14 别名LR,链接寄存器.它用于保存子程序的返回地址
- R15 别名PC,程序计数器.
编程题
-
开发一个编写hello.c驱动程序,并且在驱动程序被加载时显示Hello World,在卸载的时候显示Bye!Bye!
#include <linux/init.h> #include <linux/module.h> #include <linux/kernel.h> static int __init hello_init(void) { printk(KERN_ALERT "Hello, world\n"); return 0; } static void __exit hello_exit(void) { printk(KERN_ALERT "Goodbye, cruel world\n"); } MODULE_LICENSE("Dual BSD/GPL"); module_init(hello_init); module_exit(hello_exit);
-
编写与上一个驱动程序相对应的MAKEFILE文件
在讲述这个Makefile之前,还是让我们先来粗略地看一看Makefile的规则。 target... : prerequisites ... command ... ... ------------------------------------------------------------------------------- target也就是一个目标文件,可以是Object File,也可以是执行文件。还可以是一个标签(Label),对于标签这种特性,在后续的“伪目标”章节中会有叙述。 prerequisites就是,要生成那个target所需要的文件或是目标。 command也就是make需要执行的命令。(任意的Shell命令)
objs := hello.o edit:$(objs) cc -o edit $(objs) hello.o:main KERNELDIR := /usr/src/kernel PWD:$(shell pwd) all:make -c $(KERNELDIR) -u $(PWD)modules clean:make -c $(KERNELDIR) -u $(PWD)clean
objs := hello.o
KERNELDIR := /usr/src/kernel
PWD:$(shell pwd)
default:
make -c $(KERNELDIR) -u $(PWD)modules
clean:
make -c $(KERNELDIR) -u $(PWD)clean
https://wenku.baidu.com/view/70bc38640540be1e650e52ea551810a6f424c872.html
https://wenku.baidu.com/view/ff30c061b80d4a7302768e9951e79b8969026824.html
https://www.vivatakethat.com/2016/12/19/%E8%80%83%E8%AF%951%E2%80%94%E2%80%94%E5%B5%8C%E5%85%A5%E5%BC%8F%E7%B3%BB%E7%BB%9F%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91%E5%AE%9E%E8%B7%B5/
https://wenku.baidu.com/view/4f00566ff5335a8102d2203d.html
http://www.doczj.com/doc/e09b8bf21711cc7930b7161d-2.html
https://wenku.baidu.com/view/8dde57cb27c52cc58bd63186bceb19e8b9f6ec17.html
# U+
https://blog.csdn.net/zqixiao_09/article/details/50772770
1. ARM 指令集是 ( )位宽,Thumb 指令集是 ( )位宽的。
2. ARM的Cortex-A处理器总共 ( )个寄存器,System模式下使用 ( )个寄存器。
3. 在用ARM汇编编程是,其寄存器有多个别名,通常PC是指 ( ),LR 是指 ( ),SP是指 ( )。
4. 下面属于ARM 子程序调用指令的是 ( )
5. ARM中可以访问状态寄存器的指令是 ( ),能够访问内存的指令是 ( )
//Move to Register from Special register.MRS
//Load Register LDR
1. ARM处理器中优先级别最高的异常为( )
2. 下列条件码中表示不相等的是( )
3. ARM7是( )级流水线,ARM9是( )级流水线。
4. 在串行异步通讯中,发送端串口的TxD要和接收端串口的( )相连接。
1. 用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是带进位的减法指令
-
简述ARM发生异常时,ARM核心会自动做哪些事情?从异常返回时,我们要做哪些事情?
CPSR:Current Program Status Register 程序状态寄存器 SPSR:Saved Program Status Register 程序状态保存寄存器 当产生异常的时候 ,ARM core: 拷贝CPSR到SPSR中 设置适当的CPSR位 改变处理器状态进入ARM状态 改变处理器模式进入相应的异常模式 如果必要的话,设置中断禁止位设置相应的中断 保存返回地址到LR 设置PC为相应的异常向量 从异常返回的时候: 从SPSR中恢复CPSR 从LR中恢复PC 记忆版本: 都发生在ARM 态下 发生异常,在ARM core中: 保存状态寄存器,设置新的状态寄存器,改变处理器状态,改变处理器模式,保存等会儿要返回的地址,设置PC 返回: 恢复CPSR 恢复PC 当发生异常的时候,会在ARM核心态下发生: 首先将CPSR保存到SPSR中 然后设置适当的CPSR 设置处理器的状态为ARM态 设置处理器的模式为发生的异常模式 禁止中断 保存返回地址到LR,也就是R14 设置PC为响应的异常向量 从异常返回: 1.从SPSR中恢复CPSR 2.从LR中恢复PC
-
用简单语言描述一下串口的通信协议?并说明每位的作用是什么?
# 串口通信就是指串口按位发送和接收字节 # 串口通信协议是一组规范,规定了数据包的内容,能让双方正常收发数据 # 数据包的内容包括起始位/主体数据/校验位/停止位 # 双方需要有共同的波特率,波特率就是双方约定的发送的速率 # 第一位为起始位,表示包的开始 # 然后是5或者7或者8位的数据位 # 然后是表示数据校验的校验位 # 最后一位是停止位,表示包的结束 #起始位 数据包的开始 #数据位 5/7/8位的数据主体 #校验位 数据校验包的正确性 #停止位 数据包的结束
-
计算机的架构主要有哪两种,区别是什么?
计算机的架构主要有冯`诺伊曼结构和哈佛结构 二者都是是存储程序,依次执行,并且基础组成部分可以大概分为五种:输入设备/输出设备/存储器/运算器/控制器,但是也有不同。 冯诺伊曼是将程序指令存储器和数据存储器合并到一起,称为存储器; 而哈佛结构则是指令存储和数据存储分开的存储器结构。这意味着对数据和指令的存取可以同时进行,并且可以使用不同的数据宽度。
-
描述CPU的运行原理。
以冯诺伊曼架构介绍: CPU就是从内存中取出指令,按指令的操作码的规定来决定对数据进行什么处理,从指令的操作数地址取出数据地址再从内存中找到数据,依次执行。 1.取指令 CPU控制器按照PC内容从内存中取到一套指令并且放入指令寄存器 2.指令译码 指令寄存器中指令译码,决定操作和操作数 3.执行指令 取操作数 执行运算 4.指令计数 修改PC,返回步骤1
-
完成一个最简单的Linux 内核模块程序设计。附件提供代码和dmesg输出截图。
-
先将R1中的低16位传送给R2的高16位,再将R2中的高8位数据传送到R3中的低8位中。
MOV R1, #0xffff #就是给R1赋值,为了方便观察
MOV R2, R1, LSL #0x10;
MOV R3, R2, LSR #0x18;
NOP
END
https://blog.csdn.net/starshinning975/article/details/48603803
LSL逻辑左移,空出的位用0填充。
LSR 逻辑右移,空出的位用0填充。
-
解释下面每条指令的作用。 MOV R1,PC #转移指令,将PC值赋值给R1,R1=PC ADD R1,R2,#3 #加法指令,R1=R2+3 LDR R1,=0x56000010 #访存指令,将地址xxx的内容读入寄存器R1 LDR PC,[PC, #4] #访存指令,PC = PC+4 MRS R1,CPSR #读取状态寄存器,CPSR->R1 BL LOOP #跳转指令,保存当前PC当LR,然后跳转到LOOP执行 STMFD R13!,{R1-R12,lr} #块操作指令,保存R1~R12寄存器的内容以及LR中的内容,到R13所指向的栈的地址处 LDMFD sp!,{R1-R12,pc}^ ##块操作指令,将堆栈中的内容出栈并且存储到R1~R12以及PC出
-
简述内核编程与系统编程的区别。
内核编程难以执行浮点数运算,系统编程则支持浮点数运算 内核编程给每个进程一个很小的定长的堆栈,而系统编程则堆栈 内核编程缺乏内存保护机制 内核编程必须使用GNU C 内核编程不能访问C库,也不能访问标准C头文件 内核编程对可移植性支持不够
-
简述冯诺依曼架构的核心
1. 采用二进制逻辑 2. 存储程序,依次执行 3. 五大部分组成
-
GPIO有哪些模式。
输入模式 浮空输入 上拉输入 下拉输入 模拟输入 输出模式 开漏输出 推挽输出 复用开漏 复用推挽
-
描述x86、ARM指令集的特点和区别。
ARM: 使用了RISC 支持ARM/Thumb双指令集 寄存器很多,数据操作都在寄存器中完成 指令长度固定 一定流水线处理 Load store访存指令 x86: 使用了CISC 使用了较少的寄存器 寻址范围小 指令长度不固定 可以不实现流水线处理 指令复杂,访存指令也多
-
存储器包含:( cache )、( 主存 )、( 辅存 )
-
CPU内部包含:( )、( )。