/
monitor.c
92 lines (82 loc) · 1.71 KB
/
monitor.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#include "includes.h"
void _monitor_ps(unsigned char *params)
{
int i, printed;
char stat;
OS_TCB *p;
for(i = 0, printed = 0; i < OS_LO_PRIO + 1; ++i)
{
if(printed%23 == 0)
{
if(printed != 0)
{
OSPrintf("\npress any key to continue");
OSGetKey();
OSPrintf("\n");
}
OSPrintf("PRIO STAT DLY STACK ptr used NAME");
}
p = OSTCBPrioTbl[i];
if(p != NULL)
{
switch(p->OSTCBStat)
{
case OS_STAT_RDY:
if(p->OSTCBDly == 0)
stat = 'R';
else
stat = 'W';
break;
case OS_STAT_MBOX: stat = 'M'; break;
case OS_STAT_SEM: stat = 'S'; break;
case OS_STAT_Q: stat = 'Q'; break;
default: stat = 'U'; break;
}
OSPrintf("\n%4d%5c %08X %08X %08X %s",
(int)p->OSTCBPrio,
stat,
p->OSTCBDly,
p->OSTCBStkPtr,
(int)((char*)p->OSTCBInitialStkPtr - (char*)p->OSTCBStkPtr),
p->TaskName);
++printed;
}
}
OSPrintf("\n");
return;
}
struct
{
char *Name;
int NameLen;
void (*Func)(unsigned char *params);
} cmds[] =
{
{ "PS", 0, _monitor_ps },
{ NULL, 0, NULL }
};
void OSMonitorTask(void *data)
{
unsigned char s[128];
int i, j, badcmd;
for(i = 0; cmds[i].Name != NULL; ++i)
cmds[i].NameLen = strlen(cmds[i].Name);
while(1)
{
OSPrintf("monitor>");
OSGets(s);
if(s[0] == '\0')
continue;
for(i = 0; s[i] == ' ' && s[i] != '\0'; ++i)
;
badcmd = 1;
for(j = 0; cmds[j].Name != NULL; ++j)
if(!strncmp(cmds[j].Name, &s[i], cmds[j].NameLen))
{
cmds[j].Func(s + i + cmds[j].NameLen);
badcmd = 0;
}
if(badcmd)
OSPrintf("monitor: command not found\n");
}
}