嵌入式大厂面经 ARM架构常见面试题(持续更新中!)

这是一个嵌入式大厂面试题专栏,每天更新高频面试题。专栏将包含题目描述、详细解析、相关知识点扩展以及实际代码示例。内容涵盖操作系统、驱动开发、通信协议等核心领域,并结合实际项目经验进行分析。每道题目都会附带面试官可能的追问方向,帮助大家更好地准备面试!

ARM架构常见面试题详解

一、Cortex-M3和Cortex-M4的区别

1. 基本架构差异

  • Cortex-M3:基于ARMv7-M架构,主要面向中端微控制器市场
  • Cortex-M4:基于ARMv7E-M架构,是M3的增强版,增加了DSP指令和可选的FPU

2. 主要区别

架构

ARMv7-M

ARMv7E-M

DSP指令

不支持

支持

浮点运算

不支持

可选支持(FPU)

流水线

3级

3级

最高频率

约200MHz

约200MHz

SIMD指令

不支持

支持

3. 应用场景对比

  • Cortex-M3:适用于一般控制应用,如家电控制、工业控制等
  • Cortex-M4:适用于需要数字信号处理的应用,如电机控制、音频处理、传感器融合等

4. 代码示例对比

// Cortex-M4上的DSP加速示例
#include "arm_math.h"

void filter_example(void) {
    float32_t input[64], output[64], coeffs[5] = {0.1, 0.2, 0.4, 0.2, 0.1};
    arm_fir_instance_f32 filter;
    
    // 初始化FIR滤波器
    arm_fir_init_f32(&filter, 5, coeffs, state, 64);
    
    // 执行滤波
    arm_fir_f32(&filter, input, output, 64);
}

二、ARM和DSP的区别

1. 架构设计目标

  • ARM:通用处理器,注重指令执行效率和功耗控制
  • DSP:专用于数字信号处理,优化了乘-累加运算

2. 主要区别

指令集

通用指令集

专用于信号处理的指令集

硬件乘法器

一般性能

高性能,支持单周期MAC

内存架构

冯·诺依曼或哈佛

主要采用哈佛架构

地址生成

简单

复杂,支持循环缓冲和位反转寻址

流水线

一般深度

深度优化

并行处理

有限

强大,支持VLIW等

3. 应用场景对比

  • ARM:操作系统、通用控制、用户界面等
  • DSP:音频/视频处理、通信基带处理、雷达信号处理等

4. 混合架构

现代处理器常采用混合架构,如:

  • ARM Cortex-M4/M7:增加DSP指令
  • TI OMAP:集成ARM和DSP核心
  • 高通骁龙:集成ARM核心和Hexagon DSP

三、ARM的工作模式

1. ARM传统工作模式(ARMv7-A)

ARM处理器有7种工作模式:

  • 用户模式(User):普通程序执行的非特权模式
  • 系统模式(System):特权模式,使用与用户模式相同的寄存器
  • 管理模式(Supervisor):操作系统保护模式
  • 中止模式(Abort):处理内存访问违例
  • 未定义模式(Undefined):处理未定义指令异常
  • 中断模式(IRQ):处理普通中断
  • 快速中断模式(FIQ):处理高优先级中断

2. Cortex-M系列工作模式

Cortex-M简化为两种模式:

  • 线程模式(Thread):执行应用程序代码
  • 处理器模式(Handler):处理异常

3. 特权级别

  • 特权级(Privileged):可访问所有系统资源
  • 非特权级(Unprivileged):受限制的资源访问

4. 模式切换

// Cortex-M系列从特权级切换到非特权级
void switch_to_unprivileged(void) {
    // 读取CONTROL寄存器
    uint32_t control_value;
    __asm volatile ("MRS %0, CONTROL" : "=r" (control_value));
    
    // 设置CONTROL[0]为1,切换到非特权线程模式
    control_value |= 0x01;
    __asm volatile ("MSR CONTROL, %0" : : "r" (control_value));
    
    // 指令同步屏障
    __asm volatile ("ISB");
}

四、ARM的指令集

1. 主要指令集

  • ARM指令集:32位固定长度指令
  • Thumb指令集:16位压缩指令,提高代码密度
  • Thumb-2指令集:16位和32位混合指令
  • NEON指令集:SIMD(单指令多数据)指令,用于媒体处理
  • VFP指令集:浮点运算指令
  • DSP指令集:数字信号处理指令(Cortex-M4/M7)

2. 指令集特点对比

ARM

32位

性能关键代码

Thumb

16位

内存受限系统

Thumb-2

16/32位混合

现代嵌入式系统

NEON

32/64/128位

极高(并行)

多媒体处理

3. 指令集示例

; ARM指令示例
ADD R0, R1, R2      ; R0 = R1 + R2

; Thumb指令示例
ADDS r0, r1, r2     ; r0 = r1 + r2,并更新标志位

; NEON指令示例
VADD.I16 Q0, Q1, Q2 ; 8个16位整数并行相加

4. 指令集切换

; 在ARMv7-A中切换ARM和Thumb状态
BX  LR              ; 根据LR的最低位切换状态
BLX R0              ; 调用R0指向的函数并可能切换状态

五、ARM寄存器

1. 通用寄存器

  • ARM模式:16个32位通用寄存器(R0-R15)
  • Thumb模式:8个32位通用寄存器(R0-R7),有限访问R8-R15

2. 特殊用途寄存器

  • R13(SP):栈指针
  • R14(LR):链接寄存器,保存返回地址
  • :程序计数器

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

嵌入式面试八股文全集 文章被收录于专栏

这是一个全面的嵌入式面试专栏。主要内容将包括:操作系统(进程管理、内存管理、文件系统等)、嵌入式系统(启动流程、驱动开发、中断管理等)、网络通信(TCP/IP协议栈、Socket编程等)、开发工具(交叉编译、调试工具等)以及实际项目经验分享。专栏将采用理论结合实践的方式,每个知识点都会附带相关的面试真题和答案解析。

全部评论
接好运
点赞 回复 分享
发布于 04-25 21:45 黑龙江

相关推荐

07-09 14:33
已编辑
门头沟学院 机械设计/制造
我记得很清楚,是面试基恩士的销售工程师。当时基恩士销售工程师的工资传的是二十二到三十多万,且它不限制学校,本科都能报,所以我还是很心动的,专门斥巨资600块在某宝上买了身西装。基恩士面试环节是有同时面两个应试人员(面试后才知道),同时对方也是两个面试官,有一个是日本的高管(听说)。面试官发来链接,上面显示我的面试时间段是多少,我按能进入的最早的时间点进去了,只有我一个人,非常紧张的等待,大概五六分钟,又进来一个年轻帅哥,我以为严阵以待,对方没开麦,我也没开麦,我稍显局促😅,对方也不是很放得开。我犹豫要不要问“面试官”要不要提前开始,但想着还是等“面试官”开口吧,可是已经到可以开始面试的时间了,对方似乎也很紧张,一直左右扭头。我坐不住了,开麦问:可以开始面试了吗“面试官”也坐不住了:可以可以尬住几秒,我在等他让我走自我介绍之类的流程,但是他似乎也在等我开口。“要自我介绍吗”我有点顶不住开口了。对方表情有点奇异,紧张中带点慌张:好。“额我是……的大四学生”“额我来自……”两个人一前一后开口了,脑门里面轰的一声两个人全愣住,“你也是来面试的啊”两个人绷不住了,表情很微妙😅“诶哥们你刚刚说你哪个学校来着”“……哇靠那你学校很好啊怎么还报这个”两个人闲聊起来。后续很遗憾的是我们两个面试完我没过,他也没过😄。
面试尴尬现场
点赞 评论 收藏
分享
07-15 14:14
门头沟学院 Java
7.10投递7.15感谢信
投递地平线等公司10个岗位
点赞 评论 收藏
分享
评论
2
7
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务