RTOS 优先级翻转与实时任务阻塞的通用治理
嵌入式面试真题第 11 题:RTOS 优先级翻转与实时任务阻塞的通用治理 123456flowchart LR H[高优先级实时任务\n控制 / 音频 / 通信 / 采样] -->|请求共享资源| R{共享资源} L[低优先级后台任务\n日志 / 存储 / 维护] -->|已经持有| R M[中优先级任务\nUI / 协议 / 计算] -->|持续占用 CPU| L R --> P[阻塞时间不可控\n高优先级任务错过期限] P --> S[治理目标\n有界阻塞 + 可分析 + 可降级] 问题在采用固定优先级抢占调度的 RTOS 系统中,通常同时存在硬实时或准实时任务、普通业务任务和后台维护任务。系统还会共享 SPI、I2C、Flash、文件系统、网络控制器、内存分配器、日志通道、配置数据库、图形缓冲区、硬件加速器或其他软硬件资源。 某次压力测试中,高优先级任务出现周期抖动、数据断流、控制超时、音频卡顿、通信丢包或看门狗复位。初步分析发现,高优先级任务正在等待一个由低优先级任务持有的资源;与此同...
高优化等级下共享状态可见性、内存模型与系统级同步设计
嵌入式面试真题第 10 题:高优化等级下共享状态可见性、内存模型与系统级同步设计 问题在一个带有 RTOS 的嵌入式系统中,某个共享状态在调试版本或 -O0 下工作正常,但切换到 -O2、-O3、LTO,或迁移到带数据 Cache、多核 CPU、DMA 和总线主设备的新平台后,消费者偶发看不到生产者刚刚写入的数据,或者出现“标志位已经变化,但数据体仍是旧值”“中断已经发生,任务仍在空转”“DMA 已完成,CPU 读取的缓冲区却没有更新”“单核正常,多核失效”等问题。 生产者可能来自按键扫描任务、设备驱动中断、协议接收线程、DMA、另一个 CPU 核、协处理器或外部总线主设备;消费者可能是状态机、控制任务、日志线程、UI、音视频处理线程或安全监控任务。共享对象也不一定只是一个布尔标志,它可能是一组状态位、计数器、描述符、环形缓冲区索引、消息结构体、双缓冲区、控制块或一段 DMA 共享内存。 请不要把问题简化为“加一个 volatile”。需要从 C/C++ 抽象机、编译器优化、寄存器分配、CPU 乱序执行、Store Buffer、Cache 一致性、DMA 非一致性...
非易失性存储局部失效下的通用持久化容错架构设计
嵌入式面试真题第 09 题:非易失性存储局部失效下的通用持久化容错架构设计 问题在一款需要长期运行、频繁保存配置、日志、计量数据、资源索引、模型参数、升级状态或业务文件的嵌入式设备中,底层非易失性存储可能是片内 Flash、外部 SPI NOR、原始 NAND、QSPI/OSPI Flash,也可能是带内部控制器的 eMMC、UFS、SD 卡或其他块设备。 产品在量产、老化、运输、现场升级和多年使用过程中,可能出现以下任一种异常: 某个擦除单元无法擦成全擦除态; 某个编程单元写入后读回不一致; 某页出现不可纠正 ECC; 某次写入被掉电、复位或看门狗打断,只完成了一部分; 某个元数据块长期高频更新后提前磨损; 底层控制器偶发超时、忙状态不退出或返回瞬态错误; 映射表、目录、超级块或日志头部自身损坏; 可用备用空间持续下降,最终无法完成垃圾回收或数据迁移。 如果这些故障直接透传给上层,轻则丢失单条配置或日志,重则整个分区无法挂载、固件无法启动、设备反复重启甚至永久“变砖”。 你会如何设计一套通用的持久化容错架构,使局部介质失效不会立即演变成卷级损坏,并做到: 已...
多中断源竞争下关键实时事件丢失的系统化诊断与中断架构设计
嵌入式面试真题第 08 题:多中断源竞争下关键实时事件丢失的系统化诊断与中断架构设计 问题在一个由 MCU、SoC 或实时处理器构成的嵌入式系统中,同时存在多类中断源:外部 GPIO 事件、定时器捕获、ADC/I2S/PWM 同步、DMA 半满/全满、CAN/Ethernet/USB、UART/SPI 高速数据、传感器告警、存储完成、看门狗和软件中断等。 系统在正常负载下运行稳定,但在通信突发、日志增加、Flash 擦写、协议栈高负载、任务临界区增多或多个外设同时活跃时,某个关键实时事件偶尔出现以下异常之一: 外部边沿已经产生,但软件没有记录到; 中断计数小于硬件事件计数; 中断没有真正丢失,但响应延迟超过业务截止时间; 多个事件被合并成一次 pending,导致事件次数丢失; ISR 已执行,但后续队列、缓冲区或任务处理路径丢了事件; 高频通信中断占满 CPU,关键同步、采样、控制或保护事件偶发失效; RTOS 运行后才出现问题,裸机或低负载时无法复现。 你会如何建立一套通用的系统级排查方法,区分“硬件事件未被...
电源纹波影响 ADC 电量采样的软件滤波
嵌入式面试真题第 07 题:电源纹波影响 ADC 电量采样的软件滤波 123456789101112flowchart LR A[电池/分压网络] --> B[ADC 原始采样] P[DC-DC/PWM/PA/射频负载] -->|周期纹波与瞬态压降| B V[内部 Vref/Bandgap] --> C[参考电压修正] B --> D[同步采样与过采样] D --> E[异常点剔除] E --> F[均值/中值/低通/陷波] C --> F L[负载、温度、充放电状态] --> G[负载感知补偿] F --> G G --> H[电压慢变量估计] H --> I[SOC 映射、滞回与 UI 状态机] 问题硬件工程师告诉你,当前版图的电源纹波太大,可能会影响 ADC 电池电量采样精度。作为软件工程师,在硬件已经无法改版的前提下,你能通过哪些纯软件或数字滤波手段,最大限度地剔除这部分周期性电源噪声? 除了列出滤波算法,还需要说明:如何判断噪声来...
I2C SDA 被拉低死锁后的软件恢复
嵌入式面试真题第 06 题:I2C SDA 被拉低死锁后的软件恢复 问题一款样机在产线上频繁死机,经抓取日志发现死在了一个 I2C 读取函数内的 while 等待应答 ACK 死循环里。进一步使用示波器或逻辑分析仪确认,I2C 总线的 SDA 线被外部从设备意外拉低,主机 I2C 控制器一直认为总线忙或者一直等待应答,导致后续访问全部失败。 除了给等待循环增加超时机制以外,还能通过什么软件 IO 操作序列去拯救并复位这条死锁的总线?恢复时需要如何处理 SCL、SDA、I2C 外设状态、从设备状态、线程并发和失败兜底? 回答结论:应实现 I2C Bus Recovery。核心做法是:先停止硬件 I2C 控制器并解除它对 SCL/SDA 的复用驱动,然后把 SCL、SDA 临时切换成 GPIO 开漏模式;在不推挽强拉总线的前提下释放 SDA,并手动给 SCL 输出若干个时钟脉冲,让卡在中间 bit、ACK 或 byte 状态的从设备继续推进内部状态机;当 SDA 被释放后,在 SCL 为高电平时让 SDA 从低到高,生成一个标准 STOP 条件;最后再复位 I2C 外...
高温下 SPI 读取 Sensor 偶发乱码定位
嵌入式面试真题第 5 题:高温下 SPI 读取 Sensor 偶发乱码定位 问题MCU 通过 SPI 接口以 20MHz 的速率读取外部 Sensor 数据,在室温下连续工作完全正常,但在高温(60°C)环境箱里运行半小时后,偶尔读出乱码。 这种故障同时具备四个典型特征: 室温正常,高温异常,说明故障与温度、结温、供电裕量、器件传播延迟或材料参数变化存在相关性。 运行一段时间后才出现,而不是进入 60°C 后立即出现,说明必须区分“环境温度效应”和“热浸、器件自热、LDO 温升、焊点/连接器热稳定过程、软件长期运行状态”带来的时间效应。 错误是偶发而非必现,说明问题很可能处在某个临界裕量附近,也可能来自并发、DMA、缓存一致性、时序边界或低概率噪声耦合。 表面现象是“数据乱码”,但乱码并不能直接证明 SPI 线上发生了位错误;错误也可能产生于 Sensor 内部、SPI 配置、DMA 搬运、内存生命周期、数据解析或应用层越界。 请分别从嵌入式代码层和示波器物理测量层建立一套可复现、可触发、可量化、可闭环的定位流程,并说明如何尽量减少盲目试错。 回答结论:不要从“...
资源受限设备中的低功耗短时事件识别架构
嵌入式面试真题第 04 题:资源受限设备中的低功耗短时事件识别架构 问题在一款资源受限的嵌入式产品中,业务希望通过一个低成本、低维度、低功耗传感器识别某类短时用户意图或异常事件,例如敲击外壳、碰撞、低功耗唤醒、防拆振动、佩戴交互或机械冲击。但硬件受成本、体积和功耗限制,不能增加更高维度传感器、专用 DSP 或复杂边缘 AI 芯片。 这类事件通常持续时间很短,背景干扰又很多。例如跑步、咀嚼、走路、跌落轻碰、桌面摩擦、线缆拉扯或结构共振,都可能在传感器上产生相似波形。你会如何在 MCU 上设计一套极低功耗的短时事件识别算法,使系统尽量降低误触和漏检,并把“完美屏蔽干扰”这类不可验证需求转化为可落地的工程指标? 具体到本题,目标事件可以实例化为“使用普通单轴加速度计识别双击设备外壳接听电话”。 回答结论:这类问题不能抽象成“某个传感器值超过固定阈值就触发事件”。更合理的通用设计是“低功耗粗筛 + 短窗口精采样 + 轻量信号处理 + 特征提取 + 状态机/小分类器确认 + 干扰抑制 + 业务门控 + 置信度输出”的事件识别管线。 这类问题的关键不是追求一个孤立算法,而是...
固定周期后台事件导致实时链路瞬态扰动的定位与自动化测试
嵌入式面试真题第 03 题:固定周期后台事件导致实时链路瞬态扰动的定位与自动化测试 问题 在一个长时间连续运行的实时数据流系统中,前台数据链路需要按稳定节奏完成输入、缓冲、处理和输出。测试发现,系统整体没有死机、没有重启,普通业务也能继续运行,但实时输出链路每隔一个相对固定的时间间隔就会出现一次极短暂的质量劣化,例如瞬时噪声、卡顿、丢帧、控制抖动、采样尖峰、输出断点或数据不连续。面对这种固定周期、短持续时间、低频复现的瞬态异常,你首先怀疑哪类软件模块或系统行为?又会如何设计自动化测试环境,把异常发生点与系统内部事件对齐,从而定位根因? 回答 结论:这类问题本质上不是某一个业务模块的孤立异常,而是“长时间运行的实时数据流系统中,固定周期后台事件对前台实时链路造成瞬态扰动”。排查时不应先陷入具体表现,例如音频 Pop/Click、视频丢帧、马达抖动或传感器尖峰,而应先把问题提升到系统层面:前台实时链路需要稳定、连续、低抖动地处理数据;后台周期事件在某个固定时间点触发;两者在 CPU、总线、存储、锁、内存、时钟、电源或调度资源上发生了短时间冲突,最终表现为一次很短的输出...
多源信号时间戳偏差的补偿与重同步架构
嵌入式面试真题第 02 题:多源信号时间戳偏差的补偿与重同步架构 问题在一个通用的分布式系统或嵌入式系统中,多个独立信号源会通过有线或无线链路把数据发送到同一个接收端或业务终端,例如手机、网关、主控 MCU、边缘计算节点、上位机、机器人主机、工业控制器或车载域控制器。 这些信号源可以是多个穿戴设备、传感器节点、摄像头、IMU、定位模块、工业采集节点、车载节点、控制器、音频/振动/压力/生理信号采集器,或其他需要按照时间关系组合处理的数据源。链路也不限定于无线,可以是 BLE、Wi-Fi、UWB、私有 2.4G、以太网、CAN、RS485、UART、SPI、I2C、USB、PCIe 或多级网关转发链路。 由于射频干扰、链路重传、调度抖动、时钟漂移、包乱序、短时丢包、链路拥塞、DMA/中断延迟、网关排队、低功耗唤醒延迟或多任务抢占,同一时间段产生的数据到达接收端时可能出现明显时间偏差。偏差可能达到几十毫秒级,导致业务层出现融合错误、左右偏移、梳状滤波、控制滞后、误触发、短暂卡顿、波形失真、状态误判或时序相关算法失效。 如果让你设计一套通用...







