From 61d2f1f006f6bc10dcdbcbb35b75834527edc171 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dani=C3=ABl=20Geelen?= Date: Wed, 18 Apr 2018 08:35:28 +0200 Subject: [PATCH 1/4] Add support for configuring VCD traces from the commandline. --- simavr/sim/run_avr.c | 57 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) diff --git a/simavr/sim/run_avr.c b/simavr/sim/run_avr.c index c39d4743d..c3a00c177 100644 --- a/simavr/sim/run_avr.c +++ b/simavr/sim/run_avr.c @@ -121,6 +121,63 @@ main( display_usage(basename(argv[0])); } else if (!strcmp(argv[pi], "-t") || !strcmp(argv[pi], "--trace")) { trace++; + } else if (!strcmp(argv[pi], "--vcd-trace-name")) { + if(pi+1>=argc) { + fprintf(stderr, "%s: missing mandatory argument for %s.\n", argv[0], argv[pi]); + exit(1); + } + ++pi; + strncpy(f.tracename, argv[pi], sizeof(f.tracename)); + } else if (!strcmp(argv[pi], "--add-vcd-trace")) { + if(pi+1>=argc) { + fprintf(stderr, "%s: missing mandatory argument for %s.\n", argv[0], argv[pi]); + exit(1); + } + ++pi; + struct { + char kind[64]; + uint8_t mask; + uint16_t addr; + char name[64]; + } trace; + if(4 != sscanf(argv[pi], "%63[^=]=%63[^@]@0x%hx/0x%hhx", &trace.name[0], &trace.kind[0], &trace.addr, &trace.mask)) { + --pi; + fprintf(stderr, "%s: format for %s is name=kind@addr/mask.\n", argv[0], argv[pi]); + exit(1); + } + + /****/ if(!strcmp(trace.kind, "portpin")) { + f.trace[f.tracecount].kind = AVR_MMCU_TAG_VCD_PORTPIN; + } else if(!strcmp(trace.kind, "irq")) { + f.trace[f.tracecount].kind = AVR_MMCU_TAG_VCD_IRQ; + } else if(!strcmp(trace.kind, "trace")) { + f.trace[f.tracecount].kind = AVR_MMCU_TAG_VCD_TRACE; + } else { + fprintf(stderr, "%s: unknown trace kind '%s', not one of 'portpin', 'irq', or 'trace'.\n", argv[0], trace.kind); + exit(1); + } + f.trace[f.tracecount].mask = trace.mask; + f.trace[f.tracecount].addr = trace.addr; + strncpy(f.trace[f.tracecount].name, trace.name, sizeof(f.trace[f.tracecount].name)); + + printf( + "Adding %s trace on address 0x%04x, mask 0x%02x ('%s')\n", + f.trace[f.tracecount].kind == AVR_MMCU_TAG_VCD_PORTPIN ? "portpin" + : f.trace[f.tracecount].kind == AVR_MMCU_TAG_VCD_IRQ ? "irq" + : f.trace[f.tracecount].kind == AVR_MMCU_TAG_VCD_TRACE ? "trace" + : "unknown", + f.trace[f.tracecount].addr, + f.trace[f.tracecount].mask, + f.trace[f.tracecount].name + ); + + ++f.tracecount; + } else if (!strcmp(argv[pi], "--vcd-trace-file")) { + if(pi+1>=argc) { + fprintf(stderr, "%s: missing mandatory argument for %s.\n", argv[0], argv[pi]); + exit(1); + } + strncpy(f.tracename, argv[++pi], sizeof(f.tracename)); } else if (!strcmp(argv[pi], "-ti")) { if (pi < argc-1) trace_vectors[trace_vectors_count++] = atoi(argv[++pi]); From 5678ba9e24c9b59097762e478989248a1da40b42 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dani=C3=ABl=20Geelen?= Date: Wed, 2 May 2018 18:45:22 +0200 Subject: [PATCH 2/4] Wrap long lines. --- simavr/sim/run_avr.c | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/simavr/sim/run_avr.c b/simavr/sim/run_avr.c index c3a00c177..15925cbc5 100644 --- a/simavr/sim/run_avr.c +++ b/simavr/sim/run_avr.c @@ -140,7 +140,15 @@ main( uint16_t addr; char name[64]; } trace; - if(4 != sscanf(argv[pi], "%63[^=]=%63[^@]@0x%hx/0x%hhx", &trace.name[0], &trace.kind[0], &trace.addr, &trace.mask)) { + const int n_args = sscanf( + argv[pi], + "%63[^=]=%63[^@]@0x%hx/0x%hhx", + &trace.name[0], + &trace.kind[0], + &trace.addr, + &trace.mask + ); + if(n_args != 4) { --pi; fprintf(stderr, "%s: format for %s is name=kind@addr/mask.\n", argv[0], argv[pi]); exit(1); @@ -153,7 +161,12 @@ main( } else if(!strcmp(trace.kind, "trace")) { f.trace[f.tracecount].kind = AVR_MMCU_TAG_VCD_TRACE; } else { - fprintf(stderr, "%s: unknown trace kind '%s', not one of 'portpin', 'irq', or 'trace'.\n", argv[0], trace.kind); + fprintf( + stderr, + "%s: unknown trace kind '%s', not one of 'portpin', 'irq', or 'trace'.\n", + argv[0], + trace.kind + ); exit(1); } f.trace[f.tracecount].mask = trace.mask; From a1e2ecfea9db6e1f9074fd805013e3dcdfa3a526 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dani=C3=ABl=20Geelen?= Date: Wed, 23 May 2018 19:03:04 +0200 Subject: [PATCH 3/4] If() statements should be followed by a space. --- simavr/sim/run_avr.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/simavr/sim/run_avr.c b/simavr/sim/run_avr.c index 15925cbc5..7559e9413 100644 --- a/simavr/sim/run_avr.c +++ b/simavr/sim/run_avr.c @@ -122,14 +122,14 @@ main( } else if (!strcmp(argv[pi], "-t") || !strcmp(argv[pi], "--trace")) { trace++; } else if (!strcmp(argv[pi], "--vcd-trace-name")) { - if(pi+1>=argc) { + if (pi+1>=argc) { fprintf(stderr, "%s: missing mandatory argument for %s.\n", argv[0], argv[pi]); exit(1); } ++pi; strncpy(f.tracename, argv[pi], sizeof(f.tracename)); } else if (!strcmp(argv[pi], "--add-vcd-trace")) { - if(pi+1>=argc) { + if (pi+1>=argc) { fprintf(stderr, "%s: missing mandatory argument for %s.\n", argv[0], argv[pi]); exit(1); } @@ -148,17 +148,17 @@ main( &trace.addr, &trace.mask ); - if(n_args != 4) { + if (n_args != 4) { --pi; fprintf(stderr, "%s: format for %s is name=kind@addr/mask.\n", argv[0], argv[pi]); exit(1); } - /****/ if(!strcmp(trace.kind, "portpin")) { + /****/ if (!strcmp(trace.kind, "portpin")) { f.trace[f.tracecount].kind = AVR_MMCU_TAG_VCD_PORTPIN; - } else if(!strcmp(trace.kind, "irq")) { + } else if (!strcmp(trace.kind, "irq")) { f.trace[f.tracecount].kind = AVR_MMCU_TAG_VCD_IRQ; - } else if(!strcmp(trace.kind, "trace")) { + } else if (!strcmp(trace.kind, "trace")) { f.trace[f.tracecount].kind = AVR_MMCU_TAG_VCD_TRACE; } else { fprintf( @@ -186,7 +186,7 @@ main( ++f.tracecount; } else if (!strcmp(argv[pi], "--vcd-trace-file")) { - if(pi+1>=argc) { + if (pi+1>=argc) { fprintf(stderr, "%s: missing mandatory argument for %s.\n", argv[0], argv[pi]); exit(1); } From 2d2c42e652606ac2fd60d34519cb7b4b325422b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dani=C3=ABl=20Geelen?= Date: Wed, 23 May 2018 19:08:41 +0200 Subject: [PATCH 4/4] Add more white space around expressions. --- simavr/sim/run_avr.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/simavr/sim/run_avr.c b/simavr/sim/run_avr.c index 7559e9413..d3b977a57 100644 --- a/simavr/sim/run_avr.c +++ b/simavr/sim/run_avr.c @@ -122,14 +122,14 @@ main( } else if (!strcmp(argv[pi], "-t") || !strcmp(argv[pi], "--trace")) { trace++; } else if (!strcmp(argv[pi], "--vcd-trace-name")) { - if (pi+1>=argc) { + if (pi + 1 >= argc) { fprintf(stderr, "%s: missing mandatory argument for %s.\n", argv[0], argv[pi]); exit(1); } ++pi; strncpy(f.tracename, argv[pi], sizeof(f.tracename)); } else if (!strcmp(argv[pi], "--add-vcd-trace")) { - if (pi+1>=argc) { + if (pi + 1 >= argc) { fprintf(stderr, "%s: missing mandatory argument for %s.\n", argv[0], argv[pi]); exit(1); } @@ -186,7 +186,7 @@ main( ++f.tracecount; } else if (!strcmp(argv[pi], "--vcd-trace-file")) { - if (pi+1>=argc) { + if (pi + 1 >= argc) { fprintf(stderr, "%s: missing mandatory argument for %s.\n", argv[0], argv[pi]); exit(1); }