嵌入式软件中断冲突分析与避免方案.docVIP

嵌入式软件中断冲突分析与避免方案.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
嵌入式软件中断冲突分析与避免方案.doc

嵌入式软件中断冲突分析与避免方案   摘要:介绍了嵌入式软件在中断使用中存在的中断冲突,通过典型案例分析了冲突产生的机制和类型及对软件造成的影响与危害,针对其中的软件安全漏洞提出了检测和分析方法。针对软件中断冲突提出了三种解决方案,并分析了三种方案的优缺点,为软件设计人员提高软件安全性可靠性提供设计参考。   关键词:嵌入式软件;中断冲突;软件安全漏洞   引言   随着嵌入式软件越来越多的应用在工控领域,其承载着越来越多的数据采集和处理、数据通信、自动控制与管理、系统安全保障等重要任务,同时也满足同步处理、实时处理、突发事件处理等性能要求。嵌入式软件的复杂性要求中断技术成为软件设计中必不可少的组成部分。中断技术的使用很容易引入中断资源的使用冲突,这些冲突存在着随机性、隐蔽性和不可预知性,一旦发生将会造成程序错误,甚至导致严重软件故障,尤其对航空航天等对可靠性安全性要求极高的领域,如何发现和消除中断冲突带来的安全隐患已经成为一个严峻的课题。   一、什么是中断冲突   冲突体现在代码针对某个或某些共享资源发生了访问竞争而造成程序错误。如果某个资源在被读取的过程中被打断,进行了写操作,或在被写的过程中被打断,进行了读取或重写操作,则可能存在访问冲突。“被打断”包括主程序中的资源被某个中断服务子程序打断、一个中断服务子程序的资源被某个高级中断服务子程序打断等情况。   二、如何识别和判断中断冲突是重要前提。   (一)首先通过一个简单的例子来了解一下什么是中断冲突:   某嵌入式软件中包含遥控和遥测两个任务,由两个中断服务程序来实现,遥测任务优先级高于遥控任务,即遥控任务可以被遥测任务抢占,两个任务中均进行模式设置,模式设置由一对组合变量TM_Mode和NewModeSet实现,遥控任务中代码如下:   TM_Mode = TM_Mode| 0xC0; (1)   TM_Mode = TM_Mode 0x03; (2)   NewModeSet = (NewModeSet 0x38) | 0xC0; (3)   在遥测中断中会启动遥测任务,由于遥测任务优先级高,若遥控任务被遥测任务打断,遥测任务也对TM_Mode和NewModeSet进行设置,遥测任务中代码如下:   If(TM_Mode= 0xC0)   {   TM_Mode = (TM_Mode 0x03) 4;   NewModeSet = NewModeSet 0x3F;   }   如果在遥控任务的第(1)句和第(2)句之间被遥测任务打断,则会改写TM_Mode和NewModeSet的值,遥测任务执行完成后返回遥控任务继续处理时则造成TM_Mode和NewModeSet不匹配的错误。   (二)再通过一个例子进一步分析中断冲突:   软件中设置54字节控制信息数据,控制信息数据存放在buf[0]~buf[53],其中buf[48]为压力传感器温度数据,buf[49]为压力传感器压力数据,buf[53]为前53字节的校验和。在主函数中采集buf[48]和buf[49],在外部中断4(采样中断高优先级)中依次采集buf[0]~buf[47]和buf[50]~buf[52],读取主循环中采集的buf[48]和buf[49],并计算校验和写入buf[53]。在外部中断6中(取数中断,低优先级)发送54,字节控制信息数据。与问题相关的流程图如下:   从流程图中分析,产生数据访问冲突的场景有三个:   场景一:外部中断4完成累加和计算退出中断到进入外部中断6发送数据前的时间段内,若主循环恰好运行到对buf[48]和buf[49]进行写操作语句,在外部中断6发送之前buf[48]和buf[49]被改写,而未重新计算校验和buf[53],导致外部中断6发送的控制信息数据校验和错误。   场景二:主程序写buf[48]和buf[49]之间产生外部中 v 断4,读取了buf[48]和buf[49],并对校验和进行了计算,退出外部中断4返回主程序后,又对buf[49]进行写操作,在外部中断6发送之前buf[49]被改写,而未重新计算校验和buf[53],导致外部中断6发送的控制信息数据校验和错误。   场景三:外部中断4的优先级高于外部中断6,若在外部中断6发送buf[0]~buf[53]的过程中产生外部中断4,在中断4中对buf[0]~buf[47]、buf[50]~buf[52]以及校验和进行了写操作,待退出外部中断4返回外部中断6执行时,由于一部分数据已经被发送,后一部分数据以及校验和在外部中断4中被刷新,仍会导致发送出去的控制信息校验和错误。   我们可以通过静态分析法检查中断资源冲突,针对所有中断服务子程序中访问资源,逐一分

文档评论(0)

kaku + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8124126005000000

1亿VIP精品文档

相关文档