基于嵌入式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为空串的根本原因。

  • UC3846控制芯片工作原理控制图 逆变焊机原理与用途
  • 数字万用表电阻档测试二极管正反向没有阻值(使用万用表测量二极管的正向电阻,为什么各档)
  • 学单片机需要学数电模电吗(学单片机要先学数电模电吗)
  • 电工怎么选择适合自己用的万用表(电工初学者买什么样的万用表好)
  • 单片机需要同时运行多个任务怎么办(单片机怎么同时执行多个任务)
  • 电机保护的方案取决于负载的机械特性
  • 绝缘电阻表正负搭接不复零位是怎么回事
  • 短路怎么用万用表查