From 9033474287ed9b35a25bfd20b90d1bfd71848a2c Mon Sep 17 00:00:00 2001 From: Michel Pollet Date: Tue, 15 Mar 2011 13:38:46 +0000 Subject: [PATCH] run_avr: Added a signal handler Catches control-C to make sure any VCD file is flushed Signed-off-by: Michel Pollet --- simavr/sim/run_avr.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/simavr/sim/run_avr.c b/simavr/sim/run_avr.c index ebc8b93..9e5bb04 100644 --- a/simavr/sim/run_avr.c +++ b/simavr/sim/run_avr.c @@ -23,6 +23,7 @@ #include #include #include +#include #include "sim_avr.h" #include "sim_elf.h" #include "sim_core.h" @@ -48,6 +49,18 @@ void display_usage(char * app) exit(1); } +avr_t * avr = NULL; + +void +sig_int( + int sign) +{ + printf("signal caught, simavr terminating\n"); + if (avr) + avr_terminate(avr); + exit(0); +} + int main(int argc, char *argv[]) { elf_firmware_t f = {{0}}; @@ -127,7 +140,7 @@ int main(int argc, char *argv[]) if (f_cpu) f.frequency = f_cpu; - avr_t * avr = avr_make_mcu_by_name(f.mmcu); + avr = avr_make_mcu_by_name(f.mmcu); if (!avr) { fprintf(stderr, "%s: AVR '%s' now known\n", argv[0], f.mmcu); exit(1); @@ -150,6 +163,9 @@ int main(int argc, char *argv[]) avr_gdb_init(avr); } + signal(SIGINT, sig_int); + signal(SIGTERM, sig_int); + for (;;) avr_run(avr); -- 2.39.5