问题标签 [safety-critical]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 是否存在经过认证的(ISO 26262 或类似的)C++ 标准库?
虽然存在经过认证的 C++ 工具链(编译器等),但我没有找到任何经过认证的 C++ 标准库 (STL)。
有谁知道有人提供这个?
c - 通过指向函数的指针传递值。我们要在函数内部创建变量的副本吗?
我们有两个简单的功能。
哪一个更好?power1 快一点,但我听说 power2 更安全。我不记得为什么?据我记得有一种情况是power1(第一种方法)有瓶颈。你能解释一下吗?安全关键系统是否使用第二种方法?
autosar - 如何将布尔变量编码为 16 位编码值(汉明距离)
如何为布尔变量分配 16 位编码值(例如,汉明码)以避免由于位翻转导致的错误状态?
c - 如何解决此代码中提到的 MISRA-2012 10.4 和 10.9 违规问题?
有必要的部分来制定我的问题。下面是MyError.h
头文件的内容。
我的错误.h
以下是MyError.c
文件中的必需部分,其中仅包含上述头文件并PROPAGATE_ERROR_FAIL_MY_1
在 API 中调用宏。
我的错误.c
注意:仅供参考 MyUtilsLogError() 只是一个 API,它有助于在控制台上转储日志。
在myError.c
文件中,我看到以下 MISRA 2012 违规:
[1]:misra_c_2012_rule_10_4_violation:左侧操作数“e”(枚举)的基本类型与右侧操作数“MySuccess”(布尔值)的基本类型不同。
[2]:misra_c_2012_rule_11_9_violation:字面量“0”不得用作空指针常量。
我不明白为什么 MISRA 报告 10.4 违规,即使我在myErro.h
文件中的第 11 行比较相同的枚举类型?
任何线索为什么在这里报告 10.9 违规?宏不适用于 MISRA 吗?
c - MISRA-2012 违反规则 20.12:misra_c_2012_rule_20_12_violation:宏参数“val”用于扩展和原始形式
我一直面临着这种 MISRA 违规行为:
定义:
来电者详情:
Misra-2012 报告违反规则 20.12misra_c_2012_rule_20_12_violation: macro parameter "val" is used in both expanded and raw forms
artificial-intelligence - 如何在边缘实现安全关键型 AI 计算集群?
我想尝试开发一种可以处理所有人工智能和其他计算内容的冗余自动驾驶汽车计算架构。为此,我购买了一些包含集成 GPU 的边缘计算设备(Nvidia Jetson TX2s)。然后我用千兆以太网交换机将它们连接起来,现在我可以与它们通信了。
我需要你对系统架构的建议。如何实施这个故障安全、安全关键和冗余系统?有一些集群示例可提供高可用性。但我想这样做:“每个计算节点运行相同的进程,然后将结果输出到主节点。主节点分析并投票结果并选择最好的。如果计算节点失败(错误、系统停机、缺电等) ),系统应该意识到故障并将故障节点的计算负载转移到健康节点。每个节点还应该运行一些节点特定的任务,而不受协作进程的影响。
你的想法是什么?任何关键字、建议、方法推荐都对我有帮助。
c - 将double转换为int的安全方法是什么?
我得到了一个遗留代码,其中有人不小心将double
值分配给了int
变量,例如:
现在要摆脱
警告 C4244:“=”:从“double”转换为“int”,可能丢失数据
警告,我尝试在上游编辑代码并删除不必要的double
变量,但结果太乱了!
我也可以使用铸造:
但实际上不能保证b
会在整数的范围内。我想制作一个辅助功能:
但我不确定这是否是最好的实现。我想知道是否有更规范的方法来处理这个问题?
我想要的是:
- 在
b
变量超出整数范围的情况下,程序立即停止 - 向终端打印一条错误消息,指示发生此问题的特定行和时间。
提前感谢您的支持。
c - 为所有未初始化的变量设置默认值
我有一个遗留代码,其中有无数未初始化的代码
警告 C4100: : 未引用的形式参数
或可能未初始化:
警告 C4701:使用了可能未初始化的局部变量
变量,这可能会在以后导致未定义的行为。有没有办法告诉编译器将所有未初始化的变量设置为更易于调试的变量,例如NULL
. 可能使用任何一个选项
- 预处理宏
- 编译器选项
- CMake 选项
例如,考虑这个虚拟代码:
我想使用上面的任何一个选项来设置所有情况,例如a
,NULL
或者在这种情况下,0
如果NULL
不可能的话。
PS这里我使用MSVC来捕捉可能的问题,但最后我希望我的解决方案是跨平台和编译器不可知的。所以编译器特定的解决方案(例如,GCC,Clang...)无论如何都受到高度赞赏。
c - 不带内存保护单元的 CPU 上 IEC 61508 软件元素的独立性
是否有可能通过 IEC 61508 第 3 部分附录 F 证明软件元素的独立性,以便安全相关组件可以被评为 SIL 2 而非安全组件(例如 UI、通信)可以不评级,以及仍然有一个被评为 SIL 2 的总体结果?
特别是当安全和非安全元素都在单个处理器上运行并且处理器不实施任何形式的硬件内存保护时,我对此的看法特别感兴趣。可以做各种各样的事情来确保软件元素不受干扰,例如确保数据完整性、数据传递受到严格控制和验证、任务调度是确定性的(非安全任务保证终止),以及很快。
严格应用这样的技术就足够了吗?
c - C 布尔无效值处理
我在一个安全关键的嵌入式 C 项目中,并且有一个关于检测布尔变量中的内存损坏(例如缓冲区溢出)的讨论。众所周知,在 C 语言中,“布尔”类型实际上是一个 N 位整数,这意味着它可能有 2 N -2 个无效值。例如,如果您将 FALSE 声明为 0,将 TRUE 声明为 1(通过宏、常量或枚举),则可以说 <0(在有符号类型的情况下)或 >1 是内存损坏(或错误)的后果。
所以理论上应该可以构造这样的故障捕获代码块:
或者用开关盒来做。状态变量和其他枚举类型是强制性的,但是为布尔值做这件事肯定会增加很多代码,我的问题是——值得付出努力吗?