From 3a5e2b7ce78271ca63e96e6016a7182b4017cd82 Mon Sep 17 00:00:00 2001 From: Xiang Xiao Date: Mon, 16 Dec 2019 09:01:25 -0600 Subject: [PATCH] arch/sim/src/: Simulator restore the console even error handler call host exit directly. --- arch/sim/src/sim/up_head.c | 9 --------- arch/sim/src/sim/up_internal.h | 1 - arch/sim/src/sim/up_simuart.c | 26 ++++++++++++++++---------- 3 files changed, 16 insertions(+), 20 deletions(-) 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); -}