← 返回面试学习首页 返回博客主页 → MODULE 01 / 基础能力

Module 01 / interview basics

C语言基础 /
嵌入式基础

面试中不只要会调用库函数,更要说清变量在哪里、并发为什么出错、数据怎样从 MCU 到外设。本页按“C 语言 → 通信协议”建立基础回答框架。

第一部分:C 语言与嵌入式基础

先把存储期、访问方式和并发边界讲清,外设驱动代码才有可靠的基础。

MEMORY

指针、对象与存储期

区分栈、静态存储区、只读区和堆的生命周期;明确指针指向的对象是否仍有效、是否存在越界或别名访问。

static uint8_t rx[64];
uint8_t *p = rx;

/* p 只在数组范围内移动 */
p[0] = 0x55;
  • 局部变量离开作用域后不能继续解引用。
  • 嵌入式中动态分配需考虑碎片与失败路径。
REGISTER

位操作与寄存器访问

使用掩码进行置位、清位和读改写;同时关注外设寄存器的读写语义,避免把状态位、写一清零位当普通变量处理。

#define EN (1u << 3)
REG |= EN; /* set */
REG &= ~EN; /* clear */

if (STATUS & EN) { }
  • 明确位宽、符号扩展与移位边界。
  • 读改写前确认该寄存器是否允许读取。
CONCURRENCY

volatile 与中断协作

volatile 约束编译器不要缓存或删去对对象的访问;它不自动解决原子性、顺序或互斥,需要结合临界区、原子操作和缓冲策略。

volatile uint8_t ready;

/* ISR writes, main reads */
ready = 1;
if (ready) { /* ... */ }
  • 多字节共享数据要考虑读写撕裂。
  • 从 ISR 到任务常使用队列或环形缓冲解耦。

第二部分:嵌入式基础通信

每种协议都从“连接什么线、典型芯片是什么、开发时验证什么”来理解,而不是只记名称。

UART异步 · 点对点

串口与模组交互

通过 TX/RX 的异步串行通信配置波特率、帧格式和中断/DMA 收发,适合日志输出、调试终端和模块化指令交互。

STM32F103C8T6 CH340C TXRX
典型芯片STM32F103C8T6
CH340C
重点帧格式 · 超时
环形缓冲
UART 参数练习发送 0x55 测试帧

待检查:先确认 TX/RX 交叉连接与共地。

CAN差分 · 多节点

总线报文与仲裁

通过报文 ID、滤波、接收中断和错误状态处理多节点总线通信。协议控制器与物理层收发器是不同职责。

STM32G431 TJA1051TRANSCEIVER CANHCANL
典型芯片STM32G431
TJA1051T/3
重点Filter · Error
120 Ω 终端
CAN 总线练习发送一帧报文

待检查:控制器负责协议,收发器负责 CANH/CANL 差分物理层。

I²C / IIC同步 · 多从机

传感器与 EEPROM

在 SCL/SDA 两线上完成设备寻址、寄存器读写和 ACK 应答,适合板内的低引脚数传感器与存储器连接。

STM32G071 AT24C02EEPROM SCLSDAACK
典型芯片STM32G071
AT24C02
重点Address · ACK
开漏上拉
IIC 应答练习读取一个寄存器

待检查:SCL 高电平期间 SDA 改变才表示起始或停止条件。

SPI同步 · 全双工

高速存储与显示

使用 SCK、MOSI、MISO 与 CS 进行全双工数据交换,常用于外部 Flash、显示屏和高速采样外设。

STM32G0 W25Q128SPI FLASH SCKMOSIMISO
典型芯片STM32G0
W25Q128JV
重点CPOL/CPHA · CS
DMA 连续传输
SPI 时序练习读取 Flash ID

待检查:Mode 由 CPOL 和 CPHA 共同决定,不能只看时钟频率。

Interview answer structure

用四步把底层问题回答完整

不要只说“我会”。从定义切入,说明底层原理,再落到你如何配置或排错,最后给出能验证结论的证据。

01先定义对象与边界
02说明底层机制
03讲工程配置与取舍
04给波形、日志或实验验证