经过一些研究后,我无法找到任何真正有价值的东西。我的问题是如何在实时系统中处理异常?由于程序故障通常不是最好的情况,即核反应堆/心脏监测器。
好的,因为每个人都迷失在第二部分,这与主要问题无关。我在那里展示了我通常如何逃避代码块。
答案 0 :(得分:2)
在“实时”,“核反应堆”类型系统中,异常处理的可能性允许系统代替失败,做下一个最好的事情。
假设我们有心脏监护仪。如果没有收到信号,则可能触发异常。在这种情况下,心脏监测器可能会等待几秒钟并再次尝试来处理异常。
在核反应堆中,达到一定温度可能会引发异常。在这种情况下,处理可能会关闭反应器的各个部分以开始冷却,然后在温度达到合理温度时启动它们。
例外意味着让一个较低级别的系统表示它不知道该做什么,并让更高级别的系统处理它。就像在核反应堆中一样,测量温度的系统可能不知道如何打开反应堆的部件,因此它会触发异常,以便某些更高级别的系统可以处理它。
答案 1 :(得分:2)
实时/嵌入式系统中的异常处理有几个层次。不仅是语言支持的选项,还有MMU,CPU异常和我最喜欢的一个:看门狗。
语言异常(C / C ++) - 不经常使用,因为很难证明所有异常都在正确的级别处理。此外,很难确定哪些威胁/流程应该负责。相反,首选合同编程。
编程风格: - 即按合同编程。附加限制:Misra / C Misra / C ++。可以检查这一点以确保以某种方式处理所有可能的情况。 (即如果没有别的话,就没有了)
硬件支持: - MMU:使用相互保护的多个进程。这允许 - 看门狗 - CPU异常 - 多核:使用多个核心将cricical进程与其他进程分开。也允许有投票机制(您希望这个和更多的核反应堆)。 - 多系统
最重要的是定义策略。根据其他非功能性要求(安全性,可靠性,安全性),需要考虑策略。可以优雅降级到部分系统重启。
答案 2 :(得分:-3)
关键系统就像任何其他系统一样,除非它更明确地指定,通过更多测试阶段,并且通常是故障安全的。
关于你的表格,是的,它非常糟糕。我非常关注{}
的缺失;并且经常这样说,这只是一种简单的坏风格,并且在添加新代码时会导致混淆。