diff options
author | ntfreak <ntfreak@b42882b7-edfa-0310-969c-e2dbd0fdcd60> | 2008-07-09 10:33:30 +0000 |
---|---|---|
committer | ntfreak <ntfreak@b42882b7-edfa-0310-969c-e2dbd0fdcd60> | 2008-07-09 10:33:30 +0000 |
commit | 876297c25c970da58de83245a4c3b3a9e4c1f9ed (patch) | |
tree | d3dc28a76dd5e3dd992b6838769e3c3d4c347e41 /src | |
parent | f0f5157e0952e5ffeccd681b9617b3a80c388c53 (diff) | |
download | openocd_libswd-876297c25c970da58de83245a4c3b3a9e4c1f9ed.tar.gz openocd_libswd-876297c25c970da58de83245a4c3b3a9e4c1f9ed.tar.bz2 openocd_libswd-876297c25c970da58de83245a4c3b3a9e4c1f9ed.tar.xz openocd_libswd-876297c25c970da58de83245a4c3b3a9e4c1f9ed.zip |
- target_resume is now synchronous with 5sec timeout
git-svn-id: svn://svn.berlios.de/openocd/trunk@775 b42882b7-edfa-0310-969c-e2dbd0fdcd60
Diffstat (limited to 'src')
-rw-r--r-- | src/target/target.c | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/src/target/target.c b/src/target/target.c index 082b5cb5..1d6c4d36 100644 --- a/src/target/target.c +++ b/src/target/target.c @@ -264,6 +264,11 @@ 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) { @@ -271,7 +276,24 @@ int target_resume(struct target_s *target, int current, u32 address, int handle_ return ERROR_FAIL; } - return target->type->resume(target, current, address, handle_breakpoints, debug_execution); + 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) + { + usleep(10000); + target_poll(target); + if ((timeout_ms -= 10) <= 0) + { + LOG_ERROR("timeout waiting for target resume"); + return ERROR_TARGET_TIMEOUT; + } + } + + return retval; } int target_process_reset(struct command_context_s *cmd_ctx) |