下载

1下载券

加入VIP
  • 专属下载特权
  • 现金文档折扣购买
  • VIP免费专区
  • 千万文档免费下载

上传资料

关闭

关闭

关闭

封号提示

内容

首页 1嵌入式软件中基于栈的错误追踪机制设计

1嵌入式软件中基于栈的错误追踪机制设计.doc

1嵌入式软件中基于栈的错误追踪机制设计

平凡的程序员小强
2018-09-04 0人阅读 举报 0 0 暂无简介

简介:本文档为《1嵌入式软件中基于栈的错误追踪机制设计doc》,可适用于工程科技领域

资料来源电子下载网下载时间::本文地址http:ujjcomshejiqianrushihtml嵌入式软件中基于栈的错误追踪机制设计摘要:嵌入式软件大都采用C语言开发存在着调试困难、不易查错的特点。本文针对嵌入式C语言的编程特点设计了一种基于堆栈模式的错误追踪机制并论述了其具体实现方法包括错误代码定义、错误处理堆栈设计及错误异常的描述方法给出了详细代码。本方法已经在多个实际嵌入式产品开发中得到应用。关键词:嵌入式软件错误追踪堆栈中图分类号:TP文献标识码:AStack�BasedErrorTrackingMechanisminEmbeddedSoftwareDuLixin,DuanChunsun(InformationScienceEngineeringCollege,UniversityofJinan,Jinan,China)Abstract:CLanguageiswidelyusedinembeddedsoftwaredevelopment,butthedebugginganderror�findingaredifficultAstack�basederrortrackingmechanismisdesignedtoimproveerror�findingefficiencyThedefinitionoferrorcodes,thedesignoferrorprocessstack,andtheerrordescriptionmethodaredescribedThedetailedcodeisalsogivenThismethodissuccessfullyusedinseveralembeddedproductsKeywords:embeddedsoftwareerror�trackingstack引言  嵌入式软件开发往往缺乏必要的调试工具和调试手段同时需要有较高的容错处理能力程序正常运行过程中尽量不因为出现异常而导致系统停止。一旦发生错误或异常开发人员需要尽量多的错误环境信息来查找问题的原因。从程序编写的角度来讲一般嵌入式软件都采用C语言开发。C语言本身的特点决定了无法利用语言本身的功能实现对异常的跟踪与处理只能通过良好的编程模型与习惯以及后期的大量测试来发现和解决异常。因此如何进一步提升程序开发中的可调试性对于运行中的异常如何保存现场从而方便进行异常追踪等是开发者需要考虑的重要问题。本文针对嵌入式C语言开发的特点提出一种基于堆栈模式的异常追踪编程模型能够实现有效的异常现场保存与恢复并为后期的问题分析与解决打好基础。同时本文所提出的思路亦可作为实际运行阶段提升可调试性的一种手段应用于嵌入式软件编程中最大限度实现对于异常发生环境的保存与定位提升系统的可维护性。 建立全局错误代码表  对于嵌入式软件来说尽量节省内存资源、降低程序代码量是十分重要的。因此将程序中所有错误、异常情况都进行了统一编码提高了错误处理代码的规范化与可读性。设计位整数编码格式如下:  每个错误代码在程序中仅需要个字节进行存储。对于程序中每个可能异常的地方(如COM没打开)都设定个唯一编号当出现错误或异常时根据该编号可以直接定位到源程序对应文件和程序段并确定错误类型。  采用错误代码的形式存储错误信息不仅可以精确描述错误的类型、位置等信息还可以最大限度地节省宝贵的可执行内存资源降低程序对内存的需求。 建立全局异常堆栈  在一个复杂的嵌入式实时系统中程序处理流程复杂不同资源之间往往在操作上存在着交叉。当出现程序错误或异常时不能简单地退出程序而是应当尽量将错误处理掉实在无法处理的错误应进行记录但整个程序的运行不应当中断。对此使用个错误堆栈来保存错误信息。该栈用下面数组定义:typeof struct ErrorStack{错误栈类型定义  intErrorCode统一定义的错误代码  charErrorParmERRENVLEN错误发生时的环境数据}ERRORSTACKERRORSTACKMainErrStackERRSTACKSIZE全局错误堆栈  ERRORSTACK为全局错误栈类型定义MainErrStack为全局栈实例其元素个数由ERRSTACKSIZE确定。ErrorParm为字符数组当错误发生时可以依次保存函数的入口参数以及异常发生之前局部变量的值等。实际数组长度ERRENVLEN可以根据情况调整一般情况下开发阶段可以设置大一些保证存放更多的错误信息用于调试进入实际运行阶段可以适当缩小该错误环境栈长度减少内存空间的占用。  为了确保错误处理机制本身不会给程序引入新的异常因此将堆栈的操作完全封装为Push和Pop两个函数并引入当前堆栈指针StackCurrentPos(初始为表示堆栈为空有效取值范围为~ERRSTACKSIZE该指针始终指向栈顶元素)。算法说明如下:intPush(interrCode,char*errEnv){压栈函数  if(StackCurrentPos>=ERRSTACKSIZE){说明堆栈已满退出并报错    return说明堆栈已满前面可以自行加入处理语句  }  else{堆栈未满    StackCurrentPos堆栈指针StackCurrentPos加    MainErrStackStackCurrentPosErrorCode=errCode保存异常代码    StrCopy(MainErrStackStackCurrentPosErrorParm,errEnv,ERRENVLEN)保存异常环境StrCopy为自定义字符串拷贝函数自动截取前ERRENVLEN个有效字符以防数组越界  }}ERRORSTACKPop(){出栈函数  if(StackCurrentPos    returnStackCurrentPos等于说明当前栈为空  else{栈不空弹出栈顶数据    intpos=StackCurrentPos    StackCurrentPos    ReturnMainErrStackpos  }} 建立统一的错误描述字典表  为了进一步提高代码规范化程度并降低内存需求可以将每种类型的错误定义一个错误描述保存在单独的文件或缓冲区中。当发生错误时系统根据错误代码取出该错误的详细描述并显示给用户。以上操作可以封装为ShowErrorMessage函数定义为Char*ShowErrorMessage(interrorId)。在错误发生位置并不直接描述错误信息的方法不仅可以降低可执行内存需求而且避免了由于不同开发者对错误文字描述的差异而导致对用户的提示信息不统一。例如错误提示“数组越下界!代码:”即表示数组越下界异常表示编号为“”的C源程序文件表示文件中第个错误位置。部分错误代码描述示例如表所列。表 错误代码描述示例表 应用说明  下面以个简单的例子来说明本文方法的运行。假设程序需要提供个通过GPRS发送数据的函数GprsSendData(char*ip,char*buf,intsize)实现将buf缓冲区指定长度为size的字符串通过TCP方式发送到给定IP地址。示例代码如下:boolGprsSendData(char*ip,char*buf, intsize){  if(strlen(ip)==){给定IP地址为空当前源程序文件编号本文件第个错误    push(buf)push函数会根据异常环境保存的最大长度对buf进行截取    returnfalse出现错误返回false  }  if(!GprsConnect(ip,)){链接给定IP的端口不成功,当前源程序文件编号本文件第个错误    push(ip)将链接地址压入堆栈    returnfalse  }  ……此处省略实际数据成功发送代码  returntrue发送数据成功返回true}  由上面可以看出可能出现错误的位置都加入了错误压栈操作当GprsSendData函数的返回值为假时上级调用函数会继续将其异常时的运行状态(局部变量、参数等)继续压栈以此类推直到需要处理该异常的最顶级。开发人员后期调试时可以将栈顶元素依次出栈构成一条完整的函数调用链比较容易找出上述产生ip为空串的根本原因。  在软件开发阶段及运行的初期阶段适当加大错误堆栈容量可以储存更多信息辅助调试。随着设备软件可靠性、稳定性的增加在正式投入运行后可以将异常栈设定为较小的容量以降低存储需求。  可以设想若整个嵌入式软件在开发中严格按照本文思路处理异常应当可以很方便地进行异常的查找与处理。当嵌入式设备投入运行后定期对该设备的错误栈进行分析对于栈中存储的错误信息进行及时处理可以迅速有效地增加设备软件的运行可靠性。一个经过严格测试的设备在绝大多数情况下错误栈应为空。结语  本文对于基于C语言的嵌入式软件开发中的错误追踪机制进行了详细描述。该机制可以有效地降低软件异常发生的概率提升软件的可靠性减少开发成本。同时该机制亦可以用于正常开发阶段的辅助调试中在关键程序段将环境信息压栈实现后期分析也为改进嵌入式软件的调试手段提供了新的辅助思路。文中所述机制已经在作者主持的电力GPRS集抄终端的软件设计中得到了实际应用取得了良好的效果。参考文献彭刚,王晓斌分布式实时系统的错误处理J工业控制计算机,,():龚跃玲程序语言中错误处理模型的分析与比较J武汉理工大学学报,,():杜立新(讲师、系统分析师)主要研究方向为服务计算、软件工程。推荐阅读:(按住Ctrl鼠标左键点击标题可以打开详细内容)、IC检测方法、什么是遥感技术、什么是无线网址、制冷设备维修技巧、什么是色温、手机RF设计问答、微波简史、微波小知识、卫星导航知识、卫星与遥感技术

用户评价(0)

关闭

新课改视野下建构高中语文教学实验成果报告(32KB)

抱歉,积分不足下载失败,请稍后再试!

提示

试读已结束,如需要继续阅读或者下载,敬请购买!

文档小程序码

使用微信“扫一扫”扫码寻找文档

1

打开微信

2

扫描小程序码

3

发布寻找信息

4

等待寻找结果

我知道了
评分:

/5

1嵌入式软件中基于栈的错误追踪机制设计

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利