新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 嵌入式软件中基于栈的错误追踪机制设计

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

作者:时间:2010-08-09来源:网络收藏

为了确保处理本身不会给程序引入新的异常,因此将堆栈的操作完全封装为Push和Pop两个函数,并引入当前堆栈指针stackCu-rrentPos(初始为一1表示堆栈为空,有效取值范围为一1~ERR_STlACK_SIZE一1,该指针始终指向栈顶元素)。算法说明如下:

本文引用地址:http://www.eepw.com.cn/article/151695.htm

3 建立统一的描述字典表
为了进一步提高代码规范化程度并降低内存需求,可以将每种类型的定义一个错误描述保存在单独的文件或缓冲区中。当发生错误时,系统根据错误代码取出该错误的详细描述并显示给用户。以上操作可以封装为ShowErrorMessage函数,定义为Char*ShowErrorMessage(int errorId)。在错误发生位置并不直接描述错误信息的方法,不仅可以降低可执行内存需求,而且避免了由于不同开发者对错误文字描述的差异而导致对用户的提示信息不统一。例如错误提示“数组越下界!代码:53017010”,530即表示数组越下界异常,17表示编号为“17”的C源程序文件,010表示文件中第10个错误位置。部分错误代码描述示例如表1所列。

4 应用说明
下面以1个简单的例子来说明本文方法的运行。假设程序需要提供1个通过GPRS发送数据的函数GprsSendData(char*ip,char*buf,int size),实现将buf缓冲区指定长度为size的字符串通过TCP方式发送到给定IP地址。示例代码如下:

由上面可以看出,可能出现错误的位置都加入了错误压栈操作,当GprsSendData函数的返回值为假时,上级调用函数会继续将其异常时的运行状态(局部变量、参数等)继续压栈,以此类推直到需要处理该异常的最顶级。开发人员后期调试时可以将栈顶元素依次出栈,构成一条完整的函数调用链,比较容易找出上述产生ip为空串的根本原因。
开发阶段及运行的初期阶段,适当加大错误堆栈容量,可以储存更多信息辅助调试。随着设备可靠性、稳定性的增加,在正式投入运行后可以将异常栈设定为较小的容量,以降低存储需求。
可以设想,若整个在开发中严格按照本文思路处理异常,应当可以很方便地进行异常的查找与处理。当设备投入运行后,定期对该设备的错误栈进行分析,对于栈中存储的错误信息进行及时处理,可以迅速有效地增加设备软件的运行可靠性。一个经过严格测试的设备在绝大多数情况下错误栈应为空。

结语
本文对于C语言的软件开发中的错误进行了详细描述。该可以有效地降低软件异常发生的概率,提升软件的可靠性,减少开发成本。同时,该机制亦可以用于正常开发阶段的辅助调试中,在关键程序段将环境信息压栈实现后期分析,也为改进嵌入式软件的调试手段提供了新的辅助思路。文中所述机制已经在作者主持的电力GPRS集抄终端的软件中得到了实际应用,取得了良好的效果。

linux操作系统文章专题:linux操作系统详解(linux不再难懂)

上一页 1 2 下一页

评论


相关推荐

技术专区

关闭