【嵌入式面试】必问的嵌入式面试题(原创)

💌 所属专栏:【嵌入式面试】
😀 作  者:兰舟比特 🐾
🚀 个人简介:热爱开源系统与嵌入式技术,专注 Linux、网络通信、编程技巧、面试总结与软件工具分享,持续输出实用干货!
💡 欢迎大家:这里是兰舟比特的技术小站,喜欢的话请点赞、收藏、评论三连击!有问题欢迎留言交流😘😘😘


在嵌入式开发岗位的面试中,通常会围绕以下几个方面来提问:基础知识、编程能力(特别是C语言)、操作系统、硬件理解、项目经验、算法与调试技巧等。下面是一些经典的嵌入式面试问题及参考答案,希望你能收获到满意的offer:


一、C语言相关问题

1. #defineconst 的区别?

  • #define 是预处理宏,在编译前替换,不带类型检查。
  • const 是常量修饰符,具有类型信息,编译时分配内存,有作用域限制。

2. volatile 关键字的作用是什么?什么情况下使用?

  • 告诉编译器该变量可能会被意外修改(如中断、DMA、多线程),不要进行优化。
  • 常用于:
    • 寄存器访问
    • 中断服务程序中的变量
    • 多线程/多进程共享变量

3. static 关键字的作用?

  • 在函数内部:静态局部变量,生命周期延长至整个程序运行期间。
  • 在文件作用域:限制变量或函数的作用域为本文件(隐藏)。
  • 对类成员(C++):属于类而非对象。

4. 指针和数组的区别?

  • 数组名是常量指针,不能自增;指针可以改变指向。
  • sizeof(array) 返回整个数组大小,sizeof(ptr) 返回指针大小。

5. 大端和小端的区别?

  • 大端(Big-endian):高位字节在前,低位字节在后(如网络字节序)。
  • 小端(Little-endian):低位字节在前,高位字节在后(如x86架构)。

二、操作系统与并发

1. 进程和线程的区别?

  • 进程:资源分配的基本单位,独立地址空间。
  • 线程:调度的基本单位,共享所属进程的资源。

2. 什么是死锁?产生的条件有哪些?

  • 死锁是指多个进程/线程因争夺资源而相互等待,导致程序无法继续执行。
  • 四个必要条件:
    1. 互斥
    2. 请求与保持
    3. 不可抢占
    4. 循环等待

3. 什么是中断?硬中断和软中断的区别?

  • 中断:CPU响应外部事件的一种机制。
  • 硬中断:由外设触发(如定时器、串口)。
  • 软中断:由软件触发(如系统调用、异常)。

4. 实时操作系统(RTOS)的特点?

  • 可预测性强,任务调度延迟确定。
  • 支持硬实时任务。
  • 内核轻量级,占用资源少。

三、硬件基础与单片机

1. 解释一下GPIO的工作原理?

  • GPIO(通用输入输出)引脚可以通过配置寄存器设置为输入或输出模式。
  • 输出高电平时驱动外部设备,低电平则接地。
  • 输入模式下可读取外部高低电平状态。

2. 看门狗定时器(WDT)的作用?

  • 防止程序跑飞或死循环,定期喂狗(reset WDT)否则系统复位。

3. SPI/I2C/UART的区别?

协议通信方式引脚数特点
SPI同步全双工4根(SCLK, MOSI, MISO, CS)速度快,支持主从结构
I2C同步半双工2根(SDA, SCL)支持多主多从,速度较慢
UART异步全双工2根(TXD, RXD)简单,点对点通信

4. ADC/DAC的作用?

  • ADC:将模拟信号转换为数字信号。
  • DAC:将数字信号转换为模拟信号。

四、项目经验与场景题

1. 描述一个你参与过的嵌入式项目?

建议结构:

  • 项目背景与目标
  • 使用的平台/芯片/工具链
  • 你的职责与贡献
  • 遇到的问题及解决方法
  • 最终成果

2. 如果串口通信收不到数据,你会怎么排查?

  • 检查波特率、数据位、停止位是否一致
  • 检查引脚连接是否正确(TX-RX交叉)
  • 是否开启接收中断或DMA
  • 使用示波器/逻辑分析仪抓信号
  • 添加打印语句或LED指示灯辅助调试

3. 如何降低嵌入式系统的功耗?

  • 使用低功耗模式(待机、休眠)
  • 减少外设使用频率
  • 使用高效的算法减少CPU负载
  • 选用低功耗MCU

五、开放性问题

1. 你如何理解“裸机”开发?

  • 不使用操作系统,直接操作硬件,适用于资源有限的系统。

2. 你熟悉哪些嵌入式开发平台?

  • STM32、ESP32、Arduino、树莓派、TI MSP430、ARM Cortex-M系列等。

3. 你常用的调试工具有哪些?

  • JTAG/SWD调试器(如ST-Link、J-Link)
  • 示波器、逻辑分析仪(如Saleae)
  • printf调试、日志系统
  • GDB调试工具

六、进阶问题(适合高级职位)

1. ARM Cortex-M内核启动流程?

  • 上电复位 -> 初始化堆栈指针 -> 跳转到Reset_Handler -> 系统初始化 -> main函数执行

2. 写一个原子操作的宏?

#define ATOMIC_BLOCK()    \
    do {                  \
        __disable_irq();  \
        // 执行关键代码 \
        __enable_irq();   \
    } while(0)

3. 写一个简单的环形缓冲区结构体和操作函数?


七、算法与数据结构(嵌入式中常用)

  • 位运算(移位、掩码)
  • 状态机设计
  • 链表、队列、栈
  • 查找与排序(简单实现)
  • CRC校验算法

版权声明:

本文为 兰舟比特 原创内容,如需转载,请注明出处及作者,禁止未经授权的引用或商用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

兰舟比特

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

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

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

打赏作者

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

抵扣说明:

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

余额充值