Commit 9033474287ed9b35a25bfd20b90d1bfd71848a2c
authorMichel Pollet <buserror@gmail.com>
Tue, 15 Mar 2011 13:38:46 +0000 (13:38 +0000)
committerMichel Pollet <buserror@gmail.com>
Tue, 15 Mar 2011 13:38:46 +0000 (13:38 +0000)
Catches control-C to make sure any VCD file is flushed

Signed-off-by: Michel Pollet <buserror@gmail.com>
simavr/sim/run_avr.c

index ebc8b93666e462920e0b3ce3bdff943f011a62ee..9e5bb0405146d216f69fbc3817ebd7c4242539ce 100644 (file)
@@ -23,6 +23,7 @@
 #include <stdio.h>
 #include <libgen.h>
 #include <string.h>
+#include <signal.h>
 #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);