c - 我们可以在使用嵌入式系统时在 C 中使用 exit() 函数吗
问题描述
我正在做一个与嵌入式系统相关的项目,想知道在你的程序中使用函数 exit(0) 是否是一个好习惯。
if (Req[0] == '0')
{
puts("Emergency stop button operated\n");
**exit(0);**
}
解决方案
exit
,以及从 中返回main()
,仅在有操作系统可返回的托管系统中才有意义。大多数嵌入式系统没有这些,而是所谓的“独立”系统:“裸机”或 RTOS 微控制器应用程序。不需要提供此类系统的编译器,stdlib.h
因此该功能exit
甚至可能不可用。
在此类系统中处理错误的常规方法是实现自定义错误处理程序,该处理程序可以记录或打印错误。从那里开始,如果出现严重错误,您通常会引发看门狗重置,从而导致完整的系统重新启动。这是因为嵌入式系统中的错误通常与硬件有关,看门狗复位不仅将软件恢复为默认值,还包括所有 MCU 寄存器和连接到 MCU 的外围硬件。
然而,在高度完整性的嵌入式系统中,例如实际上具有真正紧急停止功能的系统,保持程序运行但将其恢复到安全状态是很常见的。MCU 继续运行,但所有危险输出等都被禁用,以允许系统以受控方式关闭,或者“跛行回家”并继续运行,并且仍然能够运行。为这样的系统编写软件本身就是一个很大的话题。
推荐阅读
- spring - 使用 jdbcTemplate 返回 1 值的正确方法
- javascript - 如何使用导航栏创建单页应用程序?
- html - 如何从中心展开网格内的卡片列表?
- json - 如何通过循环JSON在golang中显示丢失的键?
- css - 为什么尝试添加背景图像时出现解析错误?
- mongodb - 如何修复“com.mongodb.MongoSocketOpenException:异常打开套接字”错误?
- excel - 将数值表达式从 Y 轴转换为 X 轴
- scala - Keep组合的意义?
- ruby - 使用服务器端加密更新对象上的 S3 KMS 密钥
- java - 如果给定值不为空,则应用过滤器