首页 > 解决方案 > 我们可以在使用嵌入式系统时在 C 中使用 exit() 函数吗

问题描述

我正在做一个与嵌入式系统相关的项目,想知道在你的程序中使用函数 exit(0) 是否是一个好习惯。

        if (Req[0] == '0')
        {
            puts("Emergency stop button operated\n");
            **exit(0);**
        }

标签: cembeddedcoding-styleexit

解决方案


exit,以及从 中返回main(),仅在有操作系统可返回的托管系统中才有意义。大多数嵌入式系统没有这些,而是​​所谓的“独立”系统:“裸机”或 RTOS 微控制器应用程序。不需要提供此类系统的编译器,stdlib.h因此该功能exit甚至可能不可用。

在此类系统中处理错误的常规方法是实现自定义错误处理程序,该处理程序可以记录或打印错误。从那里开始,如果出现严重错误,您通常会引发看门狗重置,从而导致完整的系统重新启动。这是因为嵌入式系统中的错误通常与硬件有关,看门狗复位不仅将软件恢复为默认值,还包括所有 MCU 寄存器和连接到 MCU 的外围硬件。

然而,在高度完整性的嵌入式系统中,例如实际上具有真正紧急停止功能的系统,保持程序运行但将其恢复到安全状态是很常见的。MCU 继续运行,但所有危险输出等都被禁用,以允许系统以受控方式关闭,或者“跛行回家”并继续运行,并且仍然能够运行。为这样的系统编写软件本身就是一个很大的话题。


推荐阅读