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