我正在做一个与嵌入式系统相关的项目,想知道在你的程序中使用函数exit(0)是否是一个好的做法。
if (Req[0] == '0')
{
puts("Emergency stop button operated\n");
**exit(0);**
}
exit
,以及从 main()
只有在托管系统中才有意义,因为那里有一个操作系统可以返回。大多数嵌入式系统不具备这一点,而是所谓的 "独立 "系统。"裸机 "或RTOS微控制器应用。这种系统的编译器不需要提供 stdlib.h
所以函数 exit
可能根本无法使用。
在这种系统中处理错误的正常方法是实现一个自定义的错误处理程序,它可以记录或打印错误。而从那里开始,在出现关键错误的情况下,通常会引发看门狗复位,导致整个系统重新启动。这是因为嵌入式系统中的错误往往与硬件有关,而看门狗复位不仅仅是将软件恢复到默认状态,还包括所有MCU寄存器和与MCU相连的外围硬件。
在高完整性的嵌入式系统中,比如真正有急停的系统,然而常见的做法是保持程序运行,但将其恢复到安全状态。单片机继续运行,但所有危险的输出等都被禁用,要么让系统以受控的方式关闭,要么 "跛行回家",继续运行,因为它仍然有能力。为这样的系统编写软件是一个相当大的话题。
简答,正如@Felix G在评论中所说。如果你的工作是在操作系统上 exit(0);
是相关的,如果你的工作是裸机应用,没有。
详情请参考@Felix G的评论。
顺便说一句,如果你的工作是裸机应用,请参考@Felix G的评论。**exit(0);**
在C中不是正确的说法,你可能是指 exit(0);
或 /*exit(0);*/
.