列表

详情


阅读以下关于安全攸关嵌入式系统相关技术的描述,在答题纸上回答问题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.在协议包格式正确的情况下,进行数据交叉比对,比对正确则输出;比对不正确,并连续不正确超过门限,则报警。

【问题1】(12分)
王总汇报时指出,在设计安全攸关系统软件时,往往不重视安全攸关软件设计方法, 不遵守C语言安全编码规范,导致程序质量较差,代码中存在支全隐患。请简要说明表 3-1给出的C语言代码是C语言安全编码标准中(如:MISARC标准)不允许采用的代码 结构的原因。

表3-1 C语言代码实例

【问题2】(10分)
请根据自己对图3-1所示机电管理系统工作原理的分析,用300字以内的文字说明本实例中可能存在哪三方面数据传输时丢失协议包现象,并简要说明原因。
问题3(3分)
针对以上分析出的三种丢包原因,请举例给出两种以上的修改丢包bug的可能的方法。

参考答案:

【问题1】
1) 不允许。违背(建议)规则6.3。
2) 不允许。 违背(建议)规则6.3、(强制)规则15.3和(强制)规则15.5。
3) 不允许。违背(建议)规则6.3。
4) 不允许。违背(建议)规则6.3 和强制规则8.1。
5) 不允许。违背(建议)规则6.3和强制规则12.2. x=exp_1(&y)+exp_2(&)应修改为:x=exp_1(&y);x+=exp_2(&y)。
6) 不允许。违背(建议)规则6.3 和强制规则10.3;(unsigned int *)s是危险的类型转换。

【问题2】
图3-1可能存在大小缓冲不匹配、时钟不准和422总线缓冲丢字节等三方面丢数据包现象。
(1)大小缓冲不匹配。由于CCDL任务在每100ms将大缓冲的数据拷贝到小缓冲后,进行协议包解析。当两缓冲存在大量接收数据包时,如果CCDL任务处理机制设计不合理,有可能解析时间过长而引起丢包现象。
(2)100ms时钟不准。由于大小环形缓冲数据交换采用100ms时钟周期处理,而100ms时钟周期依赖于10ms计时器,如果10ms计时器受到系统干扰可能丢失中断,则
引起100ms时钟周期增加10ms。导致CCDL任务定时时间不准,不能按100ms周期解析协议包,过早解析协议包,而当前周期的协议包还未到达,可能导致丢包。
(3)422总线缓冲丢字节。422总线有8字节输入缓冲,如果将422总线设置为全满中断时,在数据输入流量大的情况下,8字节FIFO字节输入缓冲容易溢出,导致字节丢失,一旦协议包校验和失败,会丢弃此包,这样会导致丢包。
【问题3】
(1)512B和4096B两个缓冲区合并,以减少缓冲区拷贝不同步而产生的丢包问题。
(2)精简10ms时钟中断处理程序,避免10ms中断的丢失,所引发100ms任务不能准时启动。
(3)充分利用422芯片的缓冲区的满、半满和空中断机制,避免422缓冲区内字节数据未及时读出而丢失,使100ms任务找不到包头或校验码错。
(4)采用新型校验码,降低传输中的数据错误。
(5)缩短100ms任务的循环周期,以及时处理CCDL任务。



详细解析:

本题问题1考查MISAR-C标准,该标准中约定:
强制规则是对程序员的强制要求,编译会报错;
建议规则要求程序员在通常情况下都要遵守,编译会报警,应该遵守。
本题相关规则如下:
(建议)规则6.3:必须用typedef显式标识出各数据类型的长度和符号特性,避免直接使用标准数据类型。如: typedef unsigned int uint32_t。
(强制)规则8.1:函数应当有原型说明,且原型在函数的定义和调用范围内都是可见的。
(强制)规则12.2:表达式的值在标准所允许的任何次序下应该都是相同的。
(强制)规则10.3:危险的类型转换。
(强制)规则15.3:switch语句的最后子句应当是default子句。
(强制)规则15.5:switch语句至少应有一个case子句。

上一题