SmartSnippets DA1459x SDK
SEGGER_SYSVIEW_FreeRTOS.h
1 /*********************************************************************
2 * SEGGER Microcontroller GmbH *
3 * The Embedded Experts *
4 **********************************************************************
5 * *
6 * (c) 1995 - 2021 SEGGER Microcontroller GmbH *
7 * *
8 * www.segger.com Support: support@segger.com *
9 * *
10 **********************************************************************
11 * *
12 * SEGGER SystemView * Real-time application analysis *
13 * *
14 **********************************************************************
15 * *
16 * All rights reserved. *
17 * *
18 * SEGGER strongly recommends to not make any changes *
19 * to or modify the source code of this software in order to stay *
20 * compatible with the SystemView and RTT protocol, and J-Link. *
21 * *
22 * Redistribution and use in source and binary forms, with or *
23 * without modification, are permitted provided that the following *
24 * condition is met: *
25 * *
26 * o Redistributions of source code must retain the above copyright *
27 * notice, this condition and the following disclaimer. *
28 * *
29 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND *
30 * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, *
31 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF *
32 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE *
33 * DISCLAIMED. IN NO EVENT SHALL SEGGER Microcontroller BE LIABLE FOR *
34 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR *
35 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT *
36 * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; *
37 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF *
38 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT *
39 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE *
40 * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH *
41 * DAMAGE. *
42 * *
43 **********************************************************************
44 * *
45 * SystemView version: 3.30 *
46 * *
47 **********************************************************************
48 -------------------------- END-OF-HEADER -----------------------------
49 
50 File : SEGGER_SYSVIEW_FreeRTOS.h
51 Purpose : Interface between FreeRTOS and SystemView.
52 Revision: $Rev: 7745 $
53 
54 Notes:
55  (1) Include this file at the end of FreeRTOSConfig.h
56 */
57 
58 #ifndef SYSVIEW_FREERTOS_H
59 #define SYSVIEW_FREERTOS_H
60 
61 #if (dg_configSYSTEMVIEW == 1)
62 
63 #include "SEGGER_SYSVIEW.h"
64 
65 /*********************************************************************
66 *
67 * Defines, configurable
68 *
69 **********************************************************************
70 */
71 #ifndef portSTACK_GROWTH
72  #define portSTACK_GROWTH ( -1 )
73 #endif
74 
75 #define SYSVIEW_FREERTOS_MAX_NOF_TASKS 16
76 
77 /*********************************************************************
78 *
79 * Defines, fixed
80 *
81 **********************************************************************
82 */
83 #define apiID_OFFSET (32u)
84 
85 #define apiID_VTASKALLOCATEMPUREGIONS (1u)
86 #define apiID_VTASKDELETE (2u)
87 #define apiID_VTASKDELAY (3u)
88 #define apiID_VTASKDELAYUNTIL (4u)
89 #define apiID_UXTASKPRIORITYGET (5u)
90 #define apiID_UXTASKPRIORITYGETFROMISR (6u)
91 #define apiID_ETASKGETSTATE (7u)
92 #define apiID_VTASKPRIORITYSET (8u)
93 #define apiID_VTASKSUSPEND (9u)
94 #define apiID_VTASKRESUME (10u)
95 #define apiID_XTASKRESUMEFROMISR (11u)
96 #define apiID_VTASKSTARTSCHEDULER (12u)
97 #define apiID_VTASKENDSCHEDULER (13u)
98 #define apiID_VTASKSUSPENDALL (14u)
99 #define apiID_XTASKRESUMEALL (15u)
100 #define apiID_XTASKGETTICKCOUNT (16u)
101 #define apiID_XTASKGETTICKCOUNTFROMISR (17u)
102 #define apiID_UXTASKGETNUMBEROFTASKS (18u)
103 #define apiID_PCTASKGETTASKNAME (19u)
104 #define apiID_UXTASKGETSTACKHIGHWATERMARK (20u)
105 #define apiID_VTASKSETAPPLICATIONTASKTAG (21u)
106 #define apiID_XTASKGETAPPLICATIONTASKTAG (22u)
107 #define apiID_VTASKSETTHREADLOCALSTORAGEPOINTER (23u)
108 #define apiID_PVTASKGETTHREADLOCALSTORAGEPOINTER (24u)
109 #define apiID_XTASKCALLAPPLICATIONTASKHOOK (25u)
110 #define apiID_XTASKGETIDLETASKHANDLE (26u)
111 #define apiID_UXTASKGETSYSTEMSTATE (27u)
112 #define apiID_VTASKLIST (28u)
113 #define apiID_VTASKGETRUNTIMESTATS (29u)
114 #define apiID_XTASKGENERICNOTIFY (30u)
115 #define apiID_XTASKGENERICNOTIFYFROMISR (31u)
116 #define apiID_XTASKNOTIFYWAIT (32u)
117 #define apiID_VTASKNOTIFYGIVEFROMISR (33u)
118 #define apiID_ULTASKNOTIFYTAKE (34u)
119 #define apiID_XTASKNOTIFYSTATECLEAR (35u)
120 #define apiID_XTASKGETCURRENTTASKHANDLE (36u)
121 #define apiID_VTASKSETTIMEOUTSTATE (37u)
122 #define apiID_XTASKCHECKFORTIMEOUT (38u)
123 #define apiID_VTASKMISSEDYIELD (39u)
124 #define apiID_XTASKGETSCHEDULERSTATE (40u)
125 #define apiID_VTASKPRIORITYINHERIT (41u)
126 #define apiID_XTASKPRIORITYDISINHERIT (42u)
127 #define apiID_XTASKGENERICCREATE (43u)
128 #define apiID_UXTASKGETTASKNUMBER (44u)
129 #define apiID_VTASKSETTASKNUMBER (45u)
130 #define apiID_VTASKSTEPTICK (46u)
131 #define apiID_ETASKCONFIRMSLEEPMODESTATUS (47u)
132 #define apiID_XTIMERCREATE (48u)
133 #define apiID_PVTIMERGETTIMERID (49u)
134 #define apiID_VTIMERSETTIMERID (50u)
135 #define apiID_XTIMERISTIMERACTIVE (51u)
136 #define apiID_XTIMERGETTIMERDAEMONTASKHANDLE (52u)
137 #define apiID_XTIMERPENDFUNCTIONCALLFROMISR (53u)
138 #define apiID_XTIMERPENDFUNCTIONCALL (54u)
139 #define apiID_PCTIMERGETTIMERNAME (55u)
140 #define apiID_XTIMERCREATETIMERTASK (56u)
141 #define apiID_XTIMERGENERICCOMMAND (57u)
142 #define apiID_XQUEUEGENERICSEND (58u)
143 #define apiID_XQUEUEPEEKFROMISR (59u)
144 #define apiID_XQUEUEGENERICRECEIVE (60u)
145 #define apiID_UXQUEUEMESSAGESWAITING (61u)
146 #define apiID_UXQUEUESPACESAVAILABLE (62u)
147 #define apiID_VQUEUEDELETE (63u)
148 #define apiID_XQUEUEGENERICSENDFROMISR (64u)
149 #define apiID_XQUEUEGIVEFROMISR (65u)
150 #define apiID_XQUEUERECEIVEFROMISR (66u)
151 #define apiID_XQUEUEISQUEUEEMPTYFROMISR (67u)
152 #define apiID_XQUEUEISQUEUEFULLFROMISR (68u)
153 #define apiID_UXQUEUEMESSAGESWAITINGFROMISR (69u)
154 #define apiID_XQUEUEALTGENERICSEND (70u)
155 #define apiID_XQUEUEALTGENERICRECEIVE (71u)
156 #define apiID_XQUEUECRSENDFROMISR (72u)
157 #define apiID_XQUEUECRRECEIVEFROMISR (73u)
158 #define apiID_XQUEUECRSEND (74u)
159 #define apiID_XQUEUECRRECEIVE (75u)
160 #define apiID_XQUEUECREATEMUTEX (76u)
161 #define apiID_XQUEUECREATECOUNTINGSEMAPHORE (77u)
162 #define apiID_XQUEUEGETMUTEXHOLDER (78u)
163 #define apiID_XQUEUETAKEMUTEXRECURSIVE (79u)
164 #define apiID_XQUEUEGIVEMUTEXRECURSIVE (80u)
165 #define apiID_VQUEUEADDTOREGISTRY (81u)
166 #define apiID_VQUEUEUNREGISTERQUEUE (82u)
167 #define apiID_XQUEUEGENERICCREATE (83u)
168 #define apiID_XQUEUECREATESET (84u)
169 #define apiID_XQUEUEADDTOSET (85u)
170 #define apiID_XQUEUEREMOVEFROMSET (86u)
171 #define apiID_XQUEUESELECTFROMSET (87u)
172 #define apiID_XQUEUESELECTFROMSETFROMISR (88u)
173 #define apiID_XQUEUEGENERICRESET (89u)
174 #define apiID_VLISTINITIALISE (90u)
175 #define apiID_VLISTINITIALISEITEM (91u)
176 #define apiID_VLISTINSERT (92u)
177 #define apiID_VLISTINSERTEND (93u)
178 #define apiID_UXLISTREMOVE (94u)
179 #define apiID_XEVENTGROUPCREATE (95u)
180 #define apiID_XEVENTGROUPWAITBITS (96u)
181 #define apiID_XEVENTGROUPCLEARBITS (97u)
182 #define apiID_XEVENTGROUPCLEARBITSFROMISR (98u)
183 #define apiID_XEVENTGROUPSETBITS (99u)
184 #define apiID_XEVENTGROUPSETBITSFROMISR (100u)
185 #define apiID_XEVENTGROUPSYNC (101u)
186 #define apiID_XEVENTGROUPGETBITSFROMISR (102u)
187 #define apiID_VEVENTGROUPDELETE (103u)
188 #define apiID_UXEVENTGROUPGETNUMBER (104u)
189 #define apiID_XSTREAMBUFFERCREATE (105u)
190 #define apiID_VSTREAMBUFFERDELETE (106u)
191 #define apiID_XSTREAMBUFFERRESET (107u)
192 #define apiID_XSTREAMBUFFERSEND (108u)
193 #define apiID_XSTREAMBUFFERSENDFROMISR (109u)
194 #define apiID_XSTREAMBUFFERRECEIVE (110u)
195 #define apiID_XSTREAMBUFFERRECEIVEFROMISR (111u)
196 #define apiID_XQUEUEGENERICSETSEND (112u)
197 
198 #define traceTASK_NOTIFY_TAKE( uxIndexToWait ) SEGGER_SYSVIEW_RecordU32x3(apiID_OFFSET + apiID_ULTASKNOTIFYTAKE, xClearCountOnExit, xTicksToWait, uxIndexToWait)
199 #define traceTASK_DELAY() SEGGER_SYSVIEW_RecordU32 (apiID_OFFSET + apiID_VTASKDELAY, xTicksToDelay)
200 #define traceTASK_DELAY_UNTIL(xTimeToWake) SEGGER_SYSVIEW_RecordVoid (apiID_OFFSET + apiID_VTASKDELAYUNTIL)
201 #define traceTASK_NOTIFY_GIVE_FROM_ISR( uxIndexToNotify ) SEGGER_SYSVIEW_RecordU32x3(apiID_OFFSET + apiID_VTASKNOTIFYGIVEFROMISR, SEGGER_SYSVIEW_ShrinkId((U32)pxTCB), (U32)pxHigherPriorityTaskWoken, uxIndexToNotify)
202 #define traceTASK_PRIORITY_INHERIT( pxTCB, uxPriority ) SEGGER_SYSVIEW_RecordU32 (apiID_OFFSET + apiID_VTASKPRIORITYINHERIT, (U32)pxMutexHolder)
203 #define traceTASK_RESUME( pxTCB ) SEGGER_SYSVIEW_RecordU32 (apiID_OFFSET + apiID_VTASKRESUME, SEGGER_SYSVIEW_ShrinkId((U32)pxTCB))
204 #define traceINCREASE_TICK_COUNT( xTicksToJump ) SEGGER_SYSVIEW_RecordU32 (apiID_OFFSET + apiID_VTASKSTEPTICK, xTicksToJump)
205 #define traceTASK_SUSPEND( pxTCB ) SEGGER_SYSVIEW_RecordU32 (apiID_OFFSET + apiID_VTASKSUSPEND, SEGGER_SYSVIEW_ShrinkId((U32)pxTCB))
206 #define traceTASK_PRIORITY_DISINHERIT( pxTCB, uxBasePriority ) SEGGER_SYSVIEW_RecordU32 (apiID_OFFSET + apiID_XTASKPRIORITYDISINHERIT, (U32)pxMutexHolder)
207 #define traceTASK_RESUME_FROM_ISR( pxTCB ) SEGGER_SYSVIEW_RecordU32 (apiID_OFFSET + apiID_XTASKRESUMEFROMISR, SEGGER_SYSVIEW_ShrinkId((U32)pxTCB))
208 #define traceTASK_NOTIFY( uxIndexToNotify ) SYSVIEW_RecordU32x5(apiID_OFFSET + apiID_XTASKGENERICNOTIFY, SEGGER_SYSVIEW_ShrinkId((U32)pxTCB), ulValue, eAction, (U32)pulPreviousNotificationValue, uxIndexToNotify)
209 #define traceTASK_NOTIFY_FROM_ISR( uxIndexToNotify ) SYSVIEW_RecordU32x5(apiID_OFFSET + apiID_XTASKGENERICNOTIFYFROMISR, SEGGER_SYSVIEW_ShrinkId((U32)pxTCB), ulValue, eAction, (U32)pulPreviousNotificationValue, (U32)pxHigherPriorityTaskWoken)
210 #define traceTASK_NOTIFY_WAIT( uxIndexToWait ) SYSVIEW_RecordU32x5(apiID_OFFSET + apiID_XTASKNOTIFYWAIT, ulBitsToClearOnEntry, ulBitsToClearOnExit, (U32)pulNotificationValue, xTicksToWait, uxIndexToWait)
211 
212 #define traceQUEUE_CREATE( pxNewQueue ) SEGGER_SYSVIEW_RecordU32x3(apiID_OFFSET + apiID_XQUEUEGENERICCREATE, uxQueueLength, uxItemSize, ucQueueType)
213 #define traceQUEUE_DELETE( pxQueue ) SEGGER_SYSVIEW_RecordU32 (apiID_OFFSET + apiID_VQUEUEDELETE, SEGGER_SYSVIEW_ShrinkId((U32)pxQueue))
214 #define traceQUEUE_PEEK( pxQueue ) SEGGER_SYSVIEW_RecordU32x4(apiID_OFFSET + apiID_XQUEUEGENERICRECEIVE, SEGGER_SYSVIEW_ShrinkId((U32)pxQueue), SEGGER_SYSVIEW_ShrinkId((U32)pvBuffer), xTicksToWait, 1)
215 #define traceQUEUE_PEEK_FROM_ISR( pxQueue ) SEGGER_SYSVIEW_RecordU32x2(apiID_OFFSET + apiID_XQUEUEPEEKFROMISR, SEGGER_SYSVIEW_ShrinkId((U32)pxQueue), SEGGER_SYSVIEW_ShrinkId((U32)pvBuffer))
216 #define traceQUEUE_PEEK_FROM_ISR_FAILED( pxQueue ) SEGGER_SYSVIEW_RecordU32x2(apiID_OFFSET + apiID_XQUEUEPEEKFROMISR, SEGGER_SYSVIEW_ShrinkId((U32)pxQueue), SEGGER_SYSVIEW_ShrinkId((U32)pvBuffer))
217 #define traceQUEUE_RECEIVE( pxQueue ) SEGGER_SYSVIEW_RecordU32x4(apiID_OFFSET + apiID_XQUEUEGENERICRECEIVE, SEGGER_SYSVIEW_ShrinkId((U32)pxQueue), SEGGER_SYSVIEW_ShrinkId((U32)0), xTicksToWait, 1)
218 #define traceQUEUE_RECEIVE_FAILED( pxQueue ) SEGGER_SYSVIEW_RecordU32x4(apiID_OFFSET + apiID_XQUEUEGENERICRECEIVE, SEGGER_SYSVIEW_ShrinkId((U32)pxQueue), SEGGER_SYSVIEW_ShrinkId((U32)0), xTicksToWait, 1)
219 #define traceQUEUE_SEMAPHORE_RECEIVE( pxQueue ) SEGGER_SYSVIEW_RecordU32x4(apiID_OFFSET + apiID_XQUEUEGENERICRECEIVE, SEGGER_SYSVIEW_ShrinkId((U32)pxQueue), SEGGER_SYSVIEW_ShrinkId((U32)0), xTicksToWait, 0)
220 #define traceQUEUE_RECEIVE_FROM_ISR( pxQueue ) SEGGER_SYSVIEW_RecordU32x3(apiID_OFFSET + apiID_XQUEUERECEIVEFROMISR, SEGGER_SYSVIEW_ShrinkId((U32)pxQueue), SEGGER_SYSVIEW_ShrinkId((U32)pvBuffer), (U32)pxHigherPriorityTaskWoken)
221 #define traceQUEUE_RECEIVE_FROM_ISR_FAILED( pxQueue ) SEGGER_SYSVIEW_RecordU32x3(apiID_OFFSET + apiID_XQUEUERECEIVEFROMISR, SEGGER_SYSVIEW_ShrinkId((U32)pxQueue), SEGGER_SYSVIEW_ShrinkId((U32)pvBuffer), (U32)pxHigherPriorityTaskWoken)
222 #define traceQUEUE_REGISTRY_ADD( xQueue, pcQueueName ) SEGGER_SYSVIEW_RecordU32x2(apiID_OFFSET + apiID_VQUEUEADDTOREGISTRY, SEGGER_SYSVIEW_ShrinkId((U32)xQueue), (U32)pcQueueName)
223 #define traceQUEUE_SET_SEND( pxQueueSetContainer ) SEGGER_SYSVIEW_RecordVoid(apiID_OFFSET + apiID_XQUEUEGENERICSETSEND)
224 #if ( configUSE_QUEUE_SETS != 1 )
225  #define traceQUEUE_SEND( pxQueue ) SEGGER_SYSVIEW_RecordU32x4(apiID_OFFSET + apiID_XQUEUEGENERICSEND, SEGGER_SYSVIEW_ShrinkId((U32)pxQueue), (U32)pvItemToQueue, xTicksToWait, xCopyPosition)
226 #else
227  #define traceQUEUE_SEND( pxQueue ) SEGGER_SYSVIEW_RecordU32x4(apiID_OFFSET + apiID_XQUEUEGENERICSEND, SEGGER_SYSVIEW_ShrinkId((U32)pxQueue), 0u, 0u, xCopyPosition)
228 #endif
229 #define traceQUEUE_SEND_FAILED( pxQueue ) SEGGER_SYSVIEW_RecordU32x4(apiID_OFFSET + apiID_XQUEUEGENERICSEND, SEGGER_SYSVIEW_ShrinkId((U32)pxQueue), (U32)pvItemToQueue, xTicksToWait, xCopyPosition)
230 #define traceQUEUE_SEND_FROM_ISR( pxQueue ) SEGGER_SYSVIEW_RecordU32x2(apiID_OFFSET + apiID_XQUEUEGENERICSENDFROMISR, SEGGER_SYSVIEW_ShrinkId((U32)pxQueue), (U32)pxHigherPriorityTaskWoken)
231 #define traceQUEUE_SEND_FROM_ISR_FAILED( pxQueue ) SEGGER_SYSVIEW_RecordU32x2(apiID_OFFSET + apiID_XQUEUEGENERICSENDFROMISR, SEGGER_SYSVIEW_ShrinkId((U32)pxQueue), (U32)pxHigherPriorityTaskWoken)
232 #define traceSTREAM_BUFFER_CREATE( pxStreamBuffer, xIsMessageBuffer ) SEGGER_SYSVIEW_RecordU32x2(apiID_OFFSET + apiID_XSTREAMBUFFERCREATE, (U32)xIsMessageBuffer, (U32)pxStreamBuffer)
233 #define traceSTREAM_BUFFER_CREATE_FAILED( xIsMessageBuffer ) SEGGER_SYSVIEW_RecordU32x2(apiID_OFFSET + apiID_XSTREAMBUFFERCREATE, (U32)xIsMessageBuffer, 0u)
234 #define traceSTREAM_BUFFER_DELETE( xStreamBuffer ) SEGGER_SYSVIEW_RecordU32 (apiID_OFFSET + apiID_VSTREAMBUFFERDELETE, (U32)xStreamBuffer)
235 #define traceSTREAM_BUFFER_RESET( xStreamBuffer ) SEGGER_SYSVIEW_RecordU32 (apiID_OFFSET + apiID_XSTREAMBUFFERRESET, (U32)xStreamBuffer)
236 #define traceSTREAM_BUFFER_SEND( xStreamBuffer, xBytesSent ) SEGGER_SYSVIEW_RecordU32x2(apiID_OFFSET + apiID_XSTREAMBUFFERSEND, (U32)xStreamBuffer, (U32)xBytesSent)
237 #define traceSTREAM_BUFFER_SEND_FAILED( xStreamBuffer ) SEGGER_SYSVIEW_RecordU32x2(apiID_OFFSET + apiID_XSTREAMBUFFERSEND, (U32)xStreamBuffer, 0u)
238 #define traceSTREAM_BUFFER_SEND_FROM_ISR( xStreamBuffer, xBytesSent ) SEGGER_SYSVIEW_RecordU32x2(apiID_OFFSET + apiID_XSTREAMBUFFERSENDFROMISR, (U32)xStreamBuffer, (U32)xBytesSent)
239 #define traceSTREAM_BUFFER_RECEIVE( xStreamBuffer, xReceivedLength ) SEGGER_SYSVIEW_RecordU32x2(apiID_OFFSET + apiID_XSTREAMBUFFERRECEIVE, (U32)xStreamBuffer, (U32)xReceivedLength)
240 #define traceSTREAM_BUFFER_RECEIVE_FAILED( xStreamBuffer ) SEGGER_SYSVIEW_RecordU32x2(apiID_OFFSET + apiID_XSTREAMBUFFERRECEIVE, (U32)xStreamBuffer, 0u)
241 #define traceSTREAM_BUFFER_RECEIVE_FROM_ISR( xStreamBuffer, xReceivedLength ) SEGGER_SYSVIEW_RecordU32x2(apiID_OFFSET + apiID_XSTREAMBUFFERRECEIVEFROMISR, (U32)xStreamBuffer, (U32)xReceivedLength)
242 
243 
244 #define traceTASK_DELETE( pxTCB ) { \
245  SEGGER_SYSVIEW_RecordU32(apiID_OFFSET + apiID_VTASKDELETE, SEGGER_SYSVIEW_ShrinkId((U32)pxTCB)); \
246  SYSVIEW_DeleteTask((U32)pxTCB); \
247  }
248 
249 
250 #if( portSTACK_GROWTH < 0 )
251 #define traceTASK_CREATE(pxNewTCB) if (pxNewTCB != NULL) { \
252  SEGGER_SYSVIEW_OnTaskCreate((U32)pxNewTCB); \
253  SYSVIEW_AddTask((U32)pxNewTCB, \
254  &(pxNewTCB->pcTaskName[0]), \
255  pxNewTCB->uxPriority, \
256  (U32)pxNewTCB->pxStack, \
257  ((U32)pxNewTCB->pxTopOfStack - (U32)pxNewTCB->pxStack) \
258  ); \
259  }
260 #else
261 #define traceTASK_CREATE(pxNewTCB) if (pxNewTCB != NULL) { \
262  SEGGER_SYSVIEW_OnTaskCreate((U32)pxNewTCB); \
263  SYSVIEW_AddTask((U32)pxNewTCB, \
264  &(pxNewTCB->pcTaskName[0]), \
265  pxNewTCB->uxPriority, \
266  (U32)pxNewTCB->pxStack, \
267  (U32)(pxNewTCB->pxStack-pxNewTCB->pxTopOfStack) \
268  ); \
269  }
270 #endif
271 #define traceTASK_PRIORITY_SET(pxTask, uxNewPriority) { \
272  SEGGER_SYSVIEW_RecordU32x2(apiID_OFFSET+apiID_VTASKPRIORITYSET, \
273  SEGGER_SYSVIEW_ShrinkId((U32)pxTCB), \
274  uxNewPriority \
275  ); \
276  SYSVIEW_UpdateTask((U32)pxTask, \
277  &(pxTask->pcTaskName[0]), \
278  uxNewPriority, \
279  (U32)pxTask->pxStack, \
280  0 \
281  ); \
282  }
283 //
284 // Define INCLUDE_xTaskGetIdleTaskHandle as 1 in FreeRTOSConfig.h to allow identification of Idle state.
285 //
286 #if ( INCLUDE_xTaskGetIdleTaskHandle == 1 )
287  #define traceTASK_SWITCHED_IN() if(prvGetTCBFromHandle(NULL) == xIdleTaskHandle) { \
288  SEGGER_SYSVIEW_OnIdle(); \
289  } else { \
290  SEGGER_SYSVIEW_OnTaskStartExec((U32)pxCurrentTCB); \
291  }
292 #else
293  #define traceTASK_SWITCHED_IN() { \
294  if (memcmp(pxCurrentTCB->pcTaskName, "IDLE", 5) != 0) { \
295  SEGGER_SYSVIEW_OnTaskStartExec((U32)pxCurrentTCB); \
296  } else { \
297  SEGGER_SYSVIEW_OnIdle(); \
298  } \
299  }
300 #endif
301 
302 #define traceMOVED_TASK_TO_READY_STATE(pxTCB) SEGGER_SYSVIEW_OnTaskStartReady((U32)pxTCB)
303 #define traceREADDED_TASK_TO_READY_STATE(pxTCB)
304 
305 #define traceMOVED_TASK_TO_DELAYED_LIST() SEGGER_SYSVIEW_OnTaskStopReady((U32)pxCurrentTCB, (1u << 2))
306 #define traceMOVED_TASK_TO_OVERFLOW_DELAYED_LIST() SEGGER_SYSVIEW_OnTaskStopReady((U32)pxCurrentTCB, (1u << 2))
307 #define traceMOVED_TASK_TO_SUSPENDED_LIST(pxTCB) SEGGER_SYSVIEW_OnTaskStopReady((U32)pxTCB, ((3u << 3) | 3))
308 
309 
310 #define traceISR_EXIT_TO_SCHEDULER() SEGGER_SYSVIEW_RecordExitISRToScheduler()
311 #define traceISR_EXIT() SEGGER_SYSVIEW_RecordExitISR()
312 #define traceISR_ENTER() SEGGER_SYSVIEW_RecordEnterISR()
313 
314 # define SEGGER_SYSTEMVIEW_ISR_ENTER() traceISR_ENTER()
315 # define SEGGER_SYSTEMVIEW_ISR_EXIT() traceISR_EXIT()
316 
317 #if (dg_configSYSTEMVIEW_MONITOR_BLE_ISR == 1)
318 # define SEGGER_SYSTEMVIEW_BLE_ISR_ENTER() SEGGER_SYSTEMVIEW_ISR_ENTER()
319 # define SEGGER_SYSTEMVIEW_BLE_ISR_EXIT() SEGGER_SYSTEMVIEW_ISR_EXIT()
320 #else
321 # define SEGGER_SYSTEMVIEW_BLE_ISR_ENTER()
322 # define SEGGER_SYSTEMVIEW_BLE_ISR_EXIT()
323 #endif
324 
325 #if (dg_configSYSTEMVIEW_MONITOR_CPM_ISR == 1)
326 # define SEGGER_SYSTEMVIEW_CPM_ISR_ENTER() SEGGER_SYSTEMVIEW_ISR_ENTER()
327 # define SEGGER_SYSTEMVIEW_CPM_ISR_EXIT() SEGGER_SYSTEMVIEW_ISR_EXIT()
328 #else
329 # define SEGGER_SYSTEMVIEW_CPM_ISR_ENTER()
330 # define SEGGER_SYSTEMVIEW_CPM_ISR_EXIT()
331 #endif
332 
333 #if (dg_configSYSTEMVIEW_MONITOR_USB_ISR == 1)
334 # define SEGGER_SYSTEMVIEW_USB_ISR_ENTER() SEGGER_SYSTEMVIEW_ISR_ENTER()
335 # define SEGGER_SYSTEMVIEW_USB_ISR_EXIT() SEGGER_SYSTEMVIEW_ISR_EXIT()
336 #else
337 # define SEGGER_SYSTEMVIEW_USB_ISR_ENTER()
338 # define SEGGER_SYSTEMVIEW_USB_ISR_EXIT()
339 #endif
340 
341 /*********************************************************************
342 *
343 * API functions
344 *
345 **********************************************************************
346 */
347 #ifdef __cplusplus
348 extern "C" {
349 #endif
350 void SYSVIEW_AddTask (U32 xHandle, const char* pcTaskName, unsigned uxCurrentPriority, U32 pxStack, unsigned uStackHighWaterMark);
351 void SYSVIEW_UpdateTask (U32 xHandle, const char* pcTaskName, unsigned uxCurrentPriority, U32 pxStack, unsigned uStackHighWaterMark);
352 void SYSVIEW_DeleteTask (U32 xHandle);
353 void SYSVIEW_SendTaskInfo (U32 TaskID, const char* sName, unsigned Prio, U32 StackBase, unsigned StackSize);
354 void SYSVIEW_RecordU32x4 (unsigned Id, U32 Para0, U32 Para1, U32 Para2, U32 Para3);
355 void SYSVIEW_RecordU32x5 (unsigned Id, U32 Para0, U32 Para1, U32 Para2, U32 Para3, U32 Para4);
356 
357 #ifdef __cplusplus
358 }
359 #endif
360 
361 #endif /* (dg_configSYSTEMVIEW == 1) */
362 
363 #endif
364 
365 /*************************** End of file ****************************/