请注意,为公共帐户加注星标,不要错过令人兴奋的内容。资料来源:Segger编辑:StrongHuang 1994年1月25日,Clementine发射升空。它是美国国家航空航天局(NASA)的卫星。在长时间暴露于太空的情况下测试传感器和航天器组件。由于缺少几个看门狗代码,它的任务于1994年5月7日丢失。当克莱门汀离开月球轨道并前往下一个目标近地小行星Geographos时,他已经连续两个月对月球进行了测绘。但是,很快,克莱门汀的一台机载计算机出现故障,有效地阻止了NASA操作该航天器,并导致其中一台推进器向发射器“射击”。不可控制地。美国宇航局花了20分钟试图使该系统恢复活力,但无济于事。硬件重置命令最终使Clementine重新上线,但是为时已晚,并且用尽了燃料,因此必须取消继续执行任务。随后,负责Clementine软件的开发团队希望他们使用硬件看门狗定时器,因为事实证明,他们实施的软件没有足够的超时时间。 1.看门狗如何提供帮助?看门狗是一种硬件,可以直接集成到微控制器(MCU)中或从外部连接到微控制器。它的主要目的是在可以安全地假定系统已挂起或执行不正确时执行错误处理(通常是硬件重置)。看门狗的主要组件是一个计数器,该计数器最初配置为某个值,然后递减为零。软件必须经常将该计数器重置为其初始值,以确保其永远不会达到零。否则,可能会导致故障,并且通常会复位CPU。这表明看门狗是万不得已的方法,只有在所有其他方法都失败之后,就像Clementine一样。 2.如何给看门狗看门狗定时器的正确使用并不像重启计数器那样简单(该过程通常被称为“给”或“踢”看门狗)。在系统中运行看门狗定时器的情况下,开发人员必须仔细选择看门狗的超时时间,以便看门狗可以在故障系统执行任何不可逆的恶意操作之前进行干预。在简单的应用程序中,尤其是在不使用RTOS的情况下,开发人员通常从主循环中提供看门狗。此方法只需要配置一个适当的初始计数器值,就像选择一个比整个主循环的最坏情况执行时间超出至少一个计时器周期的值那样简单。这通常是一种相当健壮的方法:虽然某些系统需要立即恢复,但其他系统仅需要确保它们无限期地挂起即可,这肯定可以完成工作。 3.在多任务(RTOS)环境中在更复杂的系统中,尤其是在多任务系统中,由于各种原因,线程可能会挂起。一些线程不能长时间运行,例如通信线程正在等待接收数据。定期提供一种干净的看门狗方法,同时仍然确保每个不同的进程都处于良好状态,已成为这些系统开发人员的主要挑战,例如,他们需要注意以下方面:操作系统是否正常运行。高优先级任务是否耗尽了CPU,从而完全阻止了低优先级任务的运行。是否存在阻止执行一个或多个任务的死锁。任务例程是否正确,完整地执行。开发人员还需要确保对源代码的任何修改(无论是专用的看门狗任务还是对受监视任务的特定修改)都必须小且针对效率进行优化以最大程度地减少干扰。第四,使用RTOS看门狗支持一些RTOS操作系统(例如SEGGER的embOS)具有自己的看门狗解决方案,从而简化了看门狗的处理并减少了在任何开发过程中所花费的时间。在RTOS中有多种实现硬件看门狗的方法,我记得以前曾与您分享过。实际上,如果您了解一些基本原理,则可以自己设计。例如:添加“关于看门狗的数量”;对于每个任务,当超过设置的时间时,请执行某些处理,否则将重置看门狗。当然,操作系统的某些看门狗功能仅需要调用API函数。例如,embOS:任务可以简单地将自身注册到embOS看门狗模块中,并且可以同时分别配置其超时时间。然后,该任务可以通过调用简单的embOS API函数来表明其正确执行。是否已在指定的超时期限内用信号通知所有受监视的任务,以表明它们已正确执行,