target_resume(target, 0, entry_point, 1, 1);
target_poll(target);
- while (target->state != TARGET_HALTED)
+ target_wait_state(target, TARGET_HALTED, timeout_ms);
+ if (target->state != TARGET_HALTED)
{
- usleep(5000);
- target_poll(target);
- if ((timeout_ms -= 5) <= 0)
+ if ((retval=target_halt(target))!=ERROR_OK)
+ return retval;
+ if ((retval=target_wait_state(target, TARGET_HALTED, 500))!=ERROR_OK)
{
- LOG_ERROR("timeout waiting for algorithm to complete, trying to halt target");
- target_halt(target);
- timeout_ms = 1000;
- while (target->state != TARGET_HALTED)
- {
- usleep(10000);
- target_poll(target);
- if ((timeout_ms -= 10) <= 0)
- {
- LOG_ERROR("target didn't reenter debug state, exiting");
- exit(-1);
- }
- }
- armv7m->load_core_reg_u32(target, ARMV7M_REGISTER_CORE_GP, 15, &pc);
- LOG_DEBUG("failed algoritm halted at 0x%x ", pc);
- retval = ERROR_TARGET_TIMEOUT;
+ return retval;
}
+ return ERROR_TARGET_TIMEOUT;
+ }
+
+
+ armv7m->load_core_reg_u32(target, ARMV7M_REGISTER_CORE_GP, 15, &pc);
+ if (pc != exit_point)
+ {
+ LOG_DEBUG("failed algoritm halted at 0x%x ", pc);
+ return ERROR_TARGET_TIMEOUT;
}
breakpoint_remove(target, exit_point);
armv7m_common_t *armv7m = target->arch_info;
LOG_USER("target halted due to %s, current mode: %s %s\nxPSR: 0x%8.8x pc: 0x%8.8x",
- target_debug_reason_strings[target->debug_reason],
+ Jim_Nvp_value2name_simple( nvp_target_debug_reason,target->debug_reason)->name,
armv7m_mode_strings[armv7m->core_mode],
armv7m_exception_string(armv7m->exception_number),
buf_get_u32(armv7m->core_cache->reg_list[ARMV7M_xPSR].value, 0, 32),