X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=contrib%2Fitmdump.c;h=f31e1ff756aba9a6de653e1297af695eaff81823;hb=fed16496ab31041a7e113db3f3d6b0cf5c23866d;hp=71f6e06709529d4c92fd1f9d7189e1390cb7bc8f;hpb=01b42b2e7c0d2a0419548f0a270705dc19baca34;p=fw%2Fopenocd diff --git a/contrib/itmdump.c b/contrib/itmdump.c index 71f6e0670..f31e1ff75 100644 --- a/contrib/itmdump.c +++ b/contrib/itmdump.c @@ -1,19 +1,6 @@ -/* - * Copyright (C) 2010 by David Brownell - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or (at - * your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ +/* SPDX-License-Identifier: GPL-3.0-or-later */ + +/* Copyright (C) 2010 by David Brownell */ /* * Simple utility to parse and dump ARM Cortex-M3 SWO trace output. Once the @@ -39,11 +26,13 @@ #include #include -#include #include +#include +#include #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 +48,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 +79,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 +139,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 +241,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 +276,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 +297,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; @@ -301,7 +313,7 @@ static void show_timestamp(FILE *f, int c) delayed = true; break; case 0xf: - label = ", packet and timetamp delayed"; + label = ", packet and timestamp delayed"; delayed = true; break; } @@ -348,7 +360,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 +370,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]));