summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoroharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60>2008-07-18 11:18:35 +0000
committeroharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60>2008-07-18 11:18:35 +0000
commit722fcb8d61e98be3ec2be73f26e8c9ab2136d70c (patch)
tree7229d52356c78bf6830141e138223acb3225cb03
parent0470a9652b6275981ec132cb74a4af942b12a6ac (diff)
downloadopenocd+libswd-722fcb8d61e98be3ec2be73f26e8c9ab2136d70c.tar.gz
openocd+libswd-722fcb8d61e98be3ec2be73f26e8c9ab2136d70c.tar.bz2
openocd+libswd-722fcb8d61e98be3ec2be73f26e8c9ab2136d70c.tar.xz
openocd+libswd-722fcb8d61e98be3ec2be73f26e8c9ab2136d70c.zip
resume is now asynchronous
git-svn-id: svn://svn.berlios.de/openocd/trunk@828 b42882b7-edfa-0310-969c-e2dbd0fdcd60
-rw-r--r--src/target/target.c22
1 files 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;
}