您的位置 首页 传感器

根据嵌入式C言语开发中的反常仓库过错追寻机制的规划

基于嵌入式C语言开发中的异常堆栈错误追踪机制的设计-对于嵌入式软件来说,尽量节省内存资源、降低程序代码量是十分重要的。因此,将程序中所有错误、异常情况都进行了统一编码,提高了错误处理代码的规范化与可读性。设计8位整数编码格式如下:

导言

嵌入式软件开发往往缺少必要的调试东西和调试手法,一起需求有较高的容错处理才能,程序正常运转过程中尽量不因为呈现反常而导致体系中止。一旦产生过错或反常,开发人员需求尽量多的过错环境信息来查找问题的原因。从程序编写的视点来讲,一般嵌入式软件都选用C言语开发。C言语自身的特色决议了无法利用言语自身的功用完成对反常的盯梢与处理,只能通过杰出的编程模型与习气,以及后期的很多测验,来发现和处理反常。因而,怎么进一步进步程序开发中的可调试性,关于运转中的反常怎么保存现场,然后便利进行反常追寻等,是开发者需求考虑的重要问题。本文针对嵌入式C言语开发的特色,提出一种依据仓库方法的反常追寻编程模型,能够完成有用的反常现场保存与康复,并为后期的问题剖析与处理打好根底。一起,本文所提出的思路亦可作为实践运转阶段进步可调试性的一种手法使用于嵌入式软件编程中,最大极限完成关于反常产生环境的保存与定位,进步体系的可维护性。

1 、树立大局过错代码表

关于嵌入式软件来说,尽量节约内存资源、下降程序代码量是十分重要的。因而,将程序中所有过错、反常状况都进行了一致编码,进步了过错处理代码的规范化与可读性。规划8位整数编码格局如下:

每个过错代码在程序中仅需求1个字节进行存储。关于程序中每个或许反常的当地(如COM1没翻开),都设定1个仅有编号,当呈现过错或反常时依据该编号能够直接定位到源程序对应文件和程序段,并确认过错类型。

选用过错代码的方法存储过错信息,不只能够准确描绘过错的类型、方位等信息,还能够最大极限地节约名贵的可执行内存资源,下降程序对内存的需求。

2、 树立大局反常仓库

在一个杂乱的嵌入式实时体系中,程序处理流程杂乱,不同资源之间往往在操作上存在着穿插。当呈现程序过错或反常时,不能简略地退出程序,而是应当尽量将过错处理掉,真实无法处理的过错应进行记载,但整个程序的运转不该当中止。对此,运用1个过错仓库来保存过错信息。该栈用下面数组界说:

依据嵌入式C言语开发中的反常仓库过错追寻机制的规划

ERROR_STACK为大局过错栈类型界说,MainErrStack为大局栈实例,其元素个数由ERR_STACK_SIZE确认。ErrorParm字符数组,当过错产生时能够顺次保存函数的人口参数以及反常产生之前局部变量的值等。实践数组长度ERR_ENV_LEN能够依据状况调整,一般状况下开发阶段能够设置大一些,保证寄存更多的过错信息用于调试;进入实践运转阶段能够恰当缩小该过错环境栈长度,削减内存空间的占用。

为了保证过错处理机制自身不会给程序引进新的反常,因而将仓库的操作彻底封装为Push和Pop两个函数,并引进当时仓库指针stackCu-rrentPos(初始为一1表明仓库为空,有用取值规模为一1~ERR_STlACK_SIZE一1,该指针一直指向栈顶元素)。算法阐明如下:

依据嵌入式C言语开发中的反常仓库过错追寻机制的规划

3 、树立一致的过错描绘字典表

为了进一步进步代码规范化程度并下降内存需求,能够将每种类型的过错界说一个过错描绘保存在独自的文件或缓冲区中。当产生过错时,体系依据过错代码取出该过错的详细描绘并显现给用户。以上操作能够封装为ShowErrorMessage函数,界说为Char*ShowErrorMessage(int errorId)。在过错产生方位并不直接描绘过错信息的办法,不只能够下降可执行内存需求,并且避免了因为不同开发者对过错文字描绘的差异而导致对用户的提示信息不一致。例如过错提示“数组越下界!代码:53017010”,530即表明数组越下界反常,17表明编号为“17”的C源程序文件,010表明文件中第10个过错方位。部分过错代码描绘示例如表1所列。

依据嵌入式C言语开发中的反常仓库过错追寻机制的规划

4 、使用阐明

下面以1个简略的比如来阐明本文办法的运转。假定程序需求供给1个通过GPRS发送数据的函数GprsSendData(char*ip,char*buf,int size),完成将buf缓冲区指定长度为size的字符串通过TCP方法发送到给定IP地址。示例代码如下:

依据嵌入式C言语开发中的反常仓库过错追寻机制的规划

由上面能够看出,或许呈现过错的方位都加入了过错压栈操作,当GprsSendData函数的返回值为假时,上级调用函数会持续将其反常时的运转状况(局部变量、参数等)持续压栈,以此类推直到需求处理该反常的最尖端。开发人员后期调试时能够将栈顶元素顺次出栈,构成一条完好的函数调用链,比较简单找出上述产生ip为空串的根本原因。

在软件开发阶段及运转的初期阶段,恰当加大过错仓库容量,能够贮存更多信息辅佐调试。跟着设备软件可靠性、稳定性的添加,在正式投入运转后能够将反常栈设定为较小的容量,以下降存储需求。

能够想象,若整个嵌入式软件在开发中严厉依照本文思路处理反常,应当能够很便利地进行反常的查找与处理。当嵌入式设备投入运转后,定时对该设备的过错栈进行剖析,关于栈中存储的过错信息进行及时处理,能够敏捷有用地添加设备软件的运转可靠性。一个通过严厉测验的设备在绝大多数状况下过错栈应为空。

5、结语

本文关于依据C言语的嵌入式软件开发中的过错追寻机制进行了详细描绘。该机制能够有用地下降软件反常产生的概率,进步软件的可靠性,削减开发本钱。一起,该机制亦能够用于正常开发阶段的辅佐调试中,在要害程序段将环境信息压栈完成后期剖析,也为改善嵌入式软件的调试手法供给了新的辅佐思路。文中所述机制已经在作者掌管的电力GPRS集抄终端的软件规划中得到了实践使用,取得了杰出的作用。

责任编辑:gt

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/yingyong/chuanganqi/95854.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部