专栏名称: 嵌入式微处理器
关注这个时代最火的嵌入式微处理器,你想知道的都在这里。
目录
相关文章推荐
环球人物  ·  萌翻亚洲的她,能否打破“长残魔咒”? ·  22 小时前  
新北方  ·  都“八九”了,为啥还是这么冷? ·  昨天  
新北方  ·  36岁女子直播一夜后猝死,留下一儿一女 ·  2 天前  
新北方  ·  骇人!手机深夜竟自动下单 ·  2 天前  
51好读  ›  专栏  ›  嵌入式微处理器

如何在多任务环境中使用看门狗?

嵌入式微处理器  · 公众号  ·  · 2024-07-29 10:00

正文


看门狗是一种硬件单元,通常集成在微控制器上,其主要目的是执行错误处理(通常是硬件复位),将系统安全挂起,不以错误方式执行。


看门狗的主要组件是一个计数器,初始化时被配置为某个特定值,随后计数到零。软件必须经常复位该计数器,以确保其计数值不会到零。如果计数到零,将假定系统出现故障,通常会复位CPU。这意味着看门狗作为最后的保护手段,只有在其他保护措施都失败的情况下才会采取这种选择。


如何喂狗?

正确使用看门狗定时器并不像重新启动计数器那么简单(这个过程通常被称为“喂”或“踢”看门狗)。在使用看门狗的系统中,开发人员必须仔细选择看门狗的超时周期,以便看门狗可以在故障系统执行任何恶意操作之前进行干预。


在没有使用RTOS的简单应用程序中,开发人员通常会从主循环中喂狗。这种方法只需要配置一个适当的初始计数器值,该值超过主循环最坏执行时间一个计时器周期即可。虽然有些系统需要立即复位,但其他系统只需要确保它们不会无限期挂起——该方法肯定能完成工作,这是一种相当健壮的方法。

在多任务(RTOS)环境中使用看门狗

在复杂的多任务系统中,线程可能会由于各种原因挂起。有些线程可以长时间不运行,比如等待网络通信的线程。简单的方式是定期喂狗,同时确保每个不同的进程都处于良好状态,成为这些系统开发人员面临的主要挑战,例如需要关注:


• 操作系统运行是否正常

• 高优先级任务是否过度占用CPU资源,导致低优先级任务无法运行

• 是否会发生死锁,抑制一个或多个任务执行

• 任务例程是否完全正确地执行


开发人员还需要确保对源代码执行的任何修改,无论是专门的监视任务还是对被监视任务的特定修改,都必须很小,并且针对效率优化,以将侵入性保持在最低限度。


出于这个原因,先进的RTOS,如SEGGER的embOS,提供全面的看门狗解决方案,以简化看门狗处理,从而减少在开发时间。


这些解决方案应用的一般原则在不同的RTOS中可能会有所不同。然而,SEGGER工程师认为通用性和易用性非常重要,同时将内存使用和执行时间的占用保持在最低限度,因此需要一套全面的API函数集来支持这两种功能:


• 将任务、定时器以及ISR单独注册到底层的embOS看门狗模块

• 从期望的上下文环境中灵活的测试预期的看门狗条件的可能性


最终的实现只包含5个API函数,但是功能足够强大,可以满足任何预期目的。


使用这些API函数,任务只需向embOS看门狗模块注册,并单独配置其超时周期。然后,任务可以通过调用embOS API函数周期性地发出正确执行的信号。由一个单独的embOS API调用检查,是否所有被监视的任务都在指定的超时时间内发出了正确执行的信号,该调用可以从指定的看门狗任务中执行,或者从OS_Idle()中执行,还可以从OS定时器中断服务例程或其他ISR中执行。


用户只需要提供和注册两个函数:一个函数执行与硬件相关的喂狗,另一个函数指定在看门狗计数到零时的动作。例如,将日志文件存储到非易失性存储器中,在执行硬件复位或采取其他操作之前获取系统状态的进一步信息。


当开始设计和开发带有看门狗的应用时,需尽早决定打算如何使用它,并考虑可用的工具,这些工具将帮助您更快地实现它。

总之,embOS是一种抢占式的RTOS,可用于所有流行的内核、编译器和开发工具,感兴趣的小伙伴可以试一试。


END

来源:麦克泰技术

版权归原作者所有,如有侵权,请联系删除






请到「今天看啥」查看全文