嵌入式题目

选择题

  1. 以下哪个设备不属于常见的嵌入式系统硬件(硬盘)

  2. CMP指令的作用是(比较命令)

  3. BIC指令的作用是清除指令

  4. ADD R2,R3,RSL #3的作用是 R2+(R3>>3) # RSL逻辑右移,LSL逻辑左移

  5. 下面哪个是有效的立即数:

    1. 首先把这个数用二进制表示出来,然后看这个数中1的最大间隔是多少,要看两次,一次是顺序看,一次是循环看,循环看是把首尾相连,然后首尾都要看,如果不满足要求,肯定是非法的。如果有一次小于等于八(包括这两个1)则有可能是合法的,可以进行下一步判断;这时候又分为两种情况:如果顺序看时1的最大间隔数==8,此时看看这个数最高位1的前面或者最低位1的后面是否有偶数个0,只要满足一种,则这个数是合法的;如果最大间隔数<=8,此时可以循环看,两端得到的间隔个数是否有一个为偶数,如果有一个为偶数,则合法
    2. 0x102 非 000100000010
    3. 0xff04 非 1111111100000100
    4. 0xff000000 11111111000000000000000000000000
    5. 0xff1 非 111111110001
  6. 以下关于信号和槽的描述正确的是 C,用于对象间通信

    1. A 使用SOCKET网络通信
    2. B 用于UDP网络通信
    3. C 用于对象间通信
    4. D 用于串口通信
  7. img

  8. 下面哪条指令会影响流水线的执行效率(C)

    1. A MOV
    2. B ADD
    3. C BL 带链接程序跳转,也就是要带返回地址。
    4. D SUB
  9. 如果在ARM处理器中,软件关闭快速中断,应该选用下面哪个指令(B)

    1. A CPSR寄存器中设置I位为1
    2. B CPSR寄存器中设置F位为1
    3. C CPSR寄存器中设置N位为1
    4. D CPSR寄存器中设置Z为为1
  10. ARM系统中会使用一个寄存器作为堆栈指针使用,简称SP寄存器,在6410芯片中一般使用以下哪个寄存器作为SP寄存器使用 (R13)

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

  12. 在在嵌入式ARM处理器中,下面哪种中断方式优先级最高(Reset也就是复位)

  13. 当软件指令中执行BL XXX 后,请问会影响到哪个寄存器(C)

    1. A R12
    2. B R13
    3. C R14
    4. D R15
  14. S3C6410 I/O口的控制寄存器是(D)

    1. A 端口控制寄存器
    2. B 端口数据寄存器
    3. 外部中断控制寄存器
    4. 以上都不是
  15. 下面哪条指令不属于ARM的伪操作(.nop)

  16. SUB R0,R1,#6属于 立即 寻址方式

    1. 链接: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

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

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

  20. 无符号二进制数左移一位,则数值增大一倍

填空题

  1. ARM系列微处理器支持的边界对齐方式有:___字节对齐,___半字对齐和___字对齐
  2. ARM的三级流水线把指令执行过程分割为三部分,分别是___取值,___译码和___执行
  3. ARM内核就是CPU里面实现运算的核心,请举出两个常见的系列:___ARM7系列(9,9E,10E,11),___Cortex系列
  4. ARM系统中包括两种指令集,分别是 ARM指令集和Thumb指令集

判断题

  1. 所有的电子设备均属于嵌入式设备 — 错
  2. ext4属于Linux的文件系统格式 —对
  3. 嵌入式Linux操作系统属于免费的操作系统 —对
  4. 移植操作系统时需要修改操作系统中与处理器直接相关的程序 —错
  5. 嵌入式开发需要专门的软件和硬件设备 —对
  6. 程序运行过程中的资源可以是显示器/键盘,但不可以是一个数组或者变量 —错
  7. 液晶工作在文本模式下的时,既可以显示英文字符也可以显示汉字 —错
  8. 处于就绪状态的进程只能切换到运行状态 —对(没找到确切答案)
  9. 调试程序时,需要停止程序运行后才可查看变量内容 —对
  10. 操作系统移植成功后即可使用文件系统 —错

简答题

  1. 简述RAM以及ROM的特性及作用有什么区别

      1. RAM随机存取,断电丢失
      2. ROM随机读出,一次写入,断电保护
  2. 什么是交叉编译?一般交叉编译包括几个阶段?

    1. 简单地说,就是在一个平台上生成另一个平台上的可执行代码
    2. 一个计算机环境中运行的编译环境,能编译出另外一种环境下运行的代码,我们就说这种编译器支持交叉编译。这个编译过程就叫交叉编译。
    3. 配置环境变量->配置参数->make->make install
  3. FIQ中断响应为什么比IRQ中断响应快。

    1. FIQ 快速中断
    2. IRQ 外部中断
    3. 原因
      1. 优先级高;可以打断
      2. 独有的寄存器->方便恢复现场
      3. 异常向量表排最后,可以直接跳转
  4. ARM处理器共有七种工作模式,它们分别的名称分别是,并简述各种模式的作用

    1. 用户模式User 正常模式,大部分运行在这种工作模式
    2. 快速中断模式FIQ 发生高优先级的中断
    3. 外部中断模式IRQ 发生低优先级的中断
    4. 特权模式SVC(Supervisor) 当复位或者软中断指令发生
    5. 数据访问终止模式ABT(Abort) 存取异常时发生
    6. 未定义模式UND(Undef) 执行未定义的指令时发生
    7. 系统模式SYS(System) 特权模式,使用和USER相同的指令集
  5. 简述AAPCS中规定的ARM寄存器的R12-R15寄存器使用规则是什么?

    1. AAPCS Procedure Call Standard for the ARM Architecture
    2. R12 别名IP,程序调用过程中备份寄存器,中间寄存器。调用过程中的临时寄存器
    3. R13 别名SP,栈指针
    4. R14 别名LR,链接寄存器.它用于保存子程序的返回地址
    5. R15 别名PC,程序计数器.

编程题

  1. 开发一个编写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);

    
    
    
    
  2. 编写与上一个驱动程序相对应的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

https://blog.csdn.net/zqixiao_09/article/details/50772770

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)相连接。

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是带进位的减法指令
  1. 简述ARM发生异常时,ARM核心会自动做哪些事情?从异常返回时,我们要做哪些事情?

    CPSR:Current Program Status Register	程序状态寄存器
    SPSR:Saved Program Status Register		程序状态保存寄存器
    
    当产生异常的时候 ,ARM core:
    拷贝CPSR到SPSR中
    设置适当的CPSR位
    改变处理器状态进入ARM状态
    改变处理器模式进入相应的异常模式
    如果必要的话,设置中断禁止位设置相应的中断
    保存返回地址到LR
    设置PC为相应的异常向量
    
    从异常返回的时候:
    从SPSR中恢复CPSR
    从LR中恢复PC
    
    
  2. 用简单语言描述一下串口的通信协议?并说明每位的作用是什么?

    # 串口通信就是指串口按位发送和接收字节
    # 串口通信协议是一组规范,规定了数据包的内容,能让双方正常收发数据
    # 数据包的内容包括起始位/主体数据/校验位/停止位
    # 双方需要有共同的波特率,波特率就是双方约定的发送的速率
    
    # 第一位为起始位,表示包的开始
    # 然后是5或者7或者8位的数据位
    # 然后是表示数据校验的校验位
    # 最后一位是停止位,表示包的结束
    
    #起始位	数据包的开始
    #数据位	5/7/8位的数据主体
    #校验位	数据校验包的正确性
    #停止位	数据包的结束
    
  3. 计算机的架构主要有哪两种,区别是什么?

    计算机的架构主要有冯`诺伊曼结构和哈佛结构
    二者都是是存储程序,依次执行,并且基础组成部分可以大概分为五种:输入设备/输出设备/存储器/运算器/控制器,但是也有不同。
    冯诺伊曼是将程序指令存储器和数据存储器合并到一起,称为存储器;
    而哈佛结构则是指令存储和数据存储分开的存储器结构。这意味着对数据和指令的存取可以同时进行,并且可以使用不同的数据宽度。
    
  4. 描述CPU的运行原理。

    以冯诺伊曼架构介绍:
    CPU就是从内存中取出指令,按指令的操作码的规定来决定对数据进行什么处理,从指令的操作数地址取出数据地址再从内存中找到数据,依次执行。
    1.取指令
    CPU控制器按照PC内容从内存中取到一套指令并且放入指令寄存器
    2.指令译码
    指令寄存器中指令译码,决定操作和操作数
    3.执行指令
    取操作数
    执行运算
    4.指令计数
    修改PC,返回步骤1

  5. 先将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填充。
  1. 解释下面每条指令的作用。
    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出
    
  2. 简述内核编程与系统编程的区别。

    内核编程难以执行浮点数运算,系统编程则支持浮点数运算
    内核编程给每个进程一个很小的定长的堆栈,而系统编程则堆栈
    内核编程缺乏内存保护机制
    内核编程必须使用GNU C
    内核编程不能访问C库,也不能访问标准C头文件
    内核编程对可移植性支持不够
    
  3. 简述冯诺依曼架构的核心

    1. 采用二进制逻辑
    2. 存储程序,依次执行
    3. 五大部分组成
    
  4. GPIO有哪些模式。

  5. 输入模式
    浮空输入
    上拉输入
    下拉输入
    模拟输入
    输出模式
    开漏输出
    推挽输出
    复用开漏
    复用推挽

    
    
    
  6. 描述x86、ARM指令集的特点和区别。

    ARM:
    使用了RISC
    支持ARM/Thumb双指令集
    寄存器很多,数据操作都在寄存器中完成
    指令长度固定
    一定流水线处理
    Load store访存指令
    x86:
    使用了CISC
    使用了较少的寄存器
    寻址范围小
    指令长度不固定
    可以不实现流水线处理
    指令复杂,访存指令也多

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

  8. CPU内部包含:( 运算器 )、( 控制器 )。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

<千繁/>

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

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

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

打赏作者

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

抵扣说明:

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

余额充值