diff --git a/contrib/itmdump.c b/contrib/itmdump.c index 71f6e0670..896389416 100644 --- a/contrib/itmdump.c +++ b/contrib/itmdump.c @@ -44,6 +44,7 @@ #include #include +unsigned int dump_swit; /* Example ITM trace word (0xWWXXYYZZ) parsing for task events, sent * on port 31 (Reserved for "the" RTOS in CMSIS v1.30) @@ -59,6 +60,9 @@ static void show_task(int port, unsigned data) unsigned code = data >> 16; char buf[16]; + if (dump_swit) + return; + switch (code) { case 0: strcpy(buf, "run"); @@ -87,6 +91,9 @@ static void show_reserved(FILE *f, char *label, int c) { unsigned i; + if (dump_swit) + return; + printf("%s - %#02x", label, c); for (i = 0; (c & 0x80) && i < 4; i++) { @@ -144,6 +151,9 @@ static void show_hard(FILE *f, int c) unsigned value; char *label; + if (dump_swit) + return; + printf("DWT - "); if (!read_varlen(f, c, &value)) @@ -243,10 +253,21 @@ static void show_swit(FILE *f, int c) unsigned value = 0; unsigned i; - printf("SWIT %u - ", port); + if (port + 1 == dump_swit) { + if (!read_varlen(f, c, &value)) + return; + printf("%c", value); + return; + } if (!read_varlen(f, c, &value)) return; + + if (dump_swit) + return; + + printf("SWIT %u - ", port); + printf("%#08x", value); for (i = 0; i < sizeof(format) / sizeof(format[0]); i++) { @@ -267,6 +288,9 @@ static void show_timestamp(FILE *f, int c) char *label = ""; bool delayed = false; + if (dump_swit) + return; + printf("TIMESTAMP - "); /* Format 2: header only */ @@ -285,7 +309,7 @@ static void show_timestamp(FILE *f, int c) } /* Format 1: one to four bytes of data too */ - switch (c) { + switch (c >> 4) { default: label = ", reserved control\n"; break; @@ -348,7 +372,7 @@ int main(int argc, char **argv) int c; /* parse arguments */ - while ((c = getopt(argc, argv, "f:")) != EOF) { + while ((c = getopt(argc, argv, "f:d:")) != EOF) { switch (c) { case 'f': /* e.g. from UART connected to /dev/ttyUSB0 */ @@ -358,6 +382,9 @@ int main(int argc, char **argv) return 1; } break; + case 'd': + dump_swit = atoi(optarg); + break; default: fprintf(stderr, "usage: %s [-f input]", basename(argv[0]));