9

We are ISO-13485 and do development for medical devices. We currently use the IAR certified compiler, but we are thinking to switch to gcc because it is cross platform and the build can be automated with plain Makefile which is not possible with IAR.

I am trying to understand what should we do to get arm-none-eabi-gcc certified for medical development.

Neither the ISO-13485, ISO-26262, ISO-62304 or ISO-61508 give me a hint of what I should do to validate my compiler.

Am I stuck to IAR or do I have alternatives?

I guess this question can be extended to space/automotive too.

4

3 回答 3

13

我在一家拥有 ISO-26262 认证的公司的工具链团队工作,我们最近对我们的开发套件进行了功能安全验证。

该过程的一部分是运行一组验证测试套件,其中编译了数千个测试程序,并将结果与​​预期结果进行比较。另一部分是 ISO 标准一致性测试。当然,这些测试都不是详尽无遗的,但确实发现了一些问题。然而,第三部分包括运行 GCC 本身附带的 DejaGNU 测试套件。

安全验证的下一个技巧是确保记录所有已知问题。功能安全并不意味着你的工具链是完美的,它只意味着已知的缺陷被清楚地记录下来,并且你有一个流程来识别和记录缺陷。您需要做的是修复或记录和证明与预期行为的每一个偏差,这样就不会有已知的、不合理的偏差。

验证本身就是一个完整的行业。这是昂贵且耗时的。

于 2018-03-27T15:24:52.487 回答
6

开始免责声明:我是一个团队的一员,该团队开发了一个测试套件来验证 C/C++ 编译器并验证编译器的功能安全性。结束免责声明

有可能的。该过程称为“资格”而不是认证,因为它旨在发现编译器中的任何弱点并在需要时定义变通方法。在 ISO 26262 中,可以在第 8 部分第 11 节“使用软件工具的信心”中找到它。在这种情况下,“软件工具”是编译器。

第 11.4.9.2 节说:

11.4.9.2 The validation of the software tool shall meet the following criteria:


the validation measures shall demonstrate that the software tool complies with
its specified requirements,
...
EXAMPLE
The standard for a programming language helps to define the requirements for
validating the associated compiler.

说明必须与 ISO 标准保持一致。要进行验证,您需要一个基于语言标准的测试套件。

DejaGNU 套件不适合对编译器的功能安全进行限定。DejaGNU 有助于识别您的编译器版本中是否存在一些“众所周知的问题”,但它不会根据任何 ISO 标准系统地验证编译器。它主要是一个回归测试套件,并测试了许多 ISO 标准中没有的要求。以下是一些例子:

例如1: https ://github.com/gcc-mirror/gcc/blob/master/gcc/testsuite/cc%2B%2B-common/diagnostic-format-json-1.c

此测试测试编译器是否生成 JSON 格式的诊断消息,这不是 ISO/IEC-9899:* C 标准、ISO/IEC-14882:* C++ 标准或 ISO-26262 标准所要求的。

例如2: https ://github.com/gcc-mirror/gcc/blob/master/gcc/testsuite/g%2B%2B.dg/tree-ssa/pr13954.C

如果您的编译器未实现任何类型的条件常量传播优化,则此测试“失败”,但 C++ 标准和任何功能安全标准都不需要这样做。

例如 3:另一方面,通过 DejaGNU 套件并不表示符合标准,而仅表示符合 GNU“方言”:

https://cpp.godbolt.org/z/Gyu_i5

对编译器在应用程序开发中使用的选项、配置和环境进行验证也很重要。这通常称为“用例”。ISO 26262 说:

11.4.3.1
When using a software tool, it shall be ensured that its usage, its
determined environmental and functional constraints and its general
operating conditions comply with its evaluation criteria or its
qualification.

正如@stephen m 正确提到的那样。韦伯测试是认证过程的一部分。另一部分是记录过程、测试结果和缓解措施(变通方法)。

验证编译器后,只要用例相同,就可以在任何安全关键环境中重用它。

于 2019-10-15T08:45:34.213 回答
0

如果您使用任何供应商特定的软件,您可以要求提供软件具有异常行为(误报)的用例或场景,在这种情况下,gcc 是开源的,需要软件用户进行验证。

于 2019-07-10T17:50:20.293 回答