每个错误代码在程序中仅需要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,该指针始终指向栈顶元素)。算法说明如下:

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