void send_thread_states() { thread_t *tp = chRegFirstThread(); while (tp) { msg_thread_state_t tp_state; u16 cpu = 1000.0f * tp->p_ctime / (float)g_ctime; tp_state.cpu = cpu; tp_state.stack_free = check_stack_free(tp); strncpy(tp_state.name, chRegGetThreadNameX(tp), sizeof(tp_state.name)); sbp_send_msg(SBP_MSG_THREAD_STATE, sizeof(tp_state), (u8 *)&tp_state); tp->p_ctime = 0; /* Reset thread CPU cycle count */ tp = chRegNextThread(tp); } g_ctime = 0; }
void send_thread_states() { Thread *tp = chRegFirstThread(); while (tp) { msg_thread_state_t tp_state; u16 cpu = 1000.0f * tp->p_ctime / (float)g_ctime; tp_state.cpu = cpu; tp_state.stack_free = check_stack_free(tp); strncpy(tp_state.name, chRegGetThreadName(tp), sizeof(tp_state.name)); sbp_send_msg(MSG_THREAD_STATE, sizeof(tp_state), (u8 *)&tp_state); /* This works because chThdGetTicks is actually a define that pulls out a * value from a struct, hopefully if that fact changes then this statement * will no longer compile. */ tp->p_ctime = 0; tp = chRegNextThread(tp); } g_ctime = 0; }