Возможно, вы можете принять некоторые из соглашений Unix.
В другом ответе пользователь David предложил
sysexits.h
имеет список стандартных кодов выхода. Кажется, что это датируется по меньшей мере до 1993 года, и некоторые крупные проекты, такие как Postfix, используют его, поэтому я думаю, что это путь.На странице руководства OpenBSD:
В соответствии со стилем (9) нецелесообразно вызывать exit (3) с произвольными значениями, чтобы указать условие отказа при завершении программы. Вместо этого следует использовать предопределенные коды выхода из sysexits, поэтому вызывающий процесс может получить приблизительную оценку класса отказа, не обращая внимания на исходный код.
blockquote> blockquote>Это список, который отображается в системе Debian:
#define EX_USAGE 64 /* command line usage error */ #define EX_DATAERR 65 /* data format error */ #define EX_NOINPUT 66 /* cannot open input */ #define EX_NOUSER 67 /* addressee unknown */ #define EX_NOHOST 68 /* host name unknown */ #define EX_UNAVAILABLE 69 /* service unavailable */ #define EX_SOFTWARE 70 /* internal software error */ #define EX_OSERR 71 /* system error (e.g., can't fork) */ #define EX_OSFILE 72 /* critical OS file missing */ #define EX_CANTCREAT 73 /* can't create (user) output file */ #define EX_IOERR 74 /* input/output error */ #define EX_TEMPFAIL 75 /* temp failure; user is invited to retry */ #define EX_PROTOCOL 76 /* remote error in protocol */ #define EX_NOPERM 77 /* permission denied */ #define EX_CONFIG 78 /* configuration error */
Внутри файла
/usr/include/sysexits.h
можно найти более подробные описания эти коды ошибок.
Я использую сторожевой таймер в каком-то скрипте. Эта функция может автоматически сбросить ваш Arduino, если вы не сбросили сторожевой таймер во время перерыва.
вы выполняете wdt_enable () в setup () и wd_reset () в начале цикла
time before watchdog firing argument of wdt_enable()
-------------------------------------------------------
15mS WDTO_15MS
30mS WDTO_30MS
60mS WDTO_60MS
120mS WDTO_120MS
250mS WDTO_250MS
500mS WDTO_500MS
1S WDTO_1S
2S WDTO_2S
4S WDTO_4S
8S WDTO_8S
пример использования:
#include <avr/wdt.h>
void setup()
{
wdt_enable(WDTO_4S); // enable the watchdog
// will fire after 4s without reset
}
void loop(){
wdt_reset(); // resets the watchdog timer count
:
:
// if program hangs more than 4s, launch the reset of arduino
}