9

机载系统有“DO-178B”A级和B级认证。它是否禁止使用优化编译器?

例如,一些编译器会重新排序指令以获得更高的性能。DO-178B lev.A 或 lev.B 是否禁止这种重新排序?

大多数现代 CPU 都在硬件中内置了这种重新排序功能。是否允许在 DO-178B lev.A 软件/硬件系统中使用它们?

4

5 回答 5

11

首先,也是至关重要的:对于这类问题,如果答案很重要,您需要从有能力提供答案的人那里获得正式的专业意见,或者与您的认证机构讨论。不应依赖您在这里得到的任何答复。

话虽如此,我会假设您是出于好奇而提问,并且不会以任何有意义的方式依赖答案,我将尝试以这种方式回答。我不是专业人士,这不是专业建议。

我可以通过快速搜索在网上找到的最准确的文档是有关相关主题的 FAA 指南文件:http: //www.faa.gov/aircraft/air_cert/design_approvals/air_software/cast/cast_papers/media/cast- 12.pdf。本文描述了必须对生成的目标代码而不是源代码进行验证的条件。特别是,它给出了一些即使在未优化的代码中也会出现的例子——自动变量初始化和异常处理就是几个例子。关于编译器优化,它指出:

编译器优化是 DO-178B/ED-12B 的第 4.4.2a 节中讨论的另一个领域。这涉及分析确定优化功能不会损害测试用例展示基于需求的测试和与软件级别一致的结构覆盖率的能力。这是与第 4.4.2b 节解决的可追溯性和其他验证问题不同的问题。这超出了本文的范围。

我没有 DO-178B 的副本方便阅读第 4.4.2a 节,但我会注意到 (a) 有一些程序可以处理其他情况,即目标代码与源代码不对应的一对一一种方式,并且(b)这非常强烈地暗示编译器优化被讨论而不是完全禁止。

从那篇论文的许多讨论中也很清楚,“我们无法在源代码和目标代码之间追踪事物”的答案是以某种方式验证目标代码——换句话说,有禁止此类事情以外的解决方案。

因此,我会得出结论,至少必须允许一些编译器优化。

特别是,您描述的那种重新排序是非常可追溯的,在我看来几乎可以肯定它是被允许的。

于 2011-09-04T02:20:44.673 回答
6

DO-178B 不是绝对的,可以解释。如果您关闭优化,则没有任何问题,也没有什么可解释的。通过坚持最明显的解释,您可以避免稍后将您的解释出售给认证机构,并让您自己质疑您是如何做事的。

当您优化代码时,很难做到 A 级所需的从源到指令的可追溯性。此外,如果您使用的是 Do-178B,那么从您的软件中获得额外的 5% 并不是您最关心的问题。轻松完成所有必需的认证步骤应该是您最关心的问题,因为这将是您所有时间的问题。

您问题的硬件部分很有趣。对于软件优化代码不仅重新排序,它也被更改。但是对于硬件来说,代码没有被改变以获得更高的速度,只是执行顺序。我不得不四处打听以获取有关此想法的更多信息。

于 2011-09-05T06:08:12.493 回答
3

我对 DO-178B 的了解很肤浅(我不会每天使用它,但我会为使用它的人构建工具)。

该标准非常重视可追溯性。高级需求被分解为低级需求,由源代码实现,由编译器编译。在这些步骤中的每一个步骤中,都必须能够根据上一步产生的规范来证明所做的事情是正确的。

对于编译器而言,这意味着必须能够读取程序集并将一条特定指令跟踪到导致生成该指令的源代码语句。

所以,简而言之,是的,我认为这禁止了大多数优化。

关于运行该软件的硬件,它的验证方式不同(但我猜同样严格)。那时相关的标准是DO-254,我对此一无所知。

于 2011-09-03T18:39:14.200 回答
2

通过优化,您需要在对象汇编语言级别验证生成的代码。有用于嵌入式实时多任务处理的编译器套件和库,之前已在其他项目中验证过,让您可以放心地再次验证它们 - 但您仍然需要验证应用程序中使用的代码。

于 2012-05-24T15:40:10.477 回答
0

为了避免延迟和不得不解释事情,只需关闭优化和缓存。这使得代码具有确定性。如果可能,也尽量不要使用 GCC,而是选择合格的编译器,例如 IAR 或 DDCI 或 Irvine Compilers 或其他东西。与其尝试用花哨的锤子敲打螺钉,不如使用适用于螺钉的螺丝刀。因为当那架飞机坠毁时,飞机上有 200 人,包括母亲、父亲和孩子,他们发现编译器重新排序了代码并导致了失败,你会希望你只有正确的螺丝刀。

于 2020-05-22T05:08:56.700 回答