blob: e14d6095b0197a2712d0ace0c7157223baed53dc [file] [log] [blame]
Matthias Hertelb73eaf32016-07-22 15:18:56 +02001<?xml version="1.0" encoding="utf-8"?>
Matthias Hertelb73eaf32016-07-22 15:18:56 +02002<component_viewer schemaVersion="0.1" xmlns:xs="http://www.w3.org/2001/XMLSchema-instance" xs:noNamespaceSchemaLocation="Component_Viewer.xsd">
3 <component name="RTOS" version="5.0.0"/> <!-- name and version of the component -->
4
5 <typedefs>
Robert Rostohare6ffbc42016-09-14 10:35:53 +02006 <!-- Thread Control Block -->
Matthias Hertelb73eaf32016-07-22 15:18:56 +02007 <typedef name="os_thread_t" info="" size="60">
8 <member name="id" type="uint8_t" offset="0" info="Object Identifier"/>
9 <member name="state" type="uint8_t" offset="1" info="Object State">
10 <enum name="osThreadInactive" value="0" info=""/>
11 <enum name="osThreadReady" value="1" info=""/>
12 <enum name="osThreadRunning" value="2" info=""/>
13 <enum name="osThreadWaiting" value="3" info=""/>
14 <enum name="osThreadSuspended" value="4" info=""/>
15 <enum name="osThreadTerminated" value="5" info=""/>
16 <enum name="osThreadError" value="-1" info=""/>
17
18 <enum name="Waiting Delay" value="0x13" info=""/>
19 <enum name="Waiting Join" value="0x23" info=""/>
20 <enum name="Waiting ThreadFlags" value="0x33" info=""/>
21 <enum name="Waiting EventFlags" value="0x43" info=""/>
22 <enum name="Waiting Mutex" value="0x53" info=""/>
23 <enum name="Waiting Semaphore" value="0x63" info=""/>
24 <enum name="Waiting MemoryPool" value="0x73" info=""/>
25 <enum name="Waiting MessageGet" value="0x83" info=""/>
26 <enum name="Waiting MessagePut" value="0x93" info=""/>
27 </member>
28 <member name="flags" type="uint8_t" offset="2" info="Object Flags"/>
29 <member name="attr" type="uint8_t" offset="3" info="Object Attributes"/>
30 <member name="name" type="uint32_t" offset="4" info="Object name (type is *uint8_t)"/>
31
32 <member name="thread_next" type="*os_thread_t" offset="8" info="Link pointer to next Thread in Object list"/>
33 <member name="thread_prev" type="*os_thread_t" offset="12" info="Link pointer to previous Thread in Object list"/>
34 <member name="delay_next" type="*os_thread_t" offset="16" info="Link pointer to next Thread in Delay list"/>
35 <member name="delay_prev" type="*os_thread_t" offset="20" info="Link pointer to previous Thread in Delay list"/>
36 <member name="thread_join" type="*os_thread_t" offset="24" info="Thread waiting to Join"/>
37
38 <member name="delay" type="uint32_t" offset="28" info="Delay time"/>
39 <member name="priority" type="int8_t" offset="32" info="Thread priority">
40 <enum name="osPriorityNone" value="0" info=""/>
41 <enum name="osPriorityIdle" value="1" info=""/>
42 <enum name="osPriorityLow" value="8" info=""/>
43 <enum name="osPriorityLow1" value="8+1" info=""/>
44 <enum name="osPriorityLow2" value="8+2" info=""/>
45 <enum name="osPriorityLow3" value="8+3" info=""/>
46 <enum name="osPriorityLow4" value="8+4" info=""/>
47 <enum name="osPriorityLow5" value="8+5" info=""/>
48 <enum name="osPriorityLow6" value="8+6" info=""/>
49 <enum name="osPriorityLow7" value="8+7" info=""/>
50 <enum name="osPriorityBelowNormal" value="16" info=""/>
51 <enum name="osPriorityBelowNormal1" value="16+1" info=""/>
52 <enum name="osPriorityBelowNormal2" value="16+2" info=""/>
53 <enum name="osPriorityBelowNormal3" value="16+3" info=""/>
54 <enum name="osPriorityBelowNormal4" value="16+4" info=""/>
55 <enum name="osPriorityBelowNormal5" value="16+5" info=""/>
56 <enum name="osPriorityBelowNormal6" value="16+6" info=""/>
57 <enum name="osPriorityBelowNormal7" value="16+7" info=""/>
58 <enum name="osPriorityNormal" value="24" info=""/>
59 <enum name="osPriorityNormal1" value="24+1" info=""/>
60 <enum name="osPriorityNormal2" value="24+2" info=""/>
61 <enum name="osPriorityNormal3" value="24+3" info=""/>
62 <enum name="osPriorityNormal4" value="24+4" info=""/>
63 <enum name="osPriorityNormal5" value="24+5" info=""/>
64 <enum name="osPriorityNormal6" value="24+6" info=""/>
65 <enum name="osPriorityNormal7" value="24+7" info=""/>
66 <enum name="osPriorityAboveNormal" value="32" info=""/>
67 <enum name="osPriorityAboveNormal1" value="32+1" info=""/>
68 <enum name="osPriorityAboveNormal2" value="32+2" info=""/>
69 <enum name="osPriorityAboveNormal3" value="32+3" info=""/>
70 <enum name="osPriorityAboveNormal4" value="32+4" info=""/>
71 <enum name="osPriorityAboveNormal5" value="32+5" info=""/>
72 <enum name="osPriorityAboveNormal6" value="32+6" info=""/>
73 <enum name="osPriorityAboveNormal7" value="32+7" info=""/>
74 <enum name="osPriorityHigh" value="40" info=""/>
75 <enum name="osPriorityHigh1" value="40+1" info=""/>
76 <enum name="osPriorityHigh2" value="40+2" info=""/>
77 <enum name="osPriorityHigh3" value="40+3" info=""/>
78 <enum name="osPriorityHigh4" value="40+4" info=""/>
79 <enum name="osPriorityHigh5" value="40+5" info=""/>
80 <enum name="osPriorityHigh6" value="40+6" info=""/>
81 <enum name="osPriorityHigh7" value="40+7" info=""/>
82 <enum name="osPriorityRealtime" value="48" info=""/>
83 <enum name="osPriorityRealtime1" value="48+1" info=""/>
84 <enum name="osPriorityRealtime2" value="48+2" info=""/>
85 <enum name="osPriorityRealtime3" value="48+3" info=""/>
86 <enum name="osPriorityRealtime4" value="48+4" info=""/>
87 <enum name="osPriorityRealtime5" value="48+5" info=""/>
88 <enum name="osPriorityRealtime6" value="48+6" info=""/>
89 <enum name="osPriorityRealtime7" value="48+7" info=""/>
90 <enum name="osPriorityISR" value="56" info=""/>
91 <enum name="osPriorityError" value="-1" info=""/>
92 </member>
93 <member name="priority_base" type="int8_t" offset="33" info="Base priority"/>
94 <member name="stack_frame" type="uint8_t" offset="34" info="Stack frame"/>
95 <member name="flags_options" type="uint8_t" offset="35" info="Thread/Event flags options"/>
96 <member name="wait_flags" type="int32_t" offset="36" info="Waiting Thread/Event flags"/>
97 <member name="thread_flags" type="int32_t" offset="40" info="Thread flags"/>
98 <member name="mutex_list" type="*os_mutex_t" offset="44" info="Link pointer to list of owned mutexes"/>
99 <member name="stack_mem" type="uint32_t" offset="48" info="Stack memory (type is void *)"/>
100 <member name="stack_size" type="uint32_t" offset="52" info="Stack size"/>
101 <member name="sp" type="uint32_t" offset="56" info="Current stack pointer"/>
102
Robert Rostohare6ffbc42016-09-14 10:35:53 +0200103 <var name="cb_id" type="uint8_t" info="Component View ID"/>
104 <var name="cb_valid" type="uint32_t" info="Control Block validation status (valid=1, invalid=0)"/>
Matthias Hertelb73eaf32016-07-22 15:18:56 +0200105
Robert Rostohare6ffbc42016-09-14 10:35:53 +0200106 <var name="ex_delay" type="uint32_t" info="Calculated execution delay"/>
Matthias Hertelb73eaf32016-07-22 15:18:56 +0200107
Robert Rostohare6ffbc42016-09-14 10:35:53 +0200108 <var name="stack_val" type="uint32_t" info="Stack usage: analysis result"/>
109 <var name="stack_cur" type="uint32_t" info="Stack usage: current (in percent)"/>
110 <var name="stack_maxb" type="uint32_t" info="Stack usage: maximum (in bytes)"/>
111 <var name="stack_maxp" type="uint32_t" info="Stack usage: maximum (in percent)"/>
112 <var name="stack_over" type="uint8_t" info="Stack usage: overflow"/>
Matthias Hertelb73eaf32016-07-22 15:18:56 +0200113 </typedef>
114
Robert Rostohare6ffbc42016-09-14 10:35:53 +0200115 <!-- Timer Control Block -->
Matthias Hertelb73eaf32016-07-22 15:18:56 +0200116 <typedef name="os_timer_t" info="" size="32">
117 <member name="id" type="uint8_t" offset="0" info="Object Identifier"/>
118 <member name="state" type="uint8_t" offset="1" info="Object State">
119 <enum name="Inactive" value="0" info="Timer is not active"/>
120 <enum name="Stopped" value="1" info="Timer is stopped"/>
121 <enum name="Running" value="2" info="Timer is running"/>
122 </member>
123 <member name="flags" type="uint8_t" offset="2" info="Object Flags"/>
124 <member name="type" type="uint8_t" offset="3" info="Timer Type">
125 <enum name="osTimerOnce" value="0" info="One-shot timer"/>
126 <enum name="osTimerPeriodic" value="1" info="Periodic timer"/>
127 </member>
128 <member name="name" type="uint32_t" offset="4" info="Object name (type is *uint8_t)"/>
129 <member name="prev" type="*os_timer_t" offset="8" info="Pointer to previous active timer"/>
130 <member name="next" type="*os_timer_t" offset="12" info="Pointer to next active timer"/>
131 <member name="tick" type="uint32_t" offset="16" info="Timer current tick"/>
132 <member name="load" type="uint32_t" offset="20" info="Timer load value"/>
Robert Rostohare6ffbc42016-09-14 10:35:53 +0200133 <!-- Inlined "os_timer_finfo_t" structure -->
Matthias Hertelb73eaf32016-07-22 15:18:56 +0200134 <member name="finfo_fp" type="uint32_t" offset="24" info="Timer function pointer (type is void *)"/>
135 <member name="finfo_arg" type="uint32_t" offset="28" info="Timer function argument (type is void *)"/>
136
Robert Rostohare6ffbc42016-09-14 10:35:53 +0200137 <var name="cb_valid" type="uint32_t" info="Control Block validation status (valid=1, invalid=0)"/>
138 <var name="ex_tick" type="uint32_t" info="Calculated absolute tick time"/>
Matthias Hertelb73eaf32016-07-22 15:18:56 +0200139 </typedef>
140
Robert Rostohare6ffbc42016-09-14 10:35:53 +0200141 <!-- Event Flags Control Block -->
Matthias Hertelb73eaf32016-07-22 15:18:56 +0200142 <typedef name="os_event_flags_t" info="" size="16">
143 <member name="id" type="uint8_t" offset="0" info="Object Identifier"/>
144 <member name="state" type="uint8_t" offset="1" info="Object State"/>
145 <member name="flags" type="uint8_t" offset="2" info="Object Flags"/>
146 <member name="reserved" type="uint8_t" offset="3" info=""/>
147 <member name="name" type="uint32_t" offset="4" info="Object name (type is *uint8_t)"/>
148 <member name="thread_list" type="*os_thread_t" offset="8" info="Waiting threads list"/>
149 <member name="event_flags" type="int32_t" offset="12" info="Event flags"/>
150
Robert Rostohare6ffbc42016-09-14 10:35:53 +0200151 <var name="cb_valid" type="uint32_t" info="Control Block validation status (valid=1, invalid=0)"/>
152 <var name="wl_idx" type="uint32_t" info="EventFlags waiting list (EWL) index" />
153 <var name="wl_cnt" type="uint32_t" info="Number of threads waiting for event flags" />
Matthias Hertelb73eaf32016-07-22 15:18:56 +0200154 </typedef>
155
Robert Rostohare6ffbc42016-09-14 10:35:53 +0200156 <!-- Mutex Control Block -->
Matthias Hertelb73eaf32016-07-22 15:18:56 +0200157 <typedef name="os_mutex_t" info="" size="28">
158 <member name="id" type="uint8_t" offset="0" info="Object Identifier"/>
159 <member name="state" type="uint8_t" offset="1" info="Object State"/>
160 <member name="flags" type="uint8_t" offset="2" info="Object Flags"/>
161 <member name="attr" type="uint8_t" offset="3" info="Object Attributes"/>
162 <member name="name" type="uint32_t" offset="4" info="Object name (type is *uint8_t)"/>
163 <member name="thread_list" type="*os_thread_t" offset="8" info="Waiting threads list"/>
164 <member name="owner_thread" type="*os_thread_t" offset="12" info="Owner thread"/>
165 <member name="owner_prev" type="*os_mutex_t" offset="16" info="Pointer to previous owned mutex"/>
166 <member name="owner_next" type="*os_mutex_t" offset="20" info="Pointer to next owned mutex"/>
167 <member name="lock" type="uint8_t" offset="24" info="Lock counter"/>
168
Robert Rostohare6ffbc42016-09-14 10:35:53 +0200169 <var name="cb_valid" type="uint32_t" info="Control Block validation status (valid=1, invalid=0)"/>
170 <var name="wl_idx" type="uint32_t" info="Mutex waiting list (MWL) index" />
171 <var name="wl_cnt" type="uint32_t" info="Number of threads waiting for current mutex" />
Matthias Hertelb73eaf32016-07-22 15:18:56 +0200172 </typedef>
173
Robert Rostohare6ffbc42016-09-14 10:35:53 +0200174 <!-- Semaphore Control Block -->
Matthias Hertelb73eaf32016-07-22 15:18:56 +0200175 <typedef name="os_semaphore_t" info="" size="16">
176 <member name="id" type="uint8_t" offset="0" info="Object Identifier"/>
177 <member name="state" type="uint8_t" offset="1" info="Object State"/>
178 <member name="flags" type="uint8_t" offset="2" info="Object Flags"/>
179 <member name="reserved" type="uint8_t" offset="3" info=""/>
180 <member name="name" type="uint32_t" offset="4" info="Object name (type is *uint8_t)"/>
181 <member name="thread_list" type="*os_thread_t" offset="8" info="Waiting threads list"/>
182 <member name="tokens" type="uint16_t" offset="12" info="Current number of tokens"/>
183 <member name="max_tokens" type="uint16_t" offset="14" info="Maximum number of tokens"/>
184
Robert Rostohare6ffbc42016-09-14 10:35:53 +0200185 <var name="cb_valid" type="uint32_t" info="Control Block validation status (valid=1, invalid=0)"/>
186 <var name="wl_idx" type="uint32_t" info="Semaphore waiting list (SWL) index" />
187 <var name="wl_cnt" type="uint32_t" info="Number of threads waiting for current semaphore" />
Matthias Hertelb73eaf32016-07-22 15:18:56 +0200188 </typedef>
189
Robert Rostohare6ffbc42016-09-14 10:35:53 +0200190 <!-- Memory Pool Information -->
Matthias Hertelb73eaf32016-07-22 15:18:56 +0200191 <typedef name="os_mp_info_t" info="Memory pool information" size="24">
192 <member name="max_blocks" type="uint32_t" offset="0" info="Maximum number of blocks"/>
193 <member name="used_blocks" type="uint32_t" offset="4" info="Number of used blocks"/>
194 <member name="block_size" type="uint32_t" offset="8" info="Block size"/>
195 <member name="block_base" type="uint32_t" offset="12" info="Block memory base address (type is void *)"/>
196 <member name="block_lim" type="uint32_t" offset="16" info="Block memory limit address (type is void *)"/>
197 <member name="block_free" type="uint32_t" offset="20" info="First free block address (type is void *)"/>
198 </typedef>
199
Robert Rostohare6ffbc42016-09-14 10:35:53 +0200200 <!-- Memory Pool Control Block -->
Matthias Hertelb73eaf32016-07-22 15:18:56 +0200201 <typedef name="os_memory_pool_t" info="" size="36">
202 <member name="id" type="uint8_t" offset="0" info="Object Identifier"/>
203 <member name="state" type="uint8_t" offset="1" info="Object State"/>
204 <member name="flags" type="uint8_t" offset="2" info="Object Flags"/>
205 <member name="reserved" type="uint8_t" offset="3" info=""/>
206 <member name="name" type="uint32_t" offset="4" info="Object name (type is *uint8_t)"/>
207 <member name="thread_list" type="*os_thread_t" offset="8" info="Waiting threads list"/>
208
Robert Rostohare6ffbc42016-09-14 10:35:53 +0200209 <!-- Inlined "os_mp_info_t" structure -->
Matthias Hertelb73eaf32016-07-22 15:18:56 +0200210 <member name="max_blocks" type="uint32_t" offset="12+0" info="Maximum number of blocks"/>
211 <member name="used_blocks" type="uint32_t" offset="12+4" info="Number of used blocks"/>
212 <member name="block_size" type="uint32_t" offset="12+8" info="Block size"/>
213 <member name="block_base" type="uint32_t" offset="12+12" info="Block memory base address (type is void *)"/>
214 <member name="block_lim" type="uint32_t" offset="12+16" info="Block memory limit address (type is void *)"/>
215 <member name="block_free" type="uint32_t" offset="12+20" info="First free block address (type is void *)"/>
216
Robert Rostohare6ffbc42016-09-14 10:35:53 +0200217 <var name="cb_valid" type="uint32_t" info="Control Block validation status (valid=1, invalid=0)"/>
218 <var name="wl_idx" type="uint32_t" info="Memory Pool waiting list (PWL) index" />
219 <var name="wl_cnt" type="uint32_t" info="Number of threads waiting for memory pool" />
Matthias Hertelb73eaf32016-07-22 15:18:56 +0200220 </typedef>
221
Robert Rostohare6ffbc42016-09-14 10:35:53 +0200222 <!-- Message Control Block -->
Matthias Hertelb73eaf32016-07-22 15:18:56 +0200223 <typedef name="os_message_t" info="" size="12">
224 <member name="id" type="uint8_t" offset="0" info="Object Identifier"/>
225 <member name="state" type="uint8_t" offset="1" info="Object State"/>
226 <member name="flags" type="uint8_t" offset="2" info="Object Flags"/>
227 <member name="priority" type="uint8_t" offset="3" info="Message priority"/>
228 <member name="prev" type="*os_message_t" offset="4" info="Pointer to previous message"/>
229 <member name="next" type="*os_message_t" offset="8" info="Pointer to next message"/>
230 </typedef>
231
Robert Rostohare6ffbc42016-09-14 10:35:53 +0200232 <!-- Message Queue Control Block -->
Matthias Hertelb73eaf32016-07-22 15:18:56 +0200233 <typedef name="os_message_queue_t" info="" size="52">
234 <member name="id" type="uint8_t" offset="0" info="Object Identifier"/>
235 <member name="state" type="uint8_t" offset="1" info="Object State"/>
236 <member name="flags" type="uint8_t" offset="2" info="Object Flags"/>
237 <member name="reserved" type="uint8_t" offset="3" info=""/>
238 <member name="name" type="uint32_t" offset="4" info="Object name (type is *uint8_t)"/>
239 <member name="thread_list" type="*os_thread_t" offset="8" info="Waiting threads list"/>
240
Robert Rostohare6ffbc42016-09-14 10:35:53 +0200241 <!-- Inlined "os_mp_info_t" structure -->
Matthias Hertelb73eaf32016-07-22 15:18:56 +0200242 <member name="max_blocks" type="uint32_t" offset="12+0" info="Maximum number of blocks"/>
243 <member name="used_blocks" type="uint32_t" offset="12+4" info="Number of used blocks"/>
244 <member name="block_size" type="uint32_t" offset="12+8" info="Block size"/>
245 <member name="block_base" type="uint32_t" offset="12+12" info="Block memory base address (type is void *)"/>
246 <member name="block_lim" type="uint32_t" offset="12+16" info="Block memory limit address (type is void *)"/>
247 <member name="block_free" type="uint32_t" offset="12+20" info="First free block address (type is void *)"/>
248
249 <member name="msg_size" type="uint32_t" offset="36" info="Message size"/>
250 <member name="msg_count" type="uint32_t" offset="40" info="Number of queued messages"/>
251 <member name="msg_first" type="*os_message_t" offset="44" info="Pointer to first message"/>
252 <member name="msg_last" type="*os_message_t" offset="48" info="Pointer to last message"/>
253
Robert Rostohare6ffbc42016-09-14 10:35:53 +0200254 <var name="cb_valid" type="uint32_t" info="Control Block validation status (valid=1, invalid=0)"/>
255 <var name="wl_idx" type="uint32_t" info="Waiting list index (QWL)" />
256 <var name="wl_cnt" type="uint32_t" info="Number of threads waiting" />
Matthias Hertelb73eaf32016-07-22 15:18:56 +0200257 </typedef>
258
Robert Rostohare6ffbc42016-09-14 10:35:53 +0200259 <!-- Generic Object Control Block -->
Matthias Hertelb73eaf32016-07-22 15:18:56 +0200260 <typedef name="os_object_t" info="" size="12">
261 <member name="id" type="uint8_t" offset="0" info="Object Identifier"/>
262 <member name="state" type="uint8_t" offset="1" info="Object State"/>
263 <member name="flags" type="uint8_t" offset="2" info="Object Flags"/>
264 <member name="reserved" type="uint8_t" offset="3" info=""/>
265 <member name="name" type="uint32_t" offset="4" info="Object name (type is *uint8_t)"/>
266 <member name="thread_list" type="*os_thread_t" offset="8" info="Threads list"/>
267 </typedef>
268
Robert Rostohare6ffbc42016-09-14 10:35:53 +0200269 <!-- OS Runtime Information structure -->
Matthias Hertelb73eaf32016-07-22 15:18:56 +0200270 <typedef name="os_info_t" info="OS Runtime Information" size="168">
271 <member name="os_id" type="uint32_t" offset="0" info="OS Identification (type is *uint8_t)"/>
272 <member name="version" type="uint32_t" offset="4" info="OS Version"/>
273 <member name="kernel_state" type="uint8_t" offset="8" info="Kernel state">
274 <enum name="osKernelInactive" value="0" info="Inactive"/>
275 <enum name="osKernelReady" value="1" info="Ready"/>
276 <enum name="osKernelRunning" value="2" info="Running"/>
277 <enum name="osKernelLocked" value="3" info="Locked"/>
278 <enum name="osKernelSuspended" value="4" info="Suspended"/>
279 <enum name="osKernelError" value="5" info="Error"/>
280 </member>
281 <member name="kernel_blocked" type="uint8_t" offset="9" info="Kernel blocked"/>
282 <member name="kernel_pendISR" type="uint8_t" offset="10" info="Kernel pending ISR"/>
283 <member name="kernel_pendSV" type="uint8_t" offset="11" info="Kernel pending SV"/>
284 <member name="kernel_usec_ticks" type="uint32_t" offset="12" info="Kernel microsec ticks"/>
285 <member name="kernel_time" type="uint64_t" offset="16" info="Kernel time in milisec"/>
286
287 <member name="tick_irqn" type="int32_t" offset="24" info="Tick timer IRQ number"/>
288
289 <member name="thread_run_curr" type="*os_thread_t" offset="28" info="Current running thread"/>
290 <member name="thread_run_next" type="*os_thread_t" offset="32" info="Next thread to run"/>
291
Robert Rostohare6ffbc42016-09-14 10:35:53 +0200292 <!-- Inlined "os_object_t" structure at offset: 36 -->
Matthias Hertelb73eaf32016-07-22 15:18:56 +0200293 <!-- <member name="thread_ready" type="os_object_t" offset="36" info="Ready list object"/>-->
294 <member name="thread_ready_id" type="uint8_t" offset="36+0" info="Object Identifier" />
295 <member name="thread_ready_state" type="uint8_t" offset="36+1" info="Object State" />
296 <member name="thread_ready_flags" type="uint8_t" offset="36+2" info="Object Flags" />
297 <member name="thread_ready_rsvd" type="uint8_t" offset="36+3" info="Reserved" />
298 <member name="thread_ready_name" type="uint32_t" offset="36+4" info="Object Name (type is *uint8_t)" />
299 <member name="thread_ready_thread_list" type="*os_thread_t" offset="36+8" info="Threads List" />
300
301 <member name="thread_idle" type="*os_thread_t" offset="48" info="Idle thread"/>
302 <member name="thread_delay_list" type="*os_thread_t" offset="52" info="Delay list"/>
303 <member name="thread_suspended_list" type="*os_thread_t" offset="56" info="Suspended thread list"/>
304 <member name="thread_terminated_list" type="*os_thread_t" offset="60" info="Terminated thread list"/>
305
306 <member name="thread_robin_thread" type="*os_thread_t" offset="64" info="Round Robin thread"/>
307 <member name="thread_robin_tick" type="uint32_t" offset="68" info="Round Robin time tick"/>
308 <member name="thread_timeout" type="uint32_t" offset="72" info="Round Robin timeout"/>
309
310 <member name="timer_list" type="*os_timer_t" offset="76" info="Active timer list"/>
311 <member name="timer_thread" type="*os_thread_t" offset="80" info="Timer thread"/>
312 <member name="timer_mq" type="*os_message_queue_t" offset="84" info="Timer message queue"/>
313
314 <member name="isr_queue_max" type="uint16_t" offset="88" info="Maximum items"/>
315 <member name="isr_queue_cnt" type="uint16_t" offset="90" info="Item count"/>
316 <member name="isr_queue_in" type="uint16_t" offset="92" info="Incoming item index"/>
317 <member name="isr_queue_out" type="uint16_t" offset="94" info="Outgoing item index"/>
318 <member name="isr_queue_data" type="uint32_t" offset="96" info="Queue data (value is void **)"/>
319
320 <member name="post_process_thread" type="uint32_t" offset="100" info="Thread post processing function (value is func *)"/>
321 <member name="post_process_event_flags" type="uint32_t" offset="104" info="Event flags post processing function (value is func *)"/>
322 <member name="post_process_semaphore" type="uint32_t" offset="108" info="Semaphore post processing function (value is func *)"/>
323 <member name="post_process_memory_pool" type="uint32_t" offset="112" info="Memory pool post processing function (value is func *)"/>
324 <member name="post_process_message_queue" type="uint32_t" offset="116" info="Message queue post processing function (value is func *)"/>
325
Robert Rostohare6ffbc42016-09-14 10:35:53 +0200326 <member name="mem_stack" type="uint32_t" offset="120" info="Stack memory (value is void *)"/>
327 <member name="mem_mp_data" type="uint32_t" offset="124" info="Memory pool data memory (value is void *)"/>
328 <member name="mem_mq_data" type="uint32_t" offset="128" info="Message queue Data memory (value is void *)"/>
Matthias Hertelb73eaf32016-07-22 15:18:56 +0200329 <member name="mem_common" type="uint32_t" offset="132" info="Common memory address (value is void *)"/>
330
331 <member name="mpi_stack" type="*os_mp_info_t" offset="136" info="Stack for threads"/>
332 <member name="mpi_thread" type="*os_mp_info_t" offset="140" info="Thread control blocks"/>
333 <member name="mpi_timer" type="*os_mp_info_t" offset="144" info="Timer control blocks"/>
334 <member name="mpi_event_flags" type="*os_mp_info_t" offset="148" info="Event flags control blocks"/>
335 <member name="mpi_mutex" type="*os_mp_info_t" offset="152" info="Mutex control blocks"/>
336 <member name="mpi_semaphore" type="*os_mp_info_t" offset="156" info="Semaphore control blocks"/>
337 <member name="mpi_memory_pool" type="*os_mp_info_t" offset="160" info="Memory pool control blocks"/>
338 <member name="mpi_message_queue" type="*os_mp_info_t" offset="164" info="Message queue control blocks"/>
339 </typedef>
340
Robert Rostohare6ffbc42016-09-14 10:35:53 +0200341 <!-- OS Configuration structure -->
342 <typedef name="os_config_t" const="1" info="OS Configuration Structure" size="100">
Matthias Hertelb73eaf32016-07-22 15:18:56 +0200343 <member name="flags" type="uint32_t" offset="0" info="OS configuration flags"/>
344 <member name="robin_timeout" type="uint32_t" offset="4" info="Round Robim timeout tick"/>
345 <member name="isr_queue_data" type="uint32_t" offset="8" info="ISR post processing queue (value is void **)"/>
346 <member name="isr_queue_max" type="uint16_t" offset="12" info="Maximum data"/>
347 <member name="isr_queue_padding" type="uint16_t" offset="14" info="Padding bytes"/>
348
Robert Rostohare6ffbc42016-09-14 10:35:53 +0200349 <member name="mem_stack_addr" type="uint32_t" offset="16" info="Stack memory address"/>
350 <member name="mem_stack_size" type="uint32_t" offset="20" info="Stack memory size"/>
351 <member name="mem_mp_data_addr" type="uint32_t" offset="24" info="Memory pool data memory address"/>
352 <member name="mem_mp_data_size" type="uint32_t" offset="28" info="Memory pool data memory size"/>
353 <member name="mem_mq_data_addr" type="uint32_t" offset="32" info="Message queue data memory address"/>
354 <member name="mem_mq_data_size" type="uint32_t" offset="36" info="Message queue data memory size"/>
Matthias Hertelb73eaf32016-07-22 15:18:56 +0200355 <member name="mem_common_addr" type="uint32_t" offset="40" info="Common memory address"/>
356 <member name="mem_common_size" type="uint32_t" offset="44" info="Common memory size"/>
357
358 <member name="mpi_stack" type="*os_mp_info_t" offset="48" info="Stack for threads"/>
359 <member name="mpi_thread" type="*os_mp_info_t" offset="52" info="Thread control blocks"/>
360 <member name="mpi_timer" type="*os_mp_info_t" offset="56" info="Timer control blocks"/>
361 <member name="mpi_event_flags" type="*os_mp_info_t" offset="60" info="Event flags control blocks"/>
362 <member name="mpi_mutex" type="*os_mp_info_t" offset="64" info="Mutex control blocks"/>
363 <member name="mpi_semaphore" type="*os_mp_info_t" offset="68" info="Semaphore control blocks"/>
364 <member name="mpi_memory_pool" type="*os_mp_info_t" offset="72" info="Memory pool control blocks"/>
365 <member name="mpi_message_queue" type="*os_mp_info_t" offset="76" info="Message queue control blocks"/>
366
367 <member name="thread_stack_size" type="uint32_t" offset="80" info="Default thread stack size"/>
368 <member name="idle_thread_attr" type="uint32_t" offset="84" info="Idle thread attributes (value is osThreadAttr_s *)"/>
369 <member name="timer_thread_attr" type="uint32_t" offset="88" info="Timer thread attributes (value is osThreadAttr_s *)"/>
370 <member name="timer_mq_attr" type="uint32_t" offset="92" info="Timer message queue attributes (value is osMessageQueueAttr_s *)"/>
371 <member name="timer_mq_mcnt" type="uint32_t" offset="96" info="Timer message queue maximum messages"/>
372 </typedef>
373
374 <!-- Memory Pool Header -->
375 <typedef name="mem_head_t" info="Memory Pool Header Structure" size="8">
376 <member name="size" type="uint32_t" offset="0" info="Memory pool size"/>
377 <member name="used" type="uint32_t" offset="4" info="Size of used memory"/>
378 </typedef>
379
380 <!-- Memory Block Header + Object Header -->
381 <typedef name="mem_block_t" info="Memory Block Header Structure" size="9">
382 <member name="next" type="*mem_block_t" offset="0" info="Next memory block"/>
383 <member name="len" type="uint32_t" offset="4" info="Memory block size"/>
384 <member name="id" type="uint8_t" offset="8" info="Object Identifier"/>
385 </typedef>
386
387 </typedefs>
388
389 <objects>
390 <object name="RTX RTOS Object">
391 <var name="i" type="uint32_t" value="0" />
392 <var name="j" type="uint32_t" value="0" />
393 <var name="k" type="uint32_t" value="0" />
394 <var name="sp" type="uint32_t" value="0" />
395 <var name="addr" type="uint32_t" value="0" />
396
397 <var name="TCB_En" type="uint8_t" value="0" />
398 <var name="CCB_En" type="uint8_t" value="0" />
399 <var name="SCB_En" type="uint8_t" value="0" />
400 <var name="MCB_En" type="uint8_t" value="0" />
401 <var name="ECB_En" type="uint8_t" value="0" />
402 <var name="PCB_En" type="uint8_t" value="0" />
403 <var name="QCB_En" type="uint8_t" value="0" />
404
405 <!-- Read main OS information and configuration structures -->
406 <readlist name="os_Info" type="os_info_t" symbol="os_Info" count="1" init="1"/>
407 <readlist name="os_Config" type="os_config_t" symbol="os_Config" count="1" init="1"/>
408
409 <var name="stack_check" type="uint8_t" value="__Symbol_exists(&quot;os_ThreadStackCheck&quot;)"/>
410 <var name="stack_wmark" type="uint8_t" value="(os_Config.flags >> 1) &amp; 1"/>
411
412 <!-- Read ISR FIFO queue -->
Robert Rostohare6ffbc42016-09-14 10:35:53 +0200413 <read name="ISR_FIFO" type="uint32_t" offset="os_Config.isr_queue_data" size="os_Config.isr_queue_max"/>
Matthias Hertelb73eaf32016-07-22 15:18:56 +0200414
415 <!-- Read idle and timer thread control blocks -->
416 <readlist name="TCB" cond="os_Info.thread_idle" type="os_thread_t" offset="os_Info.thread_idle" count="1" />
417 <readlist name="TCB" cond="os_Info.timer_thread" type="os_thread_t" offset="os_Info.timer_thread" count="1" />
418
419 <!-- Read thread control blocks (MPI) -->
420 <readlist name="mp_thread" cond="os_Info.mpi_thread" type="os_mp_info_t" offset="os_Info.mpi_thread" count="1" init="1"/>
421 <readlist name="TCB" cond="os_Info.mpi_thread" type="os_thread_t" offset="mp_thread.block_base" count="mp_thread.max_blocks" />
422
423 <!-- Read timer control blocks (MPI) -->
424 <readlist name="mp_timer" cond="os_Info.mpi_timer" type="os_mp_info_t" offset="os_Info.mpi_timer" count="1" init="1"/>
425 <readlist name="CCB" cond="os_Info.mpi_timer" type="os_timer_t" offset="mp_timer.block_base" count="mp_timer.max_blocks" />
426
427 <!-- Read event flags control blocks (MPI) -->
428 <readlist name="mp_events" cond="os_Info.mpi_event_flags" type="os_mp_info_t" offset="os_Info.mpi_event_flags" count="1" init="1"/>
429 <readlist name="ECB" cond="os_Info.mpi_event_flags" type="os_event_flags_t" offset="mp_events.block_base" count="mp_events.max_blocks" />
430
431 <!-- Read mutex control blocks (MPI) -->
432 <readlist name="mp_mutex" cond="os_Info.mpi_mutex" type="os_mp_info_t" offset="os_Info.mpi_mutex" count="1" init="1"/>
433 <readlist name="MCB" cond="os_Info.mpi_mutex" type="os_mutex_t" offset="mp_mutex.block_base" count="mp_mutex.max_blocks" />
434
435 <!-- Read semaphore control blocks (MPI) -->
436 <readlist name="mp_semaphore" cond="os_Info.mpi_semaphore" type="os_mp_info_t" offset="os_Info.mpi_semaphore" count="1" init="1"/>
437 <readlist name="SCB" cond="os_Info.mpi_semaphore" type="os_semaphore_t" offset="mp_semaphore.block_base" count="mp_semaphore.max_blocks" />
438
439 <!-- Read memory pool control blocks (MPI) -->
440 <readlist name="mp_mpool" cond="os_Info.mpi_memory_pool" type="os_mp_info_t" offset="os_Info.mpi_memory_pool" count="1" init="1"/>
441 <readlist name="PCB" cond="os_Info.mpi_memory_pool" type="os_memory_pool_t" offset="mp_mpool.block_base" count="mp_mpool.max_blocks" />
442
443 <!-- Read message queue control blocks (MPI) -->
444 <readlist name="mp_mqueue" cond="os_Info.mpi_message_queue" type="os_mp_info_t" offset="os_Info.mpi_message_queue" count="1" init="1"/>
445 <readlist name="QCB" cond="os_Info.mpi_message_queue" type="os_message_queue_t" offset="mp_mqueue.block_base" count="mp_mqueue.max_blocks" />
446
447 <!-- Read control block memory pool info (MEM) -->
Robert Rostohare6ffbc42016-09-14 10:35:53 +0200448<!--
Matthias Hertelb73eaf32016-07-22 15:18:56 +0200449 <readlist name="mem_cb_head" cond="os_Info.mem_cb" type="mem_head_t" offset="os_Info.mem_cb" count="1" init="1"/>
450 <readlist name="mem_cb" cond="os_Info.mem_cb" type="mem_block_t" offset="os_Info.mem_cb + 8" next="next"/>
Robert Rostohare6ffbc42016-09-14 10:35:53 +0200451-->
452 <readlist name="mem_cb" cond="0" type="mem_block_t" offset="0" next="next"/>
Matthias Hertelb73eaf32016-07-22 15:18:56 +0200453
454 <list cond="mem_cb._count > 1" name="i" start="0" limit="mem_cb._count-1">
455 <calc>
456 addr = mem_cb[i]._addr;
457 addr += 8;
458 </calc>
459
460 <!-- Read Thread Control Block -->
461 <readlist cond="mem_cb[i].id == 1" name="TCB" type="os_thread_t" offset="addr" count="1" />
462
463 <!-- Read Timer Control Block -->
464 <readlist cond="mem_cb[i].id == 2" name="CCB" type="os_timer_t" offset="addr" count="1" />
465
466 <!-- Read EventFlags Control Block -->
467 <readlist cond="mem_cb[i].id == 3" name="ECB" type="os_event_flags_t" offset="addr" count="1" />
468
469 <!-- Read Mutex Control Block -->
470 <readlist cond="mem_cb[i].id == 4" name="MCB" type="os_mutex_t" offset="addr" count="1" />
471
472 <!-- Read Semaphore Control Block -->
473 <readlist cond="mem_cb[i].id == 5" name="SCB" type="os_semaphore_t" offset="addr" count="1" />
474
475 <!-- Read MemoryPool Control Block -->
476 <readlist cond="mem_cb[i].id == 6" name="PCB" type="os_memory_pool_t" offset="addr" count="1" />
477
478 <!-- Read MessageQueue Control Block -->
479 <readlist cond="mem_cb[i].id == 8" name="QCB" type="os_message_queue_t" offset="addr" count="1" />
480 </list>
481
482 <!-- Validate and process Thread control blocks -->
483 <list name="i" start="0" limit="TCB._count">
484 <calc>
485 TCB[i].cb_valid = (TCB[i].id == 1) &amp;&amp; (TCB[i].state != 0) &amp;&amp; (TCB[i].sp != 0);
486 TCB[i].cb_id = 2;
487 </calc>
488 <calc cond="TCB[i]._addr == os_Info.timer_thread">
489 TCB[i].cb_id = 1;
490 </calc>
491 <calc cond="TCB[i]._addr == os_Info.thread_idle">
492 TCB[i].cb_id = 0;
493 </calc>
494
495 <!-- Determine stack usage -->
496 <calc cond="TCB[i].sp != 0">
497 TCB[i].stack_val = __CalcMemUsed (TCB[i].stack_mem, TCB[i].stack_size, 0xCCCCCCCC, 0xE25A2EA5);
498 TCB[i].stack_over = TCB[i].stack_val >> 31;
499 TCB[i].stack_maxb = TCB[i].stack_over ? TCB[i].stack_size : TCB[i].stack_val &amp; 0xFFFFF;
500 TCB[i].stack_maxp = TCB[i].stack_over ? 100 : (TCB[i].stack_val >> 20) &amp; 0x1FF;
501 </calc>
502
503 <!-- Stack pointer for running thread -->
504 <calc cond="TCB[i].state == 2">
505 sp = __GetRegVal ("PSP");
506 </calc>
507
508 <!-- Stack pointer for waiting thread -->
509 <calc cond="TCB[i].state != 2">
510 sp = TCB[i].sp;
511 </calc>
512
513 <!-- Determine current stack usage -->
514 <calc cond="TCB[i].sp != 0">
515 TCB[i].stack_cur = TCB[i].stack_mem + TCB[i].stack_size;
516 TCB[i].stack_cur -= sp;
517 TCB[i].stack_cur *= 100;
518 TCB[i].stack_cur /= TCB[i].stack_size;
519 </calc>
520
521 <calc>
522 TCB[i].ex_delay = TCB[i].delay;
523 </calc>
524
525 <!-- Create Thread Delay List (TDL) -->
Robert Rostohare6ffbc42016-09-14 10:35:53 +0200526<!-- <readlist name="TDL" type="os_thread_t" offset="TCB[i].delay_prev" next="delay_prev" while="TCB[i].delay_prev != 0" init="1"/> -->
527 <readlist name="TDL" type="os_thread_t" offset="TCB[i].delay_prev" next="delay_prev" init="1"/>
Matthias Hertelb73eaf32016-07-22 15:18:56 +0200528
529 <list name="j" start="0" limit="TDL._count" >
530 <calc>
531 TCB[i].ex_delay += TDL[j].delay;
532 </calc>
533 </list>
534 </list>
535
536 <!-- Validate and process Timer control blocks -->
537 <list name="i" start="0" limit="CCB._count">
538 <calc>
539 CCB[i].cb_valid = (CCB[i].id == 2) &amp;&amp; (CCB[i].state != 0);
540 CCB[i].ex_tick = CCB[i].tick;
541 </calc>
542
543 <!-- Create Timer Execution List (TEL) -->
Robert Rostohare6ffbc42016-09-14 10:35:53 +0200544<!-- <readlist name="TEL" type="os_timer_t" offset="CCB[i].prev" next="prev" while="CCB[i].prev != 0" init="1"/> -->
545 <readlist name="TEL" type="os_timer_t" offset="CCB[i].prev" next="prev" init="1"/>
Matthias Hertelb73eaf32016-07-22 15:18:56 +0200546
547 <list name="j" start="0" limit="TEL._count">
548 <calc>
549 CCB[i].ex_tick += TEL[j].tick;
550 </calc>
551 </list>
552 </list>
553
554 <!-- Validate and process EventFlags control blocks -->
555 <calc> k = 0; </calc>
556
557 <list name="i" start="0" limit="ECB._count">
558 <calc>
559 ECB[i].cb_valid = (ECB[i].id == 3) &amp;&amp; (ECB[i].state == 1);
560 ECB[i].wl_idx = k;
561 </calc>
562
563 <!-- Create a list of threads waiting for event flags -->
564 <readlist name="EWL" type="os_thread_t" offset="ECB[i].thread_list" next="thread_next" />
565
566 <calc>
567 ECB[i].wl_cnt = (EWL._count - k);
568 k = EWL._count;
569 </calc>
570 </list>
571
572 <!-- Validate and process Mutex control blocks -->
573 <calc> k = 0; </calc>
574
575 <list cond="MCB._count" name="i" start="0" limit="MCB._count">
576 <calc>
577 MCB[i].cb_valid = (MCB[i].id == 4) &amp;&amp; (MCB[i].state == 1);
578 MCB[i].wl_idx = k;
579 </calc>
580
581 <!-- Create a list of threads waiting for mutex -->
582 <readlist name="MWL" type="os_thread_t" offset="MCB[i].thread_list" next="thread_next" />
583
584 <calc>
585 MCB[i].wl_cnt = (MWL._count - k);
586 k = MWL._count;
587 </calc>
588 </list>
589
590
591 <!-- Validate and process semaphore control blocks -->
592 <calc> k = 0; </calc>
593
594 <list cond="SCB._count" name="i" start="0" limit="SCB._count">
595 <calc>
596 SCB[i].cb_valid = (SCB[i].id == 5) &amp;&amp; (SCB[i].state == 1);
597 SCB[i].wl_idx = k;
598 </calc>
599
600 <!-- Create a list of threads waiting for semaphore -->
601 <readlist name="SWL" type="os_thread_t" offset="SCB[i].thread_list" next="thread_next" />
602
603 <calc>
604 SCB[i].wl_cnt = (SWL._count - k);
605 k = SWL._count;
606 </calc>
607 </list>
608
609 <!-- Validate and process MemoryPool control blocks -->
610 <calc> k = 0; </calc>
611
612 <list cond="PCB._count" name="i" start="0" limit="PCB._count">
613 <calc>
614 PCB[i].cb_valid = (PCB[i].id == 6) &amp;&amp; (PCB[i].state == 1);
615 PCB[i].wl_idx = k;
616 </calc>
617
618 <!-- Create a list of threads waiting for memory pool -->
619 <readlist name="PWL" type="os_thread_t" offset="PCB[i].thread_list" next="thread_next" />
620
621 <calc>
622 PCB[i].wl_cnt = (PWL._count - k);
623 k = PWL._count;
624 </calc>
625 </list>
626
627
628 <!-- Validate and process MessageQueue control blocks -->
629 <calc> k = 0; </calc>
630
631 <list cond="QCB._count" name="i" start="0" limit="QCB._count">
632 <calc>
633 QCB[i].cb_valid = (QCB[i].id == 8) &amp;&amp; (QCB[i].state == 1);
634 QCB[i].wl_idx = k;
635 </calc>
636
637 <!-- Create a list of threads waiting for message queue -->
638 <readlist name="QWL" type="os_thread_t" offset="QCB[i].thread_list" next="thread_next" />
639
640 <calc>
641 QCB[i].wl_cnt = (QWL._count - k);
642 k = QWL._count;
643 </calc>
644 </list>
645
646 <!-- Determine what to display -->
647 <list cond="TCB._count" name="i" start="0" limit="TCB._count">
648 <calc>TCB_En += TCB[i].cb_valid; </calc>
649 </list>
650 <list cond="CCB._count" name="i" start="0" limit="CCB._count">
651 <calc>CCB_En += CCB[i].cb_valid; </calc>
652 </list>
653 <list cond="SCB._count" name="i" start="0" limit="SCB._count">
654 <calc>SCB_En += SCB[i].cb_valid; </calc>
655 </list>
656 <list cond="MCB._count" name="i" start="0" limit="MCB._count">
657 <calc>MCB_En += MCB[i].cb_valid; </calc>
658 </list>
659 <list cond="ECB._count" name="i" start="0" limit="ECB._count">
660 <calc>ECB_En += ECB[i].cb_valid; </calc>
661 </list>
662 <list cond="PCB._count" name="i" start="0" limit="PCB._count">
663 <calc>PCB_En += PCB[i].cb_valid; </calc>
664 </list>
665 <list cond="QCB._count" name="i" start="0" limit="QCB._count">
666 <calc>QCB_En += QCB[i].cb_valid; </calc>
667 </list>
668
669 <out name="RTX RTOS">
670 <!-- System -->
671 <item property="System" value="">
672 <item property="Kernel State" value="%E[os_Info.kernel_state]" />
673 <item property="Round Robin Timeout" cond="os_Config.robin_timeout > 0" value="%d[os_Config.robin_timeout]ms" />
674 <item property="Round Robin Timeout" cond="os_Config.robin_timeout == 0" value="Disabled" />
675 <item property="Stack Overrun Check" value="%t[stack_check ? &quot;Enabled&quot; : &quot;Disabled&quot;]" />
676 <item property="Stack Usage Watermark" value="%t[stack_wmark ? &quot;Enabled&quot; : &quot;Disabled&quot;]" />
677 <item property="Default Thread Stack Size" value="%d[os_Config.thread_stack_size]" />
678
679 <item property="ISR FIFO Queue" value="Size: %d[os_Info.isr_queue_max], Used: %d[os_Info.isr_queue_cnt]">
680 <list name="i" start="0" limit="os_Info.isr_queue_max">
681 <item property="data[%d[i]]" value="%x[ISR_FIFO[i]]" />
682 </list>
683 </item>
684 </item>
685
686 <!-- Threads -->
687 <item cond="TCB_En" property="Threads" value="">
688 <list name="i" start="0" limit="TCB._count">
689
690 <!-- Idle Thread -->
691 <item cond="TCB[i].cb_valid &amp;&amp; (TCB[i].cb_id == 0)" property="id: %x[TCB[i]._addr], Idle thread" value="%E[TCB[i].state &amp; 0x07], %E[TCB[i].priority]">
692
693 <item property="Stack Usage" value="Cur: %d[TCB[i].stack_cur]%%, Max: %d[TCB[i].stack_maxp]%% [ %d[TCB[i].stack_maxb]/%d[TCB[i].stack_size] ]"
694 cond="stack_wmark != 0"/>
695
696 <item property="Stack Usage" value="Cur: %d[TCB[i].stack_cur]%%"
697 cond="stack_wmark == 0"/>
698
699 <item property="Stack Overflow" cond="TCB[i].stack_over != 0" value="Overflow detected"/>
700 </item>
701
702 <!-- Timer Thread -->
703 <item cond="TCB[i].cb_valid &amp;&amp; (TCB[i].cb_id == 1)" property="id: %x[TCB[i]._addr], Timer thread" value="%E[TCB[i].state &amp; 0x07], %E[TCB[i].priority]">
704
705 <item property="Stack Usage" value="Cur: %d[TCB[i].stack_cur]%%, Max: %d[TCB[i].stack_maxp]%% [ %d[TCB[i].stack_maxb]/%d[TCB[i].stack_size] ]"
706 cond="stack_wmark != 0"/>
707
708 <item property="Stack Usage" value="Cur: %d[TCB[i].stack_cur]%%"
709 cond="stack_wmark == 0"/>
710
711 <item property="Stack Overflow" cond="TCB[i].stack_over != 0" value="Overflow detected"/>
712 </item>
713
714 <!-- Application threads -->
715 <item cond="TCB[i].cb_valid &amp;&amp; (TCB[i].cb_id &gt; 1)" property="id: %x[TCB[i]._addr]" value="%E[TCB[i].state &amp; 0x07], %E[TCB[i].priority]">
716 <item property="Delay time" value="%d[TCB[i].ex_delay]ms"/>
717 <item property="Delay reason" value="%E[TCB[i].state]" cond="(TCB[i].state &amp; 0x07) == 3"/>
718
719 <item property="Stack Usage" value="Cur: %d[TCB[i].stack_cur]%%, Max: %d[TCB[i].stack_maxp]%% [ %d[TCB[i].stack_maxb]/%d[TCB[i].stack_size] ]"
720 cond="stack_wmark != 0"/>
721
722 <item property="Stack Usage" value="Cur: %d[TCB[i].stack_cur]%%"
723 cond="stack_wmark == 0"/>
724
725 <item property="Stack Overrun" cond="TCB[i].stack_over != 0" value="Overrun detected"/>
726 </item>
727 </list>
728 </item>
729
730 <!-- Timers -->
731 <item cond="CCB_En" property="Timers" value="">
732 <list name="i" start="0" limit="CCB._count">
733 <item cond="CCB[i].cb_valid" property="id: %x[CCB[i]._addr], %E[CCB[i].type]" value="Tick: %d[CCB[i].ex_tick]ms, Period: %d[CCB[i].load]ms">
734 <item property="State" value="%E[CCB[i].state]" />
735 <item property="Registered callback" value="Func: %S[CCB[i].finfo_fp], Arg: %x[CCB[i].finfo_arg]" />
736 </item>
737 </list>
738 </item>
739
740 <!-- Semaphores -->
741 <item cond="SCB_En" property="Semaphores" value="">
742 <list name="i" start="0" limit="SCB._count">
743 <item cond="SCB[i].cb_valid" property="id: %x[SCB[i]._addr]" value="Tokens: %d[SCB[i].tokens], Max: %d[SCB[i].max_tokens]">
744
745 <!-- Waiting thread list -->
746 <item cond="SCB[i].wl_cnt" property="Threads waiting (%d[SCB[i].wl_cnt])" value="">
747
748 <list name="j" start="SCB[i].wl_idx" limit="SCB[i].wl_idx + SCB[i].wl_cnt">
749 <list name="k" start="0" limit="TCB._count">
750 <item cond="SWL[j].stack_mem == TCB[k].stack_mem" property="id: %x[TCB[k]._addr]" value="Delay: %d[TCB[k].ex_delay], %E[TCB[k].priority]"/>
751 </list>
752 </list>
753
754 </item>
755 </item>
756 </list>
757 </item>
758
759 <!-- Mutexes -->
760 <item cond="MCB_En" property="Mutexes" value="">
761 <list name="i" start="0" limit="MCB._count">
762 <item cond="MCB[i].cb_valid" property="id: %x[MCB[i]._addr]" value="Lock counter: %d[MCB[i].lock]">
763
764 <item property="Owner thread" value="id: %x[MCB[i].owner_thread]"/>
765
766 <!-- Waiting thread list -->
767 <item cond="MCB[i].wl_cnt" property="Threads waiting (%d[MCB[i].wl_cnt])" value="">
768
769 <list name="j" start="MCB[i].wl_idx" limit="MCB[i].wl_idx + MCB[i].wl_cnt">
770 <list name="k" start="0" limit="TCB._count">
771 <item cond="MWL[j].stack_mem == TCB[k].stack_mem" property="id: %x[TCB[k]._addr]" value="Delay: %d[TCB[k].ex_delay], %E[TCB[k].priority]"/>
772 </list>
773 </list>
774
775 </item>
776 </item>
777 </list>
778 </item>
779
780 <!-- Event Flags -->
781 <item cond="ECB_En" property="Event Flags" value="">
782 <list name="i" start="0" limit="ECB._count">
783 <item cond="ECB[i].cb_valid" property="id: %x[ECB[i]._addr]" value="Flags: %x[ECB[i].event_flags]">
784
785 <!-- Waiting thread list -->
786 <item cond="ECB[i].wl_cnt" property="Threads waiting (%d[ECB[i].wl_cnt])" value="">
787
788 <list name="j" start="ECB[i].wl_idx" limit="ECB[i].wl_idx + ECB[i].wl_cnt">
789 <list name="k" start="0" limit="TCB._count">
790 <item cond="EWL[j].stack_mem == TCB[k].stack_mem" property="id: %x[TCB[k]._addr]" value="Delay: %d[TCB[k].ex_delay], %E[TCB[k].priority]"/>
791 </list>
792 </list>
793
794 </item>
795 </item>
796 </list>
797 </item>
798
799 <!-- Memory Pool -->
800 <item cond="PCB_En" property="Memory Pool" value="">
801 <list name="i" start="0" limit="PCB._count">
802 <item cond="PCB[i].cb_valid" property="id: %x[PCB[i]._addr]" value="Blocks Used: %d[PCB[i].used_blocks], Max: %d[PCB[i].max_blocks]">
803
804 <item property="Block size" value="%d[PCB[i].block_size] bytes"/>
805
806 <!-- Waiting thread list -->
807 <item cond="PCB[i].wl_cnt" property="Threads waiting (%d[PCB[i].wl_cnt])" value="">
808
809 <list name="j" start="PCB[i].wl_idx" limit="PCB[i].wl_idx + PCB[i].wl_cnt">
810 <list name="k" start="0" limit="TCB._count">
811 <item cond="PWL[j].stack_mem == TCB[k].stack_mem" property="id: %x[TCB[k]._addr]" value="Delay: %d[TCB[k].ex_delay], %E[TCB[k].priority]"/>
812 </list>
813 </list>
814
815 </item>
816 </item>
817 </list>
818 </item>
819
820 <!-- Message Queue -->
821 <item cond="QCB_En" property="Message Queue" value="">
822 <list name="i" start="0" limit="QCB._count">
823 <item cond="QCB[i].cb_valid" property="id: %x[QCB[i]._addr]" value="Messages: %d[QCB[i].used_blocks], Max: %d[QCB[i].max_blocks]">
824
825 <item property="Message size" value="Max: %d[QCB[i].msg_size] bytes"/>
826
827 <!-- Waiting thread list -->
828 <item cond="QCB[i].wl_cnt" property="Threads waiting (%d[QCB[i].wl_cnt])" value="">
829
830 <list name="j" start="QCB[i].wl_idx" limit="QCB[i].wl_idx + QCB[i].wl_cnt">
831 <list name="k" start="0" limit="TCB._count">
832 <item cond="QWL[j].stack_mem == TCB[k].stack_mem" property="id: %x[TCB[k]._addr]" value="Delay: %d[TCB[k].ex_delay], %E[TCB[k].priority]"/>
833 </list>
834 </list>
835
836 </item>
837 </item>
838 </list>
839 </item>
840
841 </out>
842 </object>
843 </objects>
844</component_viewer>