]> git.sur5r.net Git - freertos/blob - Demo/ARM7_LPC2138_Rowley/threads.js
Change optimisation level.
[freertos] / Demo / ARM7_LPC2138_Rowley / threads.js
1 function decode_stack(sp)\r
2 {\r
3   var i;\r
4   var a = new Array();\r
5 \r
6   var current_task;\r
7 \r
8   current_task = Debug.evaluate("pxCurrentTCB");\r
9 \r
10   if( current_task == 0 )\r
11     return;\r
12 \r
13   sp += 4; /* skip stored ulCriticalNesting */\r
14   a[16] = Debug.evaluate("*(unsigned long*)" + sp); \r
15 \r
16   for (i = 0; i <= 15; i++)\r
17   {\r
18     sp += 4;\r
19     a[i] = Debug.evaluate("*(unsigned long*)" + sp); \r
20   }\r
21 \r
22   return a;\r
23 }\r
24 \r
25 function add_task(task, state)\r
26 {\r
27   var tcb, task_name;\r
28 \r
29   var current_task;\r
30 \r
31   current_task = Debug.evaluate("pxCurrentTCB");\r
32 \r
33   if( current_task == 0 )\r
34     return;\r
35 \r
36   tcb = Debug.evaluate("*(tskTCB *)" + task);\r
37   task_name = Debug.evaluate("(char*)&(*(tskTCB *)" + task + ").pcTaskName[0]");\r
38   Threads.add("#" + tcb.uxTCBNumber + " \"" + task_name + "\"", tcb.uxPriority, state, decode_stack(tcb.pxTopOfStack));\r
39 }\r
40 \r
41 function add_list(list, state, current_task)\r
42 {\r
43   var i, index, item, end;\r
44   var current_task;\r
45 \r
46   current_task = Debug.evaluate("pxCurrentTCB");\r
47 \r
48   if( current_task == 0 )\r
49     return;\r
50 \r
51   if (list.uxNumberOfItems)\r
52   {\r
53     index = list.pxIndex;\r
54     end = list.xListEnd;\r
55     for (i = 0; i < list.uxNumberOfItems; i++)\r
56     {\r
57       item = Debug.evaluate("*(xListItem *)" + index);\r
58       if (index != end)\r
59       {\r
60         task = item.pvOwner;\r
61         if (task) add_task(task, (task == current_task) ? "executing" : state);\r
62       }\r
63       index = item.pxNext;\r
64     }\r
65   }\r
66 }\r
67 \r
68 function update() \r
69 {\r
70   var i, current_task, list, lists, max_priority;\r
71 \r
72   Threads.clear();\r
73 \r
74   current_task = Debug.evaluate("pxCurrentTCB");\r
75 \r
76   if( current_task == 0 )\r
77     return;\r
78 \r
79   Threads.newqueue("Ready");\r
80   lists = Debug.evaluate("pxReadyTasksLists");\r
81   if (lists)\r
82   { \r
83     max_priority = Debug.evaluate("uxTopUsedPriority");\r
84     max_priority = Debug.evaluate("*(long *)" + max_priority);\r
85 \r
86     for (i = 0; i <= max_priority; i++)\r
87     {\r
88       list = Debug.evaluate("((xList*)" + lists + ")[" + (max_priority - i) + "]");\r
89       add_list(list, "ready", current_task);\r
90     }\r
91   }\r
92 \r
93   Threads.newqueue("Blocked");\r
94 \r
95   list = Debug.evaluate("pxDelayedTaskList");\r
96   if (list)\r
97   {\r
98     list = Debug.evaluate("**(xList **)" + list);\r
99     add_list(list, "blocked");\r
100   }\r
101 \r
102   list = Debug.evaluate("pxOverflowDelayedTaskList");\r
103   if (list)\r
104   {\r
105     list = Debug.evaluate("**(xList **)" + list);\r
106     add_list(list, "blocked");\r
107   }\r
108 \r
109   Threads.newqueue("Suspended");\r
110 \r
111   list = Debug.evaluate("xSuspendedTaskList");\r
112   if (list)\r
113   {\r
114     list = Debug.evaluate("*(xList *)" + list);\r
115     add_list(list, "suspended");\r
116   }\r
117 }\r
118 \r