嵌入式测试学习第 34 天:常见bug类型:死机、重启、数据错乱、通信丢包

常见嵌入式bug类型:死机、重启、数据错乱、通信丢包


一、死机(系统卡死、无响应)

现象 :设备电源灯亮,但程序不动、按键无反应、串口停止打印、屏幕定格。

本质:程序跑飞、死循环、总线挂死、硬件异常(晶振/电源)。

典型原因

  1. 晶振虚焊/不起振:运行几分钟随机死机,无规律。
  2. 电源纹波过大:高负载时电压跌落,MCU 跑飞。
  3. I2C/SPI 总线挂死:某个外设卡死总线,程序死等。
  4. 代码死循环/栈溢出 :比如 while(1);、递归过深。

排查方法

  • 看串口日志:卡死在哪一行 → 定位外设/函数。
  • 示波器测晶振波形、电源纹波。
  • 断开外设:逐个拔传感器,看是否恢复。

二、重启(自动复位、反复启动)

现象 :设备突然自动重启、循环启动、日志反复从头开始。

本质:硬件复位触发、看门狗复位、电源掉电、BOD(电压监测)复位。

典型原因

  1. 复位电路不稳定:复位按键漏电、RC 电容坏、NRST 虚焊。
  2. 电源带载能力差:一接电机/屏幕就掉电重启。
  3. 看门狗喂狗不及时:代码耗时太长,没按时喂狗。
  4. 高温/低温导致 LDO 输出不稳

排查方法

  • 看日志:是否有 "Watchdog Reset" 字样。
  • 测电源:满载时电压是否掉到 3.0V 以下。
  • 屏蔽看门狗:临时关闭,看是否还重启。

三、数据错乱(数据乱码、错位、值不对)

现象 :存进去的数据读出来不对、显示乱码、传感器数据跳变、Flash 读出乱码。

本质:字节序错误、缓冲区溢出、未初始化、Flash 擦写错误、时序不匹配。

典型原因

  1. Flash 残留脏数据:升级时没擦干净旧代码,导致数据错乱。
  2. 缓冲区溢出:数组越界,覆盖了其他变量。
  3. 大小端不匹配:比如网络数据是大端,本地是小端。
  4. 串口波特率/校验位不匹配:导致乱码。

排查方法

  • 对比写入/读出的十六进制数据。
  • 检查数组边界、指针是否越界。
  • 核对通信双方波特率、数据位、校验位。

四、通信丢包(UDP/TCP/串口/CAN 丢数据)

现象 :发送 100 个包,只收到 90 个;数据断断续续、时通时断。

本质:缓冲区满、中断优先级不对、时序错误、干扰、硬件接触不良。

典型原因

  1. 串口缓冲区太小:高速发送时溢出丢包。
  2. 中断优先级配置错误:高优先级中断打断通信,导致丢包。
  3. 网线/接口接触不良:网口弹片氧化、虚焊。
  4. 电源干扰:纹波大,导致信号畸变。
  5. UDP 无重传:网络波动直接丢包。

排查方法

  • 抓包:用 Wireshark/串口工具看收发是否一致。
  • 示波器看波形:是否有毛刺、畸变。
  • 增大缓冲区、调整中断优先级。

相关推荐
M78佐菲5 小时前
Linux学习笔记:TCP协议
linux·笔记·学习·tcp/ip·算法
俊基科技6 小时前
A-59U工业级多模语音处理模块在矿山矿井通信与呼叫报警系统中的应用
嵌入式硬件·嵌入式开发·硬件开发·ai降噪·回音消除·拾音降噪
yi.Ist6 小时前
数据定义语言-DDL操作
数据库·学习·mysql·oracle·大海豚
周周记笔记8 小时前
GD32F450xx MCU Datasheet 解读:硬件测试工程师的测试方法论
单片机·嵌入式硬件
潘潘的嵌入式日记9 小时前
I²C 从机接收总被覆盖?双缓冲要在 STOP 时交接
c语言·开发语言·单片机
骐骥110 小时前
学习:javaScriptProxy和registerJavaScriptProxy有什么区别,能注册多少个对象
学习·鸿蒙
Huathy-雨落江南,浮生若梦10 小时前
Caddy 学习笔记 - 反向代理与 IP 封禁
笔记·学习·tcp/ip
AOI小白新手上路11 小时前
江科协51单片机16-1 AD/DA ADC 三通道综合显示(LCD1602 版)改造说明
单片机·嵌入式硬件·51单片机
HUI-47412 小时前
EG1135|SSOP‑16 同步整流降压控制器,大功率外置 MOS 降压优选
单片机·嵌入式硬件·硬件工程
单片机仿真设计12 小时前
【proteus仿真】基于 STM32 单片机恒温箱控制系统设计(仿真图+程序)
stm32·单片机·嵌入式硬件·proteus·毕设