From: Michel Pollet Date: Tue, 15 Mar 2011 13:38:46 +0000 (+0000) Subject: run_avr: Added a signal handler X-Git-Tag: v1.0a8~6 X-Git-Url: https://git.htl-mechatronik.at/public/?a=commitdiff_plain;h=9033474287ed9b35a25bfd20b90d1bfd71848a2c;p=sx%2Fsimavr.git run_avr: Added a signal handler Catches control-C to make sure any VCD file is flushed Signed-off-by: Michel Pollet --- 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);