System Reset
From NutWiki
Contents |
Test Environments
| Hardware Comments | Nut/OS 4.8.0 | |||
| Ethernut 1.3 H | Unknown bug: doesn't recognize reset cause | |||
| Ethernut 2.1 B | Unknown bug: doesn't recognize reset cause | |||
| Ethernut 3.0 E | Compiling Error (see discussion) | |||
| EIR 1.0 C | Set jumper JP1 to DBGU mode. | OK Binaries | ||
| Compiler: ARM-GCC 4.2.2 ; AVR-GCC 4.3.0 | ||||
Source Code
#include <dev/board.h> #include <dev/reset.h> #include <sys/timer.h> #include <stdio.h> #include <io.h> int main(void) { int rc = NutResetCause(); uint32_t baud = 115200; char *cause; int i; NutRegisterDevice(&DEV_DEBUG, 0, 0); freopen(DEV_DEBUG_NAME, "w", stdout); _ioctl(_fileno(stdout), UART_SETSPEED, &baud); switch (rc) { case NUT_RSTTYP_POWERUP: cause = "Powerup"; break; case NUT_RSTTYP_WATCHDOG: cause = "Watchdog"; break; case NUT_RSTTYP_EXTERNAL: cause = "External"; break; case NUT_RSTTYP_SOFTWARE: cause = "Software"; break; case NUT_RSTTYP_BROWNOUT: cause = "Brownout"; break; default: cause = "Unknown"; break; } printf("\nLast reset caused by %s (rc = %d)\n", cause, rc); for(i = 32; --i > 0 ;) { printf("\rNext reset in %d seconds", i); NutSleep(1000); } printf("\nReset\n"); NutReset(); printf("Reset failed\n"); for (;;); return 0; }
Details
You can invoke a system reset by calling
NutReset();
This function will only return in case of a failure.
Use NutResetCause to determine the cause of the last reset.
rc = NutResetCause();
This function should be called at the very first beginning of your main program. It may return any of the following values:
-
NUT_RSTTYP_POWERUP, if the reset was caused by powering up the system. -
NUT_RSTTYP_WATCHDOG, if the watchdog triggered the last reset. -
NUT_RSTTYP_EXTERNAL, if an external reset signal appeared like pressing a reset button. -
NUT_RSTTYP_SOFTWARE, if the reset was triggered by writing to a reset controller register. -
NUT_RSTTYP_BROWNOUT, if the reset was cause by low voltage detection.
Which code is actually returned depends on the capabilities of the CPU and the board design.
See also
| Languages: |
English |
