Ejemplo n.º 1
0
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 */
Ejemplo n.º 2
0
/*!
 * \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
}
Ejemplo n.º 3
0
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);	
}