嵌入式系统:重启前最后一次喘息

Maw*_*awg 4 embedded

当嵌入式系统出现问题时,我倾向于将错误写入闪存中的特殊日志文件然后重新启动(例如,如果内存不足,则没有太多选择).

我意识到即使这样也会出错,所以我尽量减少它(通过在最终写入期间不分配任何内存,并提高写入进程的优先级).

但这取决于有人检索日志文件.现在我正在考虑通过intertubes发送消息,以便在重新启动之前报告错误.

当然,第二个想法是,重新启动后发送该消息会更好,但它确实让我思考......

如果我发现一个不可恢复的错误,我应该做什么样的事情?如何在一个处于不稳定状态的系统中尽可能安全地做到这一点?

Cra*_*een 7

一种策略是使用在开机/重启期间初始化的RAM部分.这可用于存储在重新启动后仍然存在的数据,然后当您的应用程序重新启动时,在代码的早期,它可以检查该内存并查看它是否包含任何有用的数据.如果是,则将其写入日志,或通过通信通道发送.

如何保留未初始化的RAM部分取决于平台,并且取决于您是否正在运行管理RAM初始化的完整操作系统(Linux).如果你是一个小型系统,其中RAM初始化是由C启动代码完成的,那么你的编译器可能有办法将数据(文件范围变量)放在不同的部分(除了通常的.bss例子),这是没有由C启动代码初始化.

如果数据未初始化,则可能在上电时包含随机数据.要确定它是否包含随机数据或有效数据,请使用散列(例如CRC-32)来确定其有效性.如果您的处理器有一种方法可以告诉您是否处于重新启动与上电复位之间,那么您也应该使用它来确定上电后数据无效.

  • 非常Amiga Guru冥想和Kickstart喜欢.这意味着我喜欢它.:-) (2认同)

Art*_*Art 5

对此没有单一的答案.我会从看门狗计时器开始.如果事情非常糟糕,这会重新启动系统.

别的东西要考虑-什么是不是在日志文件中也很重要.如果您记录了各种任务/操作的例行更新,那么您可以从缺少的内容中学习.

最后,如果事情变得糟糕并且您仍然在运行:进入一个关键部分,关闭尽可能多的操作系统,关闭外围设备,记录尽可能多的状态信息,然后重新启动!