boolean MIB_find_mqxTaskEntry ( uint_32 op, pointer index, pointer _PTR_ instance ) { /* Body */ KERNEL_DATA_STRUCT_PTR kd_ptr = _mqx_get_kernel_data(); _task_id tid = (_task_id)*(uint_32_ptr)index; TD_STRUCT_PTR td_ptr = NULL; QUEUE_ELEMENT_STRUCT_PTR search_ptr; uint_32 td_num; if (op == RTCSMIB_OP_GET) { *instance = _task_get_td(tid); return (*instance != NULL); } /* Endif */ search_ptr = kd_ptr->TD_LIST.NEXT; td_num = 0; for (;;) { td_ptr = (TD_STRUCT_PTR)((char_ptr)search_ptr - offsetof(TD_STRUCT, TD_LIST_INFO)); if (td_ptr->TASK_ID >= tid) { break; } /* Endif */ td_num++; if (td_num >= kd_ptr->TD_LIST.SIZE) { td_ptr = NULL; break; } /* Endif */ search_ptr = search_ptr->NEXT; } /* Endfor */ if (!td_ptr) { return FALSE; } /* Endif */ *(uint_32_ptr)index = td_ptr->TASK_ID; *instance = td_ptr; return (td_ptr != NULL); } /* Endbody */
/*! * \brief Prints stacks usage. */ void _tad_stack_usage ( void ) { #if MQX_MONITOR_STACK && MQX_TD_HAS_STACK_LIMIT _mqx_uint_ptr stack_used, stack_limit; _mqx_int percent, size; TD_STRUCT_PTR td_ptr; TASK_TEMPLATE_STRUCT_PTR template_ptr; KERNEL_DATA_STRUCT_PTR kernel_data_ptr = _mqx_get_kernel_data (); char *task_name; printf ("\nStack Usage:\n"); printf ("Task Stack Base Stack Limit Stack Used %% Used Overflow?\n"); size = _QUEUE_GET_SIZE(&kernel_data_ptr->TD_LIST); td_ptr = (TD_STRUCT_PTR)((unsigned char *)kernel_data_ptr->TD_LIST.NEXT - FIELD_OFFSET(TD_STRUCT,TD_LIST_INFO)); while ((0 != size) && (NULL != td_ptr)) { #if MQX_TD_HAS_TASK_TEMPLATE_PTR template_ptr = td_ptr->TASK_TEMPLATE_PTR; task_name = template_ptr->TASK_NAME; #else char name[12]; sprintf(name, "0x%x", td_ptr->TASK_ID); task_name = name; #endif stack_used = td_ptr->STACK_LIMIT; stack_used++; while (*stack_used == 0x7374616B) { stack_used++; } if ((stack_used == td_ptr->STACK_LIMIT) || (stack_used == (_mqx_uint_ptr)td_ptr->STACK_LIMIT + 1)) { percent=100; } else { percent = ((_mqx_uint_ptr)td_ptr->STACK_BASE - stack_used) * 100 / ((_mqx_uint_ptr)td_ptr->STACK_BASE - (_mqx_uint_ptr)td_ptr->STACK_LIMIT); } printf ("%s 0x%lx 0x%lx 0x%lx %ld %% %s\n", task_name, td_ptr->STACK_BASE, td_ptr->STACK_LIMIT, stack_used, percent,percent>=100?"Yes":"No"); size--; td_ptr = (TD_STRUCT_PTR)((unsigned char *)(td_ptr->TD_LIST_INFO.NEXT) - FIELD_OFFSET(TD_STRUCT,TD_LIST_INFO)); } stack_used = stack_limit = (_mqx_uint_ptr)(((_mqx_uint)(kernel_data_ptr->INTERRUPT_STACK_PTR)) - kernel_data_ptr->INIT.INTERRUPT_STACK_SIZE); stack_used++; while (*stack_used == 0x7374616B) { stack_used++; } if ((stack_used == td_ptr->STACK_LIMIT) || (stack_used == (_mqx_uint_ptr)td_ptr->STACK_LIMIT + 1)) { printf ("Interrupt 0x%lx 0x%lx 0x%lx 100 %% Yes", kernel_data_ptr->INTERRUPT_STACK_PTR, stack_limit, stack_used); } else { percent = ((_mqx_uint_ptr)kernel_data_ptr->INTERRUPT_STACK_PTR - stack_used) * 100 / ((_mqx_uint_ptr)kernel_data_ptr->INTERRUPT_STACK_PTR - stack_limit); printf ("Interrupt 0x%lx 0x%lx 0x%lx %ld %% No", kernel_data_ptr->INTERRUPT_STACK_PTR, stack_limit, stack_used, percent); } printf ("\n"); #endif }
uint_32 MIB_get_mqxProcessorNum(pointer dummy) { KERNEL_DATA_STRUCT_PTR kd_ptr = _mqx_get_kernel_data(); return 0;//((uint_32)kd_ptr->PROCESSOR_NUMBER); }