![](/img/trans.png)
[英]How to Disable/Delay the watchDog Timer for a certain Task in an embedded system
[英]How to prevent system hang before watchdog timer task kicks in
我们正在使用基于 ARM AM1808 的嵌入式系统,带有 rtos 和文件系统。 我们使用的是C语言。 我们在应用程序代码中实现了一个看门狗定时器。 因此,只要应用程序代码出现问题,看门狗定时器就会处理系统。
但是,我们遇到了系统在看门狗定时器任务开始之前挂起的问题。 系统挂起是因为文件系统代码被错误地编码,并且有如此多的 while 循环。 有时由于 NAND 错误(或者至少文件系统代码认为它是错误的),代码会挂在一个 while 循环中并且永远无法摆脱它。 我们得到的是一个死板。
所以,提供所有信息的目的是问你们是否有任何机制可以在应用程序代码之前运行的代码中实现? 有没有硬件看门狗? 可以采取哪些步骤来确保我们不会因某些 while 循环而导致死板。
专业的嵌入式系统是这样设计的:
.data
和.bss
初始化。main()
。请注意,为您的 MCU 预先制作的启动代码不一定是由专业人士制作的! 您的工具链附带有一个业余级别的“CRT”,但它无法尽早设置看门狗和时钟,这是相当常见的。 这当然是不可接受的,因为:
.data
和.bss
的初始化不必要地、痛苦地缓慢,因为它通常是在运行在默认片上 RC 振荡器或类似设备上的时钟下执行的。请注意,即使是行业事实上的启动代码,例如 ARM CMSIS,也无法执行上述某些特定于 MCU 的硬件设置。 这可能是也可能不是问题。
有一个硬件看门狗可以在应用程序运行之前运行。 根据文档:www.ti.com/lit/ds/symlink/am1808.pdf,ARM AM1808 确实有一个可以作为看门狗实现的定时器。 因此,您可能希望至少在运行关键部分和长部分的程序部分期间将其设置为这样。 您希望有一段引导代码,首先设置此看门狗,并在正确初始化后转到应用程序。 事实上,这是一种非常普遍的做法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.