source: rtems/c/src/tests/sptests/threaditerate/threadinfo.c @ 310a2ec

4.104.114.84.95
Last change on this file since 310a2ec was 41ab6966, checked in by Joel Sherrill <joel.sherrill@…>, on 06/12/00 at 20:06:59

Patch from John Cotton <john.cotton@…>, Charles-Antoine Gauthier
<charles.gauthier@…>, and Darlene A. Stewart
<Darlene.Stewart@…> to add support for a number of very
significant things:

+ BSPs for many variations on the Motorola MBX8xx board series
+ Cache Manager including initial support for m68040

and PowerPC

+ Rework of mpc8xx libcpu code so all mpc8xx CPUs now use

same code base.

+ Rework of eth_comm BSP to utiltize above.

John reports this works on the 821 and 860

  • Property mode set to 100644
File size: 4.8 KB
Line 
1/*  threadinfo.c
2 * 
3 *  Routines to print out information about threads.
4 */
5
6#include "system.h"
7#include <stdlib.h>
8
9#define PTR unsigned int
10#define PTR_MASK "0x%08x"
11
12/*
13 *  Return a pointer to a string describing the object type.
14 */
15
16const char * _Objects_Type_to_String( Objects_Control * object )
17{
18  switch( _Objects_Get_class( object->id ) ) {
19    case OBJECTS_NO_CLASS:
20      return "NO_CLASS";
21     
22    case OBJECTS_INTERNAL_THREADS:
23      return "INTERNAL_THREADS";
24     
25    case OBJECTS_RTEMS_TASKS:
26      return "RTEMS_TASKS";
27     
28    case OBJECTS_POSIX_THREADS:
29      return "POSIX_THREADS";
30     
31    case OBJECTS_ITRON_TASKS:
32      return "ITRON_TASKS";
33     
34    case OBJECTS_RTEMS_TIMERS:
35      return "RTEMS_TIMERS";
36     
37    case OBJECTS_RTEMS_SEMAPHORES:
38      return "RTEMS_SEMAPHORES";
39     
40    case OBJECTS_RTEMS_MESSAGE_QUEUES:
41      return "RTEMS_MESSAGE_QUEUES";
42     
43    case OBJECTS_RTEMS_PARTITIONS:
44      return "RTEMS_PARTITIONS";
45     
46    case OBJECTS_RTEMS_REGIONS:
47      return "RTEMS_REGIONS";
48     
49    case OBJECTS_RTEMS_PORTS:
50      return "RTEMS_PORTS";
51     
52    case OBJECTS_RTEMS_PERIODS:
53      return "RTEMS_PERIODS";
54     
55    case OBJECTS_RTEMS_EXTENSIONS:
56      return "RTEMS_EXTENSIONS";
57     
58    case OBJECTS_POSIX_KEYS:
59      return "POSIX_KEYS";
60     
61    case OBJECTS_POSIX_INTERRUPTS:
62      return "POSIX_INTERRUPTS";
63     
64    case OBJECTS_POSIX_MESSAGE_QUEUES:
65      return "POSIX_MESSAGE_QUEUES";
66     
67    case OBJECTS_POSIX_MUTEXES:
68      return "POSIX_MUTEXES";
69     
70    case OBJECTS_POSIX_SEMAPHORES:
71      return "POSIX_SEMAPHORES";
72     
73    case OBJECTS_POSIX_CONDITION_VARIABLES:
74      return "POSIX_CONDITION_VARIABLES";
75     
76    case OBJECTS_ITRON_EVENTFLAGS:
77      return "ITRON_EVENTFLAGS";
78     
79    case OBJECTS_ITRON_MAILBOXES:
80      return "ITRON_MAILBOXES";
81     
82    case OBJECTS_ITRON_MESSAGE_BUFFERS:   
83       return "ITRON_MESSAGE_BUFFERS";
84       
85    case OBJECTS_ITRON_PORTS:
86      return "ITRON_PORTS";
87     
88    case OBJECTS_ITRON_SEMAPHORES:
89      return "ITRON_SEMAPHORES";
90     
91    case OBJECTS_ITRON_VARIABLE_MEMORY_POOLS:
92      return "ITRON_VARIABLE_MEMORY_POOLS";
93     
94    case OBJECTS_ITRON_FIXED_MEMORY_POOLS:
95      return "ITRON_FIXED_MEMORY_POOLS";
96     
97    default:
98      return "UNKNOWN";
99  }
100}
101
102
103/*
104 *  Return a pointer to a string describing the thread state
105 */
106
107const char * _Thread_State_to_String( States_Control state )
108{
109  States_Control orig_state = state;
110  int i;
111  int first_entry = TRUE;
112  static char buffer[256];
113  static const char *desc[] = {
114    "READY",                          /* 0 - 0x00000 */
115    "DORMANT",                        /* 1 - 0x00001 */
116    "SUSPENDED",                      /* 2 - 0x00002 */
117    "TRANSIENT",                      /* 3 - 0x00004 */
118    "DELAYING",                       /* 4 - 0x00008 */
119    "WAITING_FOR_TIME",               /* 5 - 0x00010 */
120    "WAITING_FOR_BUFFER",             /* 6 - 0x00020 */
121    "WAITING_FOR_SEGMENT",            /* 7 - 0x00040 */
122    "WAITING_FOR_MESSAGE",            /* 8 - 0x00080 */
123    "WAITING_FOR_EVENT",              /* 9 - 0x00100 */
124    "WAITING_FOR_SEMAPHORE",          /* 10 - 0x00200 */
125    "WAITING_FOR_MUTEX",              /* 11 - 0x00400 */
126    "WAITING_FOR_CONDITION_VARIABLE", /* 12 - 0x00800 */
127    "WAITING_FOR_JOIN_AT_EXIT",       /* 13 - 0x01000 */
128    "WAITING_FOR_RPC_REPLY",          /* 14 - 0x02000 */
129    "WAITING_FOR_PERIOD",             /* 15 - 0x04000 */
130    "WAITING_FOR_SIGNAL",             /* 16 - 0x08000 */
131    "INTERRUPTIBLE_BY_SIGNAL",        /* 17 - 0x10000 */
132    "UNKNOWN"                         /* 18 - all higher bits */
133  };
134
135  if( state == STATES_READY )
136    return desc[0];
137   
138  memset( buffer, '\0', sizeof( buffer ) );
139  for ( i = 1; i < 18; i++ ) {
140    if ( state & 0x1 ) {
141      if ( !first_entry ) {
142        strcat ( buffer, " | " );
143      }
144      strcat ( buffer, desc[i] );
145      first_entry = FALSE;
146    }
147    state = state >> 1;
148  }
149
150  if ( state != 0 ) {
151    if ( !first_entry ) {
152      strcat ( buffer, " | " );
153    }
154    strcat ( buffer, desc[18] );
155  }
156
157  return buffer;
158}
159
160
161/*
162 *  Callback function to print out thread Ids, thread priorities, and thread stack
163 *  information.
164 */
165
166unsigned32 print_thread_info( Thread_Control *thread, void * arg )
167{
168  printf( "Thread ID 0x%08x at "PTR_MASK"\n", thread->Object.id, (PTR)thread );
169  printf( "\ttype = %s\n", _Objects_Type_to_String( &(thread->Object) ) );
170  printf( "\tstate = %s\n", _Thread_State_to_String( thread->current_state ) );
171  printf( "\treal priority = %d\n", thread->real_priority );
172  printf( "\tcurrent priority = %d\n", thread->current_priority );
173  printf( "\tstack base = "PTR_MASK"\n", (PTR)thread->Start.Initial_stack.area );
174  printf( "\tstack size = 0x%08x\n", thread->Start.Initial_stack.size );
175  /* printf( "\tstack pointer = "PTR_MASK"\n", */
176  printf( "\n" );
177  return 0;
178}
Note: See TracBrowser for help on using the repository browser.