Matthias Hertel | b73eaf3 | 2016-07-22 15:18:56 +0200 | [diff] [blame] | 1 | <?xml version="1.0" encoding="utf-8"?> |
Matthias Hertel | b73eaf3 | 2016-07-22 15:18:56 +0200 | [diff] [blame] | 2 | <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 Rostohar | e6ffbc4 | 2016-09-14 10:35:53 +0200 | [diff] [blame^] | 6 | <!-- Thread Control Block --> |
Matthias Hertel | b73eaf3 | 2016-07-22 15:18:56 +0200 | [diff] [blame] | 7 | <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 Rostohar | e6ffbc4 | 2016-09-14 10:35:53 +0200 | [diff] [blame^] | 103 | <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 Hertel | b73eaf3 | 2016-07-22 15:18:56 +0200 | [diff] [blame] | 105 | |
Robert Rostohar | e6ffbc4 | 2016-09-14 10:35:53 +0200 | [diff] [blame^] | 106 | <var name="ex_delay" type="uint32_t" info="Calculated execution delay"/> |
Matthias Hertel | b73eaf3 | 2016-07-22 15:18:56 +0200 | [diff] [blame] | 107 | |
Robert Rostohar | e6ffbc4 | 2016-09-14 10:35:53 +0200 | [diff] [blame^] | 108 | <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 Hertel | b73eaf3 | 2016-07-22 15:18:56 +0200 | [diff] [blame] | 113 | </typedef> |
| 114 | |
Robert Rostohar | e6ffbc4 | 2016-09-14 10:35:53 +0200 | [diff] [blame^] | 115 | <!-- Timer Control Block --> |
Matthias Hertel | b73eaf3 | 2016-07-22 15:18:56 +0200 | [diff] [blame] | 116 | <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 Rostohar | e6ffbc4 | 2016-09-14 10:35:53 +0200 | [diff] [blame^] | 133 | <!-- Inlined "os_timer_finfo_t" structure --> |
Matthias Hertel | b73eaf3 | 2016-07-22 15:18:56 +0200 | [diff] [blame] | 134 | <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 Rostohar | e6ffbc4 | 2016-09-14 10:35:53 +0200 | [diff] [blame^] | 137 | <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 Hertel | b73eaf3 | 2016-07-22 15:18:56 +0200 | [diff] [blame] | 139 | </typedef> |
| 140 | |
Robert Rostohar | e6ffbc4 | 2016-09-14 10:35:53 +0200 | [diff] [blame^] | 141 | <!-- Event Flags Control Block --> |
Matthias Hertel | b73eaf3 | 2016-07-22 15:18:56 +0200 | [diff] [blame] | 142 | <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 Rostohar | e6ffbc4 | 2016-09-14 10:35:53 +0200 | [diff] [blame^] | 151 | <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 Hertel | b73eaf3 | 2016-07-22 15:18:56 +0200 | [diff] [blame] | 154 | </typedef> |
| 155 | |
Robert Rostohar | e6ffbc4 | 2016-09-14 10:35:53 +0200 | [diff] [blame^] | 156 | <!-- Mutex Control Block --> |
Matthias Hertel | b73eaf3 | 2016-07-22 15:18:56 +0200 | [diff] [blame] | 157 | <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 Rostohar | e6ffbc4 | 2016-09-14 10:35:53 +0200 | [diff] [blame^] | 169 | <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 Hertel | b73eaf3 | 2016-07-22 15:18:56 +0200 | [diff] [blame] | 172 | </typedef> |
| 173 | |
Robert Rostohar | e6ffbc4 | 2016-09-14 10:35:53 +0200 | [diff] [blame^] | 174 | <!-- Semaphore Control Block --> |
Matthias Hertel | b73eaf3 | 2016-07-22 15:18:56 +0200 | [diff] [blame] | 175 | <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 Rostohar | e6ffbc4 | 2016-09-14 10:35:53 +0200 | [diff] [blame^] | 185 | <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 Hertel | b73eaf3 | 2016-07-22 15:18:56 +0200 | [diff] [blame] | 188 | </typedef> |
| 189 | |
Robert Rostohar | e6ffbc4 | 2016-09-14 10:35:53 +0200 | [diff] [blame^] | 190 | <!-- Memory Pool Information --> |
Matthias Hertel | b73eaf3 | 2016-07-22 15:18:56 +0200 | [diff] [blame] | 191 | <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 Rostohar | e6ffbc4 | 2016-09-14 10:35:53 +0200 | [diff] [blame^] | 200 | <!-- Memory Pool Control Block --> |
Matthias Hertel | b73eaf3 | 2016-07-22 15:18:56 +0200 | [diff] [blame] | 201 | <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 Rostohar | e6ffbc4 | 2016-09-14 10:35:53 +0200 | [diff] [blame^] | 209 | <!-- Inlined "os_mp_info_t" structure --> |
Matthias Hertel | b73eaf3 | 2016-07-22 15:18:56 +0200 | [diff] [blame] | 210 | <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 Rostohar | e6ffbc4 | 2016-09-14 10:35:53 +0200 | [diff] [blame^] | 217 | <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 Hertel | b73eaf3 | 2016-07-22 15:18:56 +0200 | [diff] [blame] | 220 | </typedef> |
| 221 | |
Robert Rostohar | e6ffbc4 | 2016-09-14 10:35:53 +0200 | [diff] [blame^] | 222 | <!-- Message Control Block --> |
Matthias Hertel | b73eaf3 | 2016-07-22 15:18:56 +0200 | [diff] [blame] | 223 | <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 Rostohar | e6ffbc4 | 2016-09-14 10:35:53 +0200 | [diff] [blame^] | 232 | <!-- Message Queue Control Block --> |
Matthias Hertel | b73eaf3 | 2016-07-22 15:18:56 +0200 | [diff] [blame] | 233 | <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 Rostohar | e6ffbc4 | 2016-09-14 10:35:53 +0200 | [diff] [blame^] | 241 | <!-- Inlined "os_mp_info_t" structure --> |
Matthias Hertel | b73eaf3 | 2016-07-22 15:18:56 +0200 | [diff] [blame] | 242 | <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 Rostohar | e6ffbc4 | 2016-09-14 10:35:53 +0200 | [diff] [blame^] | 254 | <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 Hertel | b73eaf3 | 2016-07-22 15:18:56 +0200 | [diff] [blame] | 257 | </typedef> |
| 258 | |
Robert Rostohar | e6ffbc4 | 2016-09-14 10:35:53 +0200 | [diff] [blame^] | 259 | <!-- Generic Object Control Block --> |
Matthias Hertel | b73eaf3 | 2016-07-22 15:18:56 +0200 | [diff] [blame] | 260 | <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 Rostohar | e6ffbc4 | 2016-09-14 10:35:53 +0200 | [diff] [blame^] | 269 | <!-- OS Runtime Information structure --> |
Matthias Hertel | b73eaf3 | 2016-07-22 15:18:56 +0200 | [diff] [blame] | 270 | <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 Rostohar | e6ffbc4 | 2016-09-14 10:35:53 +0200 | [diff] [blame^] | 292 | <!-- Inlined "os_object_t" structure at offset: 36 --> |
Matthias Hertel | b73eaf3 | 2016-07-22 15:18:56 +0200 | [diff] [blame] | 293 | <!-- <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 Rostohar | e6ffbc4 | 2016-09-14 10:35:53 +0200 | [diff] [blame^] | 326 | <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 Hertel | b73eaf3 | 2016-07-22 15:18:56 +0200 | [diff] [blame] | 329 | <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 Rostohar | e6ffbc4 | 2016-09-14 10:35:53 +0200 | [diff] [blame^] | 341 | <!-- OS Configuration structure --> |
| 342 | <typedef name="os_config_t" const="1" info="OS Configuration Structure" size="100"> |
Matthias Hertel | b73eaf3 | 2016-07-22 15:18:56 +0200 | [diff] [blame] | 343 | <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 Rostohar | e6ffbc4 | 2016-09-14 10:35:53 +0200 | [diff] [blame^] | 349 | <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 Hertel | b73eaf3 | 2016-07-22 15:18:56 +0200 | [diff] [blame] | 355 | <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("os_ThreadStackCheck")"/> |
| 410 | <var name="stack_wmark" type="uint8_t" value="(os_Config.flags >> 1) & 1"/> |
| 411 | |
| 412 | <!-- Read ISR FIFO queue --> |
Robert Rostohar | e6ffbc4 | 2016-09-14 10:35:53 +0200 | [diff] [blame^] | 413 | <read name="ISR_FIFO" type="uint32_t" offset="os_Config.isr_queue_data" size="os_Config.isr_queue_max"/> |
Matthias Hertel | b73eaf3 | 2016-07-22 15:18:56 +0200 | [diff] [blame] | 414 | |
| 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 Rostohar | e6ffbc4 | 2016-09-14 10:35:53 +0200 | [diff] [blame^] | 448 | <!-- |
Matthias Hertel | b73eaf3 | 2016-07-22 15:18:56 +0200 | [diff] [blame] | 449 | <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 Rostohar | e6ffbc4 | 2016-09-14 10:35:53 +0200 | [diff] [blame^] | 451 | --> |
| 452 | <readlist name="mem_cb" cond="0" type="mem_block_t" offset="0" next="next"/> |
Matthias Hertel | b73eaf3 | 2016-07-22 15:18:56 +0200 | [diff] [blame] | 453 | |
| 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) && (TCB[i].state != 0) && (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 & 0xFFFFF; |
| 500 | TCB[i].stack_maxp = TCB[i].stack_over ? 100 : (TCB[i].stack_val >> 20) & 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 Rostohar | e6ffbc4 | 2016-09-14 10:35:53 +0200 | [diff] [blame^] | 526 | <!-- <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 Hertel | b73eaf3 | 2016-07-22 15:18:56 +0200 | [diff] [blame] | 528 | |
| 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) && (CCB[i].state != 0); |
| 540 | CCB[i].ex_tick = CCB[i].tick; |
| 541 | </calc> |
| 542 | |
| 543 | <!-- Create Timer Execution List (TEL) --> |
Robert Rostohar | e6ffbc4 | 2016-09-14 10:35:53 +0200 | [diff] [blame^] | 544 | <!-- <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 Hertel | b73eaf3 | 2016-07-22 15:18:56 +0200 | [diff] [blame] | 546 | |
| 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) && (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) && (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) && (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) && (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) && (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 ? "Enabled" : "Disabled"]" /> |
| 676 | <item property="Stack Usage Watermark" value="%t[stack_wmark ? "Enabled" : "Disabled"]" /> |
| 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 && (TCB[i].cb_id == 0)" property="id: %x[TCB[i]._addr], Idle thread" value="%E[TCB[i].state & 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 && (TCB[i].cb_id == 1)" property="id: %x[TCB[i]._addr], Timer thread" value="%E[TCB[i].state & 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 && (TCB[i].cb_id > 1)" property="id: %x[TCB[i]._addr]" value="%E[TCB[i].state & 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 & 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> |