刷题刷出新高度,偷偷领先!偷偷领先!偷偷领先! 关注我们,悄悄成为最优秀的自己!

简答题

试题三(25分)

阅读以下关于安全攸关嵌入式系统相关技术的描述,在答题纸上回答问题 1 至问题 3。

【说明】

某公司机电管理系列产品被广泛应用于飞行器后,现场事故频繁发生,轻则飞机座舱显示机电设备工作异常,重则系统预警,切入备份运行。这些事故给航空公司带来重大经济损失。

公司领导非常重视航空公司的问题反馈,责令公司王总带队到现场进行故障排查。经过一个多月的排查,故障现象始终未复现,同时,公司实验室内也在反复出现故障,结果未取得显著成效,但发现产品存在偶然丢失协议包的现象。随后,公司领导组织行业专家召开故障分析会。王总在会上对前期故障排查情况进行了说明,指出从外场现象看 CCDL协议包丢失是引起系统报警、切换的主要原因。图3-1给出了机电管理产品的工作原理,机电管理系统主要承担了对飞行器的刹车、燃油和环控等子系统进行监视与控制,它对飞行器而言是安全攸关系统,因此,从系统结构上采用了双余度计算机系统。具体工作流程简要说明如下:

1.机电管理系统由1号计算机和 2号计算机组成,双机互为余度备份。

2.双机中分别驻留了一个 100ms 周期的CCDL任务,完成双机间的交叉对比和实时监控等工作。10ms 定时器作为任务的工作频率。

3.交叉对比协议包包含一组“AA55”报头、消息长度、数据和校验码。

4.2号机将协议包通过422总线发送给1号机(422 总线接口芯片有8级缓冲)。

5.1号机通过中断方式将422总线数据接收到大环形缓冲区中(大小为4096B)。

6.100ms的CCDL定时任务将大环形缓冲区的数据以512B为单位拷贝到小环形缓冲区中(大小512B)。

7.CCDL任务按照协议包格式解析小环形缓冲的数据,如果校验错误,丢弃当前协议包;

8.在协议包格式正确的情况下,进行数据交叉比对,比对正确则输出;比对不正确,并连续不正确超过门限,则报警。 

表3-1给出的C语言代码不符合C语言安全编码标准(如:MISRA C标准)的原因是什么?

使用微信搜索喵呜刷题,轻松应对考试!

答案:

(1)不允许。if…else语句中,if必须由else子句结束。

(2)不允许。switch语句中,最后子句应该是 default 子句;且每个switch语句至少应有一个case子句。

(3)不允许。禁止参数指针赋值给过程指针。

(4)不允许。禁止将过程声明为指针类型。

(5)不允许。禁止同一个表达式中调用多个相关函数。

(6)不允许。禁止对指针变量使用强制类型转换赋值。

解析:

本题主要考察对安全攸关系统软件设计方法和C语言安全编码规范的理解。根据题目描述和参考答案,解析如下:

对于给出的C语言代码实例,根据MISRA C标准或其他类似的C语言安全编码标准,这些代码结构是不被允许的。原因如下:

  1. if…else语句中,if必须由else子句结束。这是为了确保代码的逻辑清晰和可预测性。
  2. switch语句中,最后子句应该是default子句,且每个switch语句至少应有一个case子句。这样能提高代码的可读性和可维护性。
  3. 禁止参数指针赋值给过程指针。这可能导致不可预料的结果和潜在的安全风险。
  4. 禁止将过程声明为指针类型。这是为了避免潜在的复杂性和不确定性。
  5. 禁止在同一个表达式中调用多个相关函数。这可能引发竞态条件和不确定的行为。
  6. 禁止对指针变量使用强制类型转换赋值。这是为了避免类型混淆和潜在的内存访问错误。

在安全攸关的软件设计中,遵循这些C语言安全编码规范是非常重要的,因为它们可以帮助减少软件中的错误和潜在的安全风险,提高软件的可靠性和安全性。

创作类型:
原创

本文链接:表3-1给出的C语言代码不符合C语言安全编码标准(如:MISRA C标准)的原因是什么?

版权声明:本站点所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明文章出处。

让学习像火箭一样快速,微信扫码,获取考试解析、体验刷题服务,开启你的学习加速器!

分享考题
share