/** * @brief Retrieves a thread pointer by name. * @note The reference counter of the found thread is increased by one so * it cannot be disposed incidentally after the pointer has been * returned. * * @param[in] name the thread name * @return A pointer to the found thread. * @retval NULL if a matching thread has not been found. * * @api */ thread_t *chRegFindThreadByName(const char *name) { thread_t *ctp; /* Scanning registry.*/ ctp = chRegFirstThread(); do { if (strcmp(chRegGetThreadNameX(ctp), name) == 0) { return ctp; } ctp = chRegNextThread(ctp); } while (ctp != NULL); return NULL; }
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; }