From 722fcb8d61e98be3ec2be73f26e8c9ab2136d70c Mon Sep 17 00:00:00 2001 From: oharboe Date: Fri, 18 Jul 2008 11:18:35 +0000 Subject: resume is now asynchronous git-svn-id: svn://svn.berlios.de/openocd/trunk@828 b42882b7-edfa-0310-969c-e2dbd0fdcd60 --- src/target/target.c | 22 ++++------------------ 1 file changed, 4 insertions(+), 18 deletions(-) diff --git a/src/target/target.c b/src/target/target.c index ea130ce3..dd16c2bd 100644 --- a/src/target/target.c +++ b/src/target/target.c @@ -266,9 +266,6 @@ int target_halt(struct target_s *target) int target_resume(struct target_s *target, int current, u32 address, int handle_breakpoints, int debug_execution) { int retval; - int timeout_ms = 5000; - - enum target_state resume_state = debug_execution ? TARGET_DEBUG_RUNNING : TARGET_RUNNING; /* We can't poll until after examine */ if (!target->type->examined) @@ -277,24 +274,13 @@ int target_resume(struct target_s *target, int current, u32 address, int handle_ return ERROR_FAIL; } + /* note that resume *must* be asynchronous. The CPU can halt before we poll. The CPU can + * even halt at the current PC as a result of a software breakpoint being inserted by (a bug?) + * the application. + */ if ((retval = target->type->resume(target, current, address, handle_breakpoints, debug_execution)) != ERROR_OK) return retval; - /* wait for target to exit halted mode */ - target_poll(target); - - while (target->state != resume_state) - { - target_call_timer_callbacks(); - usleep(10000); - target_poll(target); - if ((timeout_ms -= 10) <= 0) - { - LOG_ERROR("timeout waiting for target resume"); - return ERROR_TARGET_TIMEOUT; - } - } - return retval; } -- cgit v1.2.3