diff --git a/arch/sim/src/sim/up_head.c b/arch/sim/src/sim/up_head.c index c9cf7a2aa04..8667f41bc72 100644 --- a/arch/sim/src/sim/up_head.c +++ b/arch/sim/src/sim/up_head.c @@ -40,16 +40,13 @@ #include -#include #include #include #include #include #include -#include #include -#include #include #include "up_internal.h" @@ -104,12 +101,6 @@ int main(int argc, char **argv, char **envp) #endif } -#ifdef USE_DEVCONSOLE - /* Restore the original terminal mode and return the exit code */ - - simuart_terminate(); -#endif - return g_exitcode; } diff --git a/arch/sim/src/sim/up_internal.h b/arch/sim/src/sim/up_internal.h index 5bc1d31c348..0a69ca97188 100644 --- a/arch/sim/src/sim/up_internal.h +++ b/arch/sim/src/sim/up_internal.h @@ -285,7 +285,6 @@ void simuart_start(void); int simuart_putc(int ch); int simuart_getc(bool block); bool simuart_checkc(void); -void simuart_terminate(void); /* up_uartwait.c **********************************************************/ diff --git a/arch/sim/src/sim/up_simuart.c b/arch/sim/src/sim/up_simuart.c index a42213b9bdb..0f58180ed18 100644 --- a/arch/sim/src/sim/up_simuart.c +++ b/arch/sim/src/sim/up_simuart.c @@ -40,6 +40,7 @@ #include #include #include +#include #include #include #include @@ -113,6 +114,17 @@ static void setrawmode(void) (void)tcsetattr(0, TCSANOW, &raw); } +/**************************************************************************** + * Name: restoremode + ****************************************************************************/ + +static void restoremode(void) +{ + /* Restore the original terminal mode */ + + (void)tcsetattr(0, TCSANOW, &g_cooked); +} + /**************************************************************************** * Name: simuart_thread ****************************************************************************/ @@ -212,6 +224,10 @@ void simuart_start(void) setrawmode(); + /* Restore the original terminal mode before exit */ + + atexit(restoremode); + /* Start the simulated UART thread -- all default settings; no error * checking. */ @@ -298,13 +314,3 @@ bool simuart_checkc(void) return g_uarthead != g_uarttail; } -/**************************************************************************** - * Name: simuart_terminate - ****************************************************************************/ - -void simuart_terminate(void) -{ - /* Restore the original terminal mode */ - - (void)tcsetattr(0, TCSANOW, &g_cooked); -}