SEGGER_SYSVIEW_FreeRTOS.h 27 KB

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