我们正在使用基于ARM AM1808的嵌入式系统,其中包含rtos和文件系统。我们正在使用C语言。我们在应用程序代码中实现了一个看门狗计时器。因此,只要应用程序代码出现问题,看门狗定时器就会负责系统。
但是,我们遇到的问题是系统在监视程序计时器任务启动之前挂起。系统挂起,因为文件系统代码编码错误,有很多while循环。有时由于坏的NAND(或至少文件系统代码认为它很糟糕),代码会在一个while循环中挂起,永远不会脱离它。我们得到的是一块死板。
所以,提供所有信息的关键是问你们是否有任何机制可以在应用程序代码之前运行的代码中实现?有硬件看门狗吗?可以采取哪些步骤以确保我们不会因为某些while循环而导致死板。
答案 0 :(得分:5)
专业嵌入式系统的设计如下:
.data
和.bss
的初始化。main()
。请注意,MCU的预制启动代码不一定由专业人士制作!在您的工具链中提供业余级别的“CRT”是很常见的,它无法在早期设置看门狗和时钟。这当然是不可接受的:
.data
和.bss
的初始化不必要,非常缓慢,因为它通常是在默认的片上RC振荡器或类似设备上运行的时钟执行的。请注意,即使是行业事实上的启动代码(如ARM CMSIS)也无法执行上述某些特定于MCU的硬件设置。这可能是也可能不是问题。
答案 1 :(得分:1)
可以在应用程序运行之前运行硬件监视程序。根据文档:www.ti.com/lit/ds/symlink/am1808.pdf,ARM AM1808确实有一个可以作为监视程序实现的计时器。因此,您可能希望至少在贯穿关键和长节的程序部分中设置它。您希望拥有一个首先设置此监视程序的启动代码,并在正确初始化之后转到应用程序。实际上,这是一种非常常见的方法。