commit 4a34d8ea3153622a953355813c0c79593ffd2331
parent 3491cb2bfc76504d2fe3c6ee2cb30528d4589c92
Author: Brian Swetland <swetland@frotz.net>
Date: Sun, 21 Jun 2015 02:42:22 -0700
debugger: avoid excessive chatter when errors persist
Diffstat:
3 files changed, 11 insertions(+), 6 deletions(-)
diff --git a/tools/debugger-core.c b/tools/debugger-core.c
@@ -92,14 +92,17 @@ void debugger_lock() {
}
void debugger_unlock() {
+ if (swdp_error()) {
+ xprintf("SWD ERROR\n");
+ }
pthread_mutex_unlock(&_dbg_lock);
}
void *debugger_monitor(void *arg) {
for (;;) {
- debugger_lock();
+ pthread_mutex_lock(&_dbg_lock);
monitor();
- debugger_unlock();
+ pthread_mutex_unlock(&_dbg_lock);
usleep(250000);
}
}
diff --git a/tools/rswdp.c b/tools/rswdp.c
@@ -39,6 +39,10 @@ static usb_handle *usb;
static int swd_error = 0;
+int swdp_error(void) {
+ return swd_error;
+}
+
#define MAXWORDS 512
struct txn {
@@ -113,10 +117,7 @@ static int process_reply(struct txn *t, u32 *data, int count) {
continue;
case CMD_STATUS:
if (op) {
- if (swd_error == 0) {
- swd_error = -op;
- fprintf(stderr, "SWD ERROR\n");
- }
+ swd_error = -op;
return -op;
} else {
return 0;
diff --git a/tools/rswdp.h b/tools/rswdp.h
@@ -49,6 +49,7 @@ int swdp_watchpoint_rw(unsigned n, u32 addr);
/* attempt to clear any error state from previous transactions */
/* return 0 if successful (or no error state existed) */
int swdp_clear_error(void);
+int swdp_error(void);
int swdp_reset(void);