函数重入导致系统重启(喂狗失败)案例分析

故障现象

用按键多次进入设置菜单,会出现参数被修改的情况,是由于堆栈溢出导致,故升级代码,修改这个BUG。升级后的程序V1.32在测试中发现,密码设置为0000,多次快速进入设置菜单,会导致仪表重启

故障分析

  1. 整机测试,密码设置为0000,多次快速进入设置菜单,5分钟之内,一般都能复现重启现象。
  2. 将看门狗的跳线帽拔掉,重复上述操作,不会再出现重启现象。基本可以确定是看门狗导致了重启。
  3. 分析代码,看门狗是铁电存储器集成的,需要使用IIC方式喂狗。但是代码中在主循环和设置参数的显示任务中都调用了喂狗程序。这样的话,当在主循环里喂狗操作进行到一半时,进入设置菜单,那么就会在设置菜单中会重新喂狗,这时候就发生了重入的情况,导致喂狗失败,从而引起复位重启。

在这里插入图片描述

在这里插入图片描述

  1. 软件模拟,在喂狗程序中重新调用喂狗程序,喂狗一直处在失败状态,仪表一直复位重启。
    在这里插入图片描述

解决措施

  1. 将显示任务放到主循环运行,这样的话,就不会出现IIC看门狗喂狗重入的情况。
  2. 但是这样一来,显示任务的实时性就变差了,屏幕刷新没有之前快。特别是有大量数据需要存入到铁电时,屏幕刷新会更慢。所以还需要见IIC的读写速度提高,读频率由20k提高到333.3k,写频率由9.259k提高到178k,这样的话,可以保证屏幕显示不会卡顿,满足显示的需要
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

解决措施

使用操作系统时,我们必须对系统运行方式充分了解, 结合硬件设计资源, 避免函数重入的发生。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值