app_trace/sysview: fixed freertos tracing calling plus sync apptrace component with the master branch version

docs: remove reference to backported features in freertos 10 api-reference.
This commit is contained in:
Felipe Neves
2020-05-19 13:32:31 -03:00
committed by bot
parent d8ed9be1d4
commit f3783ba258
15 changed files with 303 additions and 241 deletions

View File

@@ -1,9 +1,9 @@
/********************************************************************* /*********************************************************************
* SEGGER Microcontroller GmbH * * SEGGER Microcontroller GmbH & Co. KG *
* The Embedded Experts * * The Embedded Experts *
********************************************************************** **********************************************************************
* * * *
* (c) 1995 - 2019 SEGGER Microcontroller GmbH * * (c) 2015 - 2017 SEGGER Microcontroller GmbH & Co. KG *
* * * *
* www.segger.com Support: support@segger.com * * www.segger.com Support: support@segger.com *
* * * *
@@ -17,14 +17,24 @@
* * * *
* SEGGER strongly recommends to not make any changes * * SEGGER strongly recommends to not make any changes *
* to or modify the source code of this software in order to stay * * to or modify the source code of this software in order to stay *
* compatible with the SystemView and RTT protocol, and J-Link. * * compatible with the RTT protocol and J-Link. *
* * * *
* Redistribution and use in source and binary forms, with or * * Redistribution and use in source and binary forms, with or *
* without modification, are permitted provided that the following * * without modification, are permitted provided that the following *
* condition is met: * * conditions are met: *
* * * *
* o Redistributions of source code must retain the above copyright * * o Redistributions of source code must retain the above copyright *
* notice, this condition and the following disclaimer. * * notice, this list of conditions and the following disclaimer. *
* *
* o Redistributions in binary form must reproduce the above *
* copyright notice, this list of conditions and the following *
* disclaimer in the documentation and/or other materials provided *
* with the distribution. *
* *
* o Neither the name of SEGGER Microcontroller GmbH & Co. KG *
* nor the names of its contributors may be used to endorse or *
* promote products derived from this software without specific *
* prior written permission. *
* * * *
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND *
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, * * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, *
@@ -42,14 +52,14 @@
* * * *
********************************************************************** **********************************************************************
* * * *
* SystemView version: 3.10 * * SystemView version: V2.42 *
* * * *
********************************************************************** **********************************************************************
-------------------------- END-OF-HEADER ----------------------------- -------------------------- END-OF-HEADER -----------------------------
File : SEGGER_SYSVIEW_FreeRTOS.c File : SEGGER_SYSVIEW_FreeRTOS.c
Purpose : Interface between FreeRTOS and SystemView. Purpose : Interface between FreeRTOS and SystemView.
Revision: $Rev: 7947 $ Revision: $Rev: 3734 $
*/ */
#include "freertos/FreeRTOS.h" #include "freertos/FreeRTOS.h"
#include "freertos/task.h" #include "freertos/task.h"
@@ -70,7 +80,6 @@ struct SYSVIEW_FREERTOS_TASK_STATUS {
}; };
static SYSVIEW_FREERTOS_TASK_STATUS _aTasks[SYSVIEW_FREERTOS_MAX_NOF_TASKS]; static SYSVIEW_FREERTOS_TASK_STATUS _aTasks[SYSVIEW_FREERTOS_MAX_NOF_TASKS];
static unsigned _NumTasks;
/********************************************************************* /*********************************************************************
* *
@@ -84,11 +93,13 @@ static unsigned _NumTasks;
static void _cbSendTaskList(void) { static void _cbSendTaskList(void) {
unsigned n; unsigned n;
for (n = 0; n < _NumTasks; n++) { for (n = 0; n < SYSVIEW_FREERTOS_MAX_NOF_TASKS; n++) {
if (_aTasks[n].xHandle) {
#if INCLUDE_uxTaskGetStackHighWaterMark // Report Task Stack High Watermark #if INCLUDE_uxTaskGetStackHighWaterMark // Report Task Stack High Watermark
_aTasks[n].uStackHighWaterMark = uxTaskGetStackHighWaterMark((TaskHandle_t)_aTasks[n].xHandle); _aTasks[n].uStackHighWaterMark = uxTaskGetStackHighWaterMark((TaskHandle_t)_aTasks[n].xHandle);
#endif #endif
SYSVIEW_SendTaskInfo((U32)_aTasks[n].xHandle, _aTasks[n].pcTaskName, (unsigned)_aTasks[n].uxCurrentPriority, (U32)_aTasks[n].pxStack, (unsigned)_aTasks[n].uStackHighWaterMark); SYSVIEW_SendTaskInfo((U32)_aTasks[n].xHandle, _aTasks[n].pcTaskName, (unsigned)_aTasks[n].uxCurrentPriority, (U32)_aTasks[n].pxStack, (unsigned)_aTasks[n].uStackHighWaterMark);
}
} }
} }
@@ -124,23 +135,27 @@ static U64 _cbGetTime(void) {
* Add a task to the internal list and record its information. * Add a task to the internal list and record its information.
*/ */
void SYSVIEW_AddTask(U32 xHandle, const char* pcTaskName, unsigned uxCurrentPriority, U32 pxStack, unsigned uStackHighWaterMark) { void SYSVIEW_AddTask(U32 xHandle, const char* pcTaskName, unsigned uxCurrentPriority, U32 pxStack, unsigned uStackHighWaterMark) {
unsigned n;
if (memcmp(pcTaskName, "IDLE", 5) == 0) { if (memcmp(pcTaskName, "IDLE", 5) == 0) {
return; return;
} }
if (_NumTasks >= SYSVIEW_FREERTOS_MAX_NOF_TASKS) { for (n = 0; n < SYSVIEW_FREERTOS_MAX_NOF_TASKS; n++) {
if (_aTasks[n].xHandle == 0) {
break;
}
}
if (n == SYSVIEW_FREERTOS_MAX_NOF_TASKS) {
SEGGER_SYSVIEW_Warn("SYSTEMVIEW: Could not record task information. Maximum number of tasks reached."); SEGGER_SYSVIEW_Warn("SYSTEMVIEW: Could not record task information. Maximum number of tasks reached.");
return; return;
} }
_aTasks[_NumTasks].xHandle = xHandle; _aTasks[n].xHandle = xHandle;
_aTasks[_NumTasks].pcTaskName = pcTaskName; _aTasks[n].pcTaskName = pcTaskName;
_aTasks[_NumTasks].uxCurrentPriority = uxCurrentPriority; _aTasks[n].uxCurrentPriority = uxCurrentPriority;
_aTasks[_NumTasks].pxStack = pxStack; _aTasks[n].pxStack = pxStack;
_aTasks[_NumTasks].uStackHighWaterMark = uStackHighWaterMark; _aTasks[n].uStackHighWaterMark = uStackHighWaterMark;
_NumTasks++;
SYSVIEW_SendTaskInfo(xHandle, pcTaskName,uxCurrentPriority, pxStack, uStackHighWaterMark); SYSVIEW_SendTaskInfo(xHandle, pcTaskName,uxCurrentPriority, pxStack, uStackHighWaterMark);
@@ -160,12 +175,12 @@ void SYSVIEW_UpdateTask(U32 xHandle, const char* pcTaskName, unsigned uxCurrentP
return; return;
} }
for (n = 0; n < _NumTasks; n++) { for (n = 0; n < SYSVIEW_FREERTOS_MAX_NOF_TASKS; n++) {
if (_aTasks[n].xHandle == xHandle) { if (_aTasks[n].xHandle == xHandle) {
break; break;
} }
} }
if (n < _NumTasks) { if (n < SYSVIEW_FREERTOS_MAX_NOF_TASKS) {
_aTasks[n].pcTaskName = pcTaskName; _aTasks[n].pcTaskName = pcTaskName;
_aTasks[n].uxCurrentPriority = uxCurrentPriority; _aTasks[n].uxCurrentPriority = uxCurrentPriority;
_aTasks[n].pxStack = pxStack; _aTasks[n].pxStack = pxStack;
@@ -186,36 +201,18 @@ void SYSVIEW_UpdateTask(U32 xHandle, const char* pcTaskName, unsigned uxCurrentP
*/ */
void SYSVIEW_DeleteTask(U32 xHandle) { void SYSVIEW_DeleteTask(U32 xHandle) {
unsigned n; unsigned n;
if (_NumTasks == 0) { for (n = 0; n < SYSVIEW_FREERTOS_MAX_NOF_TASKS; n++) {
return; // Early out
}
for (n = 0; n < _NumTasks; n++) {
if (_aTasks[n].xHandle == xHandle) { if (_aTasks[n].xHandle == xHandle) {
break; break;
} }
} }
if (n == (_NumTasks - 1)) { if (n == SYSVIEW_FREERTOS_MAX_NOF_TASKS) {
// SEGGER_SYSVIEW_Warn("SYSTEMVIEW: Could not find task information. Cannot delete task.");
// Task is last item in list. return;
// Simply zero the item and decrement number of tasks.
//
memset(&_aTasks[n], 0, sizeof(_aTasks[n]));
_NumTasks--;
} else if (n < _NumTasks) {
//
// Task is in the middle of the list.
// Move last item to current position and decrement number of tasks.
// Order of tasks does not really matter, so no need to move all following items.
//
_aTasks[n].xHandle = _aTasks[_NumTasks - 1].xHandle;
_aTasks[n].pcTaskName = _aTasks[_NumTasks - 1].pcTaskName;
_aTasks[n].uxCurrentPriority = _aTasks[_NumTasks - 1].uxCurrentPriority;
_aTasks[n].pxStack = _aTasks[_NumTasks - 1].pxStack;
_aTasks[n].uStackHighWaterMark = _aTasks[_NumTasks - 1].uStackHighWaterMark;
memset(&_aTasks[_NumTasks - 1], 0, sizeof(_aTasks[_NumTasks - 1]));
_NumTasks--;
} }
_aTasks[n].xHandle = 0;
} }
/********************************************************************* /*********************************************************************
@@ -237,6 +234,47 @@ void SYSVIEW_SendTaskInfo(U32 TaskID, const char* sName, unsigned Prio, U32 Stac
SEGGER_SYSVIEW_SendTaskInfo(&TaskInfo); SEGGER_SYSVIEW_SendTaskInfo(&TaskInfo);
} }
/*********************************************************************
*
* SYSVIEW_RecordU32x4()
*
* Function description
* Record an event with 4 parameters
*/
void SYSVIEW_RecordU32x4(unsigned Id, U32 Para0, U32 Para1, U32 Para2, U32 Para3) {
U8 aPacket[SEGGER_SYSVIEW_INFO_SIZE + 4 * SEGGER_SYSVIEW_QUANTA_U32];
U8* pPayload;
//
pPayload = SEGGER_SYSVIEW_PREPARE_PACKET(aPacket); // Prepare the packet for SystemView
pPayload = SEGGER_SYSVIEW_EncodeU32(pPayload, Para0); // Add the first parameter to the packet
pPayload = SEGGER_SYSVIEW_EncodeU32(pPayload, Para1); // Add the second parameter to the packet
pPayload = SEGGER_SYSVIEW_EncodeU32(pPayload, Para2); // Add the third parameter to the packet
pPayload = SEGGER_SYSVIEW_EncodeU32(pPayload, Para3); // Add the fourth parameter to the packet
//
SEGGER_SYSVIEW_SendPacket(&aPacket[0], pPayload, Id); // Send the packet
}
/*********************************************************************
*
* SYSVIEW_RecordU32x5()
*
* Function description
* Record an event with 5 parameters
*/
void SYSVIEW_RecordU32x5(unsigned Id, U32 Para0, U32 Para1, U32 Para2, U32 Para3, U32 Para4) {
U8 aPacket[SEGGER_SYSVIEW_INFO_SIZE + 5 * SEGGER_SYSVIEW_QUANTA_U32];
U8* pPayload;
//
pPayload = SEGGER_SYSVIEW_PREPARE_PACKET(aPacket); // Prepare the packet for SystemView
pPayload = SEGGER_SYSVIEW_EncodeU32(pPayload, Para0); // Add the first parameter to the packet
pPayload = SEGGER_SYSVIEW_EncodeU32(pPayload, Para1); // Add the second parameter to the packet
pPayload = SEGGER_SYSVIEW_EncodeU32(pPayload, Para2); // Add the third parameter to the packet
pPayload = SEGGER_SYSVIEW_EncodeU32(pPayload, Para3); // Add the fourth parameter to the packet
pPayload = SEGGER_SYSVIEW_EncodeU32(pPayload, Para4); // Add the fifth parameter to the packet
//
SEGGER_SYSVIEW_SendPacket(&aPacket[0], pPayload, Id); // Send the packet
}
/********************************************************************* /*********************************************************************
* *
* Public API structures * Public API structures
@@ -249,4 +287,4 @@ const SEGGER_SYSVIEW_OS_API SYSVIEW_X_OS_TraceAPI = {
_cbSendTaskList, _cbSendTaskList,
}; };
/*************************** End of file ****************************/ /*************************** End of file ****************************/

View File

@@ -1,9 +1,9 @@
/********************************************************************* /*********************************************************************
* SEGGER Microcontroller GmbH * * SEGGER Microcontroller GmbH & Co. KG *
* The Embedded Experts * * The Embedded Experts *
********************************************************************** **********************************************************************
* * * *
* (c) 1995 - 2019 SEGGER Microcontroller GmbH * * (c) 2015 - 2017 SEGGER Microcontroller GmbH & Co. KG *
* * * *
* www.segger.com Support: support@segger.com * * www.segger.com Support: support@segger.com *
* * * *
@@ -17,14 +17,24 @@
* * * *
* SEGGER strongly recommends to not make any changes * * SEGGER strongly recommends to not make any changes *
* to or modify the source code of this software in order to stay * * to or modify the source code of this software in order to stay *
* compatible with the SystemView and RTT protocol, and J-Link. * * compatible with the RTT protocol and J-Link. *
* * * *
* Redistribution and use in source and binary forms, with or * * Redistribution and use in source and binary forms, with or *
* without modification, are permitted provided that the following * * without modification, are permitted provided that the following *
* condition is met: * * conditions are met: *
* * * *
* o Redistributions of source code must retain the above copyright * * o Redistributions of source code must retain the above copyright *
* notice, this condition and the following disclaimer. * * notice, this list of conditions and the following disclaimer. *
* *
* o Redistributions in binary form must reproduce the above *
* copyright notice, this list of conditions and the following *
* disclaimer in the documentation and/or other materials provided *
* with the distribution. *
* *
* o Neither the name of SEGGER Microcontroller GmbH & Co. KG *
* nor the names of its contributors may be used to endorse or *
* promote products derived from this software without specific *
* prior written permission. *
* * * *
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND *
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, * * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, *
@@ -42,14 +52,14 @@
* * * *
********************************************************************** **********************************************************************
* * * *
* SystemView version: 3.10 * * SystemView version: V2.42 *
* * * *
********************************************************************** **********************************************************************
-------------------------- END-OF-HEADER ----------------------------- -------------------------- END-OF-HEADER -----------------------------
File : SEGGER_SYSVIEW_FreeRTOS.h File : SEGGER_SYSVIEW_FreeRTOS.h
Purpose : Interface between FreeRTOS and SystemView. Purpose : Interface between FreeRTOS and SystemView.
Revision: $Rev: 7745 $ Revision: $Rev: 3734 $
Notes: Notes:
(1) Include this file at the end of FreeRTOSConfig.h (1) Include this file at the end of FreeRTOSConfig.h
@@ -70,7 +80,7 @@ Notes:
#define portSTACK_GROWTH ( -1 ) #define portSTACK_GROWTH ( -1 )
#endif #endif
#define SYSVIEW_FREERTOS_MAX_NOF_TASKS 8 #define SYSVIEW_FREERTOS_MAX_NOF_TASKS CONFIG_SYSVIEW_MAX_TASKS
/********************************************************************* /*********************************************************************
* *
@@ -78,170 +88,167 @@ Notes:
* *
********************************************************************** **********************************************************************
*/ */
#define apiID_OFFSET (32u)
// for dual-core targets we use event ID to keep core ID bit (0 or 1)
// use the highest - 1 bit of event ID to indicate core ID
// the highest bit can not be used due to event ID encoding method
// this reduces supported ID range to [0..63] (for 1 byte IDs) plus [128..16383] (for 2 bytes IDs)
// so original continuous event IDs range is split into two sub-ranges for 1-bytes IDs and 2-bytes ones
// events which use apiFastID_OFFSET will have 1 byte ID,
// so for the sake of bandwidth economy events which are generated more frequently should use this ID offset
// currently all used events fall into this range
#define apiFastID_OFFSET (32u)
#define apiID_VTASKDELETE (1u)
#define apiID_VTASKDELAY (2u)
#define apiID_VTASKDELAYUNTIL (3u)
#define apiID_VTASKSUSPEND (4u)
#define apiID_ULTASKNOTIFYTAKE (5u)
#define apiID_VTASKNOTIFYGIVEFROMISR (6u)
#define apiID_VTASKPRIORITYINHERIT (7u)
#define apiID_VTASKRESUME (8u)
#define apiID_VTASKSTEPTICK (9u)
#define apiID_XTASKPRIORITYDISINHERIT (10u)
#define apiID_XTASKRESUMEFROMISR (11u)
#define apiID_XTASKGENERICNOTIFY (12u)
#define apiID_XTASKGENERICNOTIFYFROMISR (13u)
#define apiID_XTASKNOTIFYWAIT (14u)
#define apiID_XQUEUEGENERICCREATE (15u)
#define apiID_VQUEUEDELETE (16u)
#define apiID_XQUEUEGENERICRECEIVE (17u)
#define apiID_XQUEUEPEEKFROMISR (18u)
#define apiID_XQUEUERECEIVEFROMISR (19u)
#define apiID_VQUEUEADDTOREGISTRY (20u)
#define apiID_XQUEUEGENERICSEND (21u)
#define apiID_XQUEUEGENERICSENDFROMISR (22u)
#define apiID_VTASKPRIORITYSET (23u)
#define apiID_UXTASKPRIORITYGETFROMISR (24u)
#define apiID_XTASKGETTICKCOUNTFROMISR (25u)
#define apiID_XEVENTGROUPCLEARBITSFROMISR (26u)
#define apiID_XEVENTGROUPSETBITSFROMISR (27u)
#define apiID_XEVENTGROUPGETBITSFROMISR (28u)
#define apiID_XQUEUEGIVEFROMISR (29u)
#define apiID_XQUEUEISQUEUEEMPTYFROMISR (30u)
#define apiID_XQUEUEISQUEUEFULLFROMISR (31u) // the maximum allowed apiID for the first ID range
// events which use apiSlowID_OFFSET will have 2-bytes ID
#define apiSlowID_OFFSET (127u)
#define apiID_VTASKALLOCATEMPUREGIONS (1u) #define apiID_VTASKALLOCATEMPUREGIONS (1u)
#define apiID_VTASKDELETE (2u) #define apiID_UXTASKPRIORITYGET (2u)
#define apiID_VTASKDELAY (3u) #define apiID_ETASKGETSTATE (3u)
#define apiID_VTASKDELAYUNTIL (4u) #define apiID_VTASKSTARTSCHEDULER (4u)
#define apiID_UXTASKPRIORITYGET (5u) #define apiID_VTASKENDSCHEDULER (5u)
#define apiID_UXTASKPRIORITYGETFROMISR (6u) #define apiID_VTASKSUSPENDALL (6u)
#define apiID_ETASKGETSTATE (7u) #define apiID_XTASKRESUMEALL (7u)
#define apiID_VTASKPRIORITYSET (8u) #define apiID_XTASKGETTICKCOUNT (8u)
#define apiID_VTASKSUSPEND (9u) #define apiID_UXTASKGETNUMBEROFTASKS (9u)
#define apiID_VTASKRESUME (10u) #define apiID_PCTASKGETTASKNAME (10u)
#define apiID_XTASKRESUMEFROMISR (11u) #define apiID_UXTASKGETSTACKHIGHWATERMARK (11u)
#define apiID_VTASKSTARTSCHEDULER (12u) #define apiID_VTASKSETAPPLICATIONTASKTAG (12u)
#define apiID_VTASKENDSCHEDULER (13u) #define apiID_XTASKGETAPPLICATIONTASKTAG (13u)
#define apiID_VTASKSUSPENDALL (14u) #define apiID_VTASKSETTHREADLOCALSTORAGEPOINTER (14u)
#define apiID_XTASKRESUMEALL (15u) #define apiID_PVTASKGETTHREADLOCALSTORAGEPOINTER (15u)
#define apiID_XTASKGETTICKCOUNT (16u) #define apiID_XTASKCALLAPPLICATIONTASKHOOK (16u)
#define apiID_XTASKGETTICKCOUNTFROMISR (17u) #define apiID_XTASKGETIDLETASKHANDLE (17u)
#define apiID_UXTASKGETNUMBEROFTASKS (18u) #define apiID_UXTASKGETSYSTEMSTATE (18u)
#define apiID_PCTASKGETTASKNAME (19u) #define apiID_VTASKLIST (19u)
#define apiID_UXTASKGETSTACKHIGHWATERMARK (20u) #define apiID_VTASKGETRUNTIMESTATS (20u)
#define apiID_VTASKSETAPPLICATIONTASKTAG (21u) #define apiID_XTASKNOTIFYSTATECLEAR (21u)
#define apiID_XTASKGETAPPLICATIONTASKTAG (22u) #define apiID_XTASKGETCURRENTTASKHANDLE (22u)
#define apiID_VTASKSETTHREADLOCALSTORAGEPOINTER (23u) #define apiID_VTASKSETTIMEOUTSTATE (23u)
#define apiID_PVTASKGETTHREADLOCALSTORAGEPOINTER (24u) #define apiID_XTASKCHECKFORTIMEOUT (24u)
#define apiID_XTASKCALLAPPLICATIONTASKHOOK (25u) #define apiID_VTASKMISSEDYIELD (25u)
#define apiID_XTASKGETIDLETASKHANDLE (26u) #define apiID_XTASKGETSCHEDULERSTATE (26u)
#define apiID_UXTASKGETSYSTEMSTATE (27u) #define apiID_XTASKGENERICCREATE (27u)
#define apiID_VTASKLIST (28u) #define apiID_UXTASKGETTASKNUMBER (28u)
#define apiID_VTASKGETRUNTIMESTATS (29u) #define apiID_VTASKSETTASKNUMBER (29u)
#define apiID_XTASKGENERICNOTIFY (30u) #define apiID_ETASKCONFIRMSLEEPMODESTATUS (30u)
#define apiID_XTASKGENERICNOTIFYFROMISR (31u) #define apiID_XTIMERCREATE (31u)
#define apiID_XTASKNOTIFYWAIT (32u) #define apiID_PVTIMERGETTIMERID (32u)
#define apiID_VTASKNOTIFYGIVEFROMISR (33u) #define apiID_VTIMERSETTIMERID (33u)
#define apiID_ULTASKNOTIFYTAKE (34u) #define apiID_XTIMERISTIMERACTIVE (34u)
#define apiID_XTASKNOTIFYSTATECLEAR (35u) #define apiID_XTIMERGETTIMERDAEMONTASKHANDLE (35u)
#define apiID_XTASKGETCURRENTTASKHANDLE (36u) #define apiID_XTIMERPENDFUNCTIONCALLFROMISR (36u)
#define apiID_VTASKSETTIMEOUTSTATE (37u) #define apiID_XTIMERPENDFUNCTIONCALL (37u)
#define apiID_XTASKCHECKFORTIMEOUT (38u) #define apiID_PCTIMERGETTIMERNAME (38u)
#define apiID_VTASKMISSEDYIELD (39u) #define apiID_XTIMERCREATETIMERTASK (39u)
#define apiID_XTASKGETSCHEDULERSTATE (40u) #define apiID_XTIMERGENERICCOMMAND (40u)
#define apiID_VTASKPRIORITYINHERIT (41u) #define apiID_UXQUEUEMESSAGESWAITING (41u)
#define apiID_XTASKPRIORITYDISINHERIT (42u) #define apiID_UXQUEUESPACESAVAILABLE (42u)
#define apiID_XTASKGENERICCREATE (43u) #define apiID_UXQUEUEMESSAGESWAITINGFROMISR (43u)
#define apiID_UXTASKGETTASKNUMBER (44u) #define apiID_XQUEUEALTGENERICSEND (44u)
#define apiID_VTASKSETTASKNUMBER (45u) #define apiID_XQUEUEALTGENERICRECEIVE (45u)
#define apiID_VTASKSTEPTICK (46u) #define apiID_XQUEUECRSENDFROMISR (46u)
#define apiID_ETASKCONFIRMSLEEPMODESTATUS (47u) #define apiID_XQUEUECRRECEIVEFROMISR (47u)
#define apiID_XTIMERCREATE (48u) #define apiID_XQUEUECRSEND (48u)
#define apiID_PVTIMERGETTIMERID (49u) #define apiID_XQUEUECRRECEIVE (49u)
#define apiID_VTIMERSETTIMERID (50u) #define apiID_XQUEUECREATEMUTEX (50u)
#define apiID_XTIMERISTIMERACTIVE (51u) #define apiID_XQUEUECREATECOUNTINGSEMAPHORE (51u)
#define apiID_XTIMERGETTIMERDAEMONTASKHANDLE (52u) #define apiID_XQUEUEGETMUTEXHOLDER (52u)
#define apiID_XTIMERPENDFUNCTIONCALLFROMISR (53u) #define apiID_XQUEUETAKEMUTEXRECURSIVE (53u)
#define apiID_XTIMERPENDFUNCTIONCALL (54u) #define apiID_XQUEUEGIVEMUTEXRECURSIVE (54u)
#define apiID_PCTIMERGETTIMERNAME (55u) #define apiID_VQUEUEUNREGISTERQUEUE (55u)
#define apiID_XTIMERCREATETIMERTASK (56u) #define apiID_XQUEUECREATESET (56u)
#define apiID_XTIMERGENERICCOMMAND (57u) #define apiID_XQUEUEADDTOSET (57u)
#define apiID_XQUEUEGENERICSEND (58u) #define apiID_XQUEUEREMOVEFROMSET (58u)
#define apiID_XQUEUEPEEKFROMISR (59u) #define apiID_XQUEUESELECTFROMSET (59u)
#define apiID_XQUEUEGENERICRECEIVE (60u) #define apiID_XQUEUESELECTFROMSETFROMISR (60u)
#define apiID_UXQUEUEMESSAGESWAITING (61u) #define apiID_XQUEUEGENERICRESET (61u)
#define apiID_UXQUEUESPACESAVAILABLE (62u) #define apiID_VLISTINITIALISE (62u)
#define apiID_VQUEUEDELETE (63u) #define apiID_VLISTINITIALISEITEM (63u)
#define apiID_XQUEUEGENERICSENDFROMISR (64u) #define apiID_VLISTINSERT (64u)
#define apiID_XQUEUEGIVEFROMISR (65u) #define apiID_VLISTINSERTEND (65u)
#define apiID_XQUEUERECEIVEFROMISR (66u) #define apiID_UXLISTREMOVE (66u)
#define apiID_XQUEUEISQUEUEEMPTYFROMISR (67u) #define apiID_XEVENTGROUPCREATE (67u)
#define apiID_XQUEUEISQUEUEFULLFROMISR (68u) #define apiID_XEVENTGROUPWAITBITS (68u)
#define apiID_UXQUEUEMESSAGESWAITINGFROMISR (69u) #define apiID_XEVENTGROUPCLEARBITS (69u)
#define apiID_XQUEUEALTGENERICSEND (70u) #define apiID_XEVENTGROUPSETBITS (70u)
#define apiID_XQUEUEALTGENERICRECEIVE (71u) #define apiID_XEVENTGROUPSYNC (71u)
#define apiID_XQUEUECRSENDFROMISR (72u) #define apiID_VEVENTGROUPDELETE (72u)
#define apiID_XQUEUECRRECEIVEFROMISR (73u) #define apiID_UXEVENTGROUPGETNUMBER (73u)
#define apiID_XQUEUECRSEND (74u)
#define apiID_XQUEUECRRECEIVE (75u)
#define apiID_XQUEUECREATEMUTEX (76u)
#define apiID_XQUEUECREATECOUNTINGSEMAPHORE (77u)
#define apiID_XQUEUEGETMUTEXHOLDER (78u)
#define apiID_XQUEUETAKEMUTEXRECURSIVE (79u)
#define apiID_XQUEUEGIVEMUTEXRECURSIVE (80u)
#define apiID_VQUEUEADDTOREGISTRY (81u)
#define apiID_VQUEUEUNREGISTERQUEUE (82u)
#define apiID_XQUEUEGENERICCREATE (83u)
#define apiID_XQUEUECREATESET (84u)
#define apiID_XQUEUEADDTOSET (85u)
#define apiID_XQUEUEREMOVEFROMSET (86u)
#define apiID_XQUEUESELECTFROMSET (87u)
#define apiID_XQUEUESELECTFROMSETFROMISR (88u)
#define apiID_XQUEUEGENERICRESET (89u)
#define apiID_VLISTINITIALISE (90u)
#define apiID_VLISTINITIALISEITEM (91u)
#define apiID_VLISTINSERT (92u)
#define apiID_VLISTINSERTEND (93u)
#define apiID_UXLISTREMOVE (94u)
#define apiID_XEVENTGROUPCREATE (95u)
#define apiID_XEVENTGROUPWAITBITS (96u)
#define apiID_XEVENTGROUPCLEARBITS (97u)
#define apiID_XEVENTGROUPCLEARBITSFROMISR (98u)
#define apiID_XEVENTGROUPSETBITS (99u)
#define apiID_XEVENTGROUPSETBITSFROMISR (100u)
#define apiID_XEVENTGROUPSYNC (101u)
#define apiID_XEVENTGROUPGETBITSFROMISR (102u)
#define apiID_VEVENTGROUPDELETE (103u)
#define apiID_UXEVENTGROUPGETNUMBER (104u)
#define apiID_XSTREAMBUFFERCREATE (105u)
#define apiID_VSTREAMBUFFERDELETE (106u)
#define apiID_XSTREAMBUFFERRESET (107u)
#define apiID_XSTREAMBUFFERSEND (108u)
#define apiID_XSTREAMBUFFERSENDFROMISR (109u)
#define apiID_XSTREAMBUFFERRECEIVE (110u)
#define apiID_XSTREAMBUFFERRECEIVEFROMISR (111u)
#define traceTASK_NOTIFY_TAKE() SEGGER_SYSVIEW_RecordU32x2(apiID_OFFSET + apiID_ULTASKNOTIFYTAKE, xClearCountOnExit, xTicksToWait) #define traceTASK_NOTIFY_TAKE() SEGGER_SYSVIEW_RecordU32x2(apiFastID_OFFSET + apiID_ULTASKNOTIFYTAKE, xClearCountOnExit, xTicksToWait)
#define traceTASK_DELAY() SEGGER_SYSVIEW_RecordU32 (apiID_OFFSET + apiID_VTASKDELAY, xTicksToDelay) #define traceTASK_DELAY() SEGGER_SYSVIEW_RecordU32(apiFastID_OFFSET + apiID_VTASKDELAY, xTicksToDelay)
#define traceTASK_DELAY_UNTIL(xTimeToWake) SEGGER_SYSVIEW_RecordVoid (apiID_OFFSET + apiID_VTASKDELAYUNTIL) #define traceTASK_DELAY_UNTIL() SEGGER_SYSVIEW_RecordVoid(apiFastID_OFFSET + apiID_VTASKDELAYUNTIL)
#define traceTASK_NOTIFY_GIVE_FROM_ISR() SEGGER_SYSVIEW_RecordU32x2(apiID_OFFSET + apiID_VTASKNOTIFYGIVEFROMISR, SEGGER_SYSVIEW_ShrinkId((U32)pxTCB), (U32)pxHigherPriorityTaskWoken) #define traceTASK_DELETE( pxTCB ) if (pxTCB != NULL) { \
#define traceTASK_PRIORITY_INHERIT( pxTCB, uxPriority ) SEGGER_SYSVIEW_RecordU32 (apiID_OFFSET + apiID_VTASKPRIORITYINHERIT, (U32)pxMutexHolder) SEGGER_SYSVIEW_RecordU32(apiFastID_OFFSET + apiID_VTASKDELETE, \
#define traceTASK_RESUME( pxTCB ) SEGGER_SYSVIEW_RecordU32 (apiID_OFFSET + apiID_VTASKRESUME, SEGGER_SYSVIEW_ShrinkId((U32)pxTCB)) SEGGER_SYSVIEW_ShrinkId((U32)pxTCB)); \
#define traceINCREASE_TICK_COUNT( xTicksToJump ) SEGGER_SYSVIEW_RecordU32 (apiID_OFFSET + apiID_VTASKSTEPTICK, xTicksToJump) SYSVIEW_DeleteTask((U32)pxTCB); \
#define traceTASK_SUSPEND( pxTCB ) SEGGER_SYSVIEW_RecordU32 (apiID_OFFSET + apiID_VTASKSUSPEND, SEGGER_SYSVIEW_ShrinkId((U32)pxTCB)) }
#define traceTASK_PRIORITY_DISINHERIT( pxTCB, uxBasePriority ) SEGGER_SYSVIEW_RecordU32 (apiID_OFFSET + apiID_XTASKPRIORITYDISINHERIT, (U32)pxMutexHolder) #define traceTASK_NOTIFY_GIVE_FROM_ISR() SEGGER_SYSVIEW_RecordU32x2(apiFastID_OFFSET + apiID_VTASKNOTIFYGIVEFROMISR, SEGGER_SYSVIEW_ShrinkId((U32)pxTCB), (U32)pxHigherPriorityTaskWoken)
#define traceTASK_RESUME_FROM_ISR( pxTCB ) SEGGER_SYSVIEW_RecordU32 (apiID_OFFSET + apiID_XTASKRESUMEFROMISR, SEGGER_SYSVIEW_ShrinkId((U32)pxTCB)) #define traceTASK_PRIORITY_INHERIT( pxTCB, uxPriority ) SEGGER_SYSVIEW_RecordU32(apiFastID_OFFSET + apiID_VTASKPRIORITYINHERIT, (U32)pxMutexHolder)
#define traceTASK_NOTIFY() SEGGER_SYSVIEW_RecordU32x4(apiID_OFFSET + apiID_XTASKGENERICNOTIFY, SEGGER_SYSVIEW_ShrinkId((U32)pxTCB), ulValue, eAction, (U32)pulPreviousNotificationValue) #define traceTASK_RESUME( pxTCB ) SEGGER_SYSVIEW_RecordU32(apiFastID_OFFSET + apiID_VTASKRESUME, SEGGER_SYSVIEW_ShrinkId((U32)pxTCB))
#define traceTASK_NOTIFY_FROM_ISR() SEGGER_SYSVIEW_RecordU32x5(apiID_OFFSET + apiID_XTASKGENERICNOTIFYFROMISR, SEGGER_SYSVIEW_ShrinkId((U32)pxTCB), ulValue, eAction, (U32)pulPreviousNotificationValue, (U32)pxHigherPriorityTaskWoken) #define traceINCREASE_TICK_COUNT( xTicksToJump ) SEGGER_SYSVIEW_RecordU32(apiFastID_OFFSET + apiID_VTASKSTEPTICK, xTicksToJump)
#define traceTASK_NOTIFY_WAIT() SEGGER_SYSVIEW_RecordU32x4(apiID_OFFSET + apiID_XTASKNOTIFYWAIT, ulBitsToClearOnEntry, ulBitsToClearOnExit, (U32)pulNotificationValue, xTicksToWait) #define traceTASK_SUSPEND( pxTCB ) SEGGER_SYSVIEW_RecordU32(apiFastID_OFFSET + apiID_VTASKSUSPEND, SEGGER_SYSVIEW_ShrinkId((U32)pxTCB))
#define traceTASK_PRIORITY_DISINHERIT( pxTCB, uxBasePriority ) SEGGER_SYSVIEW_RecordU32(apiFastID_OFFSET + apiID_XTASKPRIORITYDISINHERIT, (U32)pxMutexHolder)
#define traceTASK_RESUME_FROM_ISR( pxTCB ) SEGGER_SYSVIEW_RecordU32(apiFastID_OFFSET + apiID_XTASKRESUMEFROMISR, SEGGER_SYSVIEW_ShrinkId((U32)pxTCB))
#define traceTASK_NOTIFY() SYSVIEW_RecordU32x4(apiFastID_OFFSET + apiID_XTASKGENERICNOTIFY, SEGGER_SYSVIEW_ShrinkId((U32)pxTCB), ulValue, eAction, (U32)pulPreviousNotificationValue)
#define traceTASK_NOTIFY_FROM_ISR() SYSVIEW_RecordU32x5(apiFastID_OFFSET + apiID_XTASKGENERICNOTIFYFROMISR, SEGGER_SYSVIEW_ShrinkId((U32)pxTCB), ulValue, eAction, (U32)pulPreviousNotificationValue, (U32)pxHigherPriorityTaskWoken)
#define traceTASK_NOTIFY_WAIT() SYSVIEW_RecordU32x4(apiFastID_OFFSET + apiID_XTASKNOTIFYWAIT, ulBitsToClearOnEntry, ulBitsToClearOnExit, (U32)pulNotificationValue, xTicksToWait)
#define traceQUEUE_CREATE( pxNewQueue ) SEGGER_SYSVIEW_RecordU32x3(apiID_OFFSET + apiID_XQUEUEGENERICCREATE, uxQueueLength, uxItemSize, ucQueueType) #define traceQUEUE_CREATE( pxNewQueue ) SEGGER_SYSVIEW_RecordU32x3(apiFastID_OFFSET + apiID_XQUEUEGENERICCREATE, uxQueueLength, uxItemSize, ucQueueType)
#define traceQUEUE_DELETE( pxQueue ) SEGGER_SYSVIEW_RecordU32 (apiID_OFFSET + apiID_VQUEUEDELETE, SEGGER_SYSVIEW_ShrinkId((U32)pxQueue)) #define traceQUEUE_DELETE( pxQueue ) SEGGER_SYSVIEW_RecordU32(apiFastID_OFFSET + apiID_VQUEUEDELETE, SEGGER_SYSVIEW_ShrinkId((U32)pxQueue))
#define traceQUEUE_PEEK( pxQueue ) SEGGER_SYSVIEW_RecordU32x4(apiID_OFFSET + apiID_XQUEUEGENERICRECEIVE, SEGGER_SYSVIEW_ShrinkId((U32)pxQueue), SEGGER_SYSVIEW_ShrinkId((U32)pvBuffer), xTicksToWait, 1) #define traceQUEUE_PEEK( pxQueue ) SYSVIEW_RecordU32x4(apiFastID_OFFSET + apiID_XQUEUEGENERICRECEIVE, SEGGER_SYSVIEW_ShrinkId((U32)pxQueue), SEGGER_SYSVIEW_ShrinkId((U32)pvBuffer), xTicksToWait, 0)
#define traceQUEUE_PEEK_FROM_ISR( pxQueue ) SEGGER_SYSVIEW_RecordU32x2(apiID_OFFSET + apiID_XQUEUEPEEKFROMISR, SEGGER_SYSVIEW_ShrinkId((U32)pxQueue), SEGGER_SYSVIEW_ShrinkId((U32)pvBuffer)) #define traceQUEUE_PEEK_FROM_ISR( pxQueue ) SEGGER_SYSVIEW_RecordU32x2(apiFastID_OFFSET + apiID_XQUEUEPEEKFROMISR, SEGGER_SYSVIEW_ShrinkId((U32)pxQueue), SEGGER_SYSVIEW_ShrinkId((U32)pvBuffer))
#define traceQUEUE_PEEK_FROM_ISR_FAILED( pxQueue ) SEGGER_SYSVIEW_RecordU32x2(apiID_OFFSET + apiID_XQUEUEPEEKFROMISR, SEGGER_SYSVIEW_ShrinkId((U32)pxQueue), SEGGER_SYSVIEW_ShrinkId((U32)pvBuffer)) #define traceQUEUE_PEEK_FROM_ISR_FAILED( pxQueue ) SEGGER_SYSVIEW_RecordU32x2(apiFastID_OFFSET + apiID_XQUEUEPEEKFROMISR, SEGGER_SYSVIEW_ShrinkId((U32)pxQueue), SEGGER_SYSVIEW_ShrinkId((U32)pvBuffer))
#define traceQUEUE_RECEIVE( pxQueue ) SEGGER_SYSVIEW_RecordU32x4(apiID_OFFSET + apiID_XQUEUEGENERICRECEIVE, SEGGER_SYSVIEW_ShrinkId((U32)pxQueue), SEGGER_SYSVIEW_ShrinkId((U32)0), xTicksToWait, 1) #define traceQUEUE_RECEIVE( pxQueue ) SEGGER_SYSVIEW_RecordU32x4(apiFastID_OFFSET + apiID_XQUEUEGENERICRECEIVE, SEGGER_SYSVIEW_ShrinkId((U32)pxQueue), SEGGER_SYSVIEW_ShrinkId((U32)0), xTicksToWait, 1)
#define traceQUEUE_RECEIVE_FAILED( pxQueue ) SEGGER_SYSVIEW_RecordU32x4(apiID_OFFSET + apiID_XQUEUEGENERICRECEIVE, SEGGER_SYSVIEW_ShrinkId((U32)pxQueue), SEGGER_SYSVIEW_ShrinkId((U32)0), xTicksToWait, 1) #define traceQUEUE_RECEIVE_FAILED( pxQueue ) SEGGER_SYSVIEW_RecordU32x4(apiFastID_OFFSET + apiID_XQUEUEGENERICRECEIVE, SEGGER_SYSVIEW_ShrinkId((U32)pxQueue), SEGGER_SYSVIEW_ShrinkId((U32)0), xTicksToWait, 1)
#define traceQUEUE_SEMAPHORE_RECEIVE( pxQueue ) SEGGER_SYSVIEW_RecordU32x4(apiID_OFFSET + apiID_XQUEUEGENERICRECEIVE, SEGGER_SYSVIEW_ShrinkId((U32)pxQueue), SEGGER_SYSVIEW_ShrinkId((U32)0), xTicksToWait, 0) #define traceQUEUE_SEMAPHORE_RECEIVE( pxQueue ) SEGGER_SYSVIEW_RecordU32x4(apiFastID_OFFSET + apiID_XQUEUEGENERICRECEIVE, SEGGER_SYSVIEW_ShrinkId((U32)pxQueue), SEGGER_SYSVIEW_ShrinkId((U32)0), xTicksToWait, 0)
#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) #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)
#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) #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)
#define traceQUEUE_REGISTRY_ADD( xQueue, pcQueueName ) SEGGER_SYSVIEW_RecordU32x2(apiID_OFFSET + apiID_VQUEUEADDTOREGISTRY, SEGGER_SYSVIEW_ShrinkId((U32)xQueue), (U32)pcQueueName) #define traceQUEUE_REGISTRY_ADD( xQueue, pcQueueName ) SEGGER_SYSVIEW_RecordU32x2(apiFastID_OFFSET + apiID_VQUEUEADDTOREGISTRY, SEGGER_SYSVIEW_ShrinkId((U32)xQueue), (U32)pcQueueName)
#if ( configUSE_QUEUE_SETS != 1 ) #if ( configUSE_QUEUE_SETS != 1 )
#define traceQUEUE_SEND( pxQueue ) SEGGER_SYSVIEW_RecordU32x4(apiID_OFFSET + apiID_XQUEUEGENERICSEND, SEGGER_SYSVIEW_ShrinkId((U32)pxQueue), (U32)pvItemToQueue, xTicksToWait, xCopyPosition) #define traceQUEUE_SEND( pxQueue ) SYSVIEW_RecordU32x4(apiFastID_OFFSET + apiID_XQUEUEGENERICSEND, SEGGER_SYSVIEW_ShrinkId((U32)pxQueue), (U32)pvItemToQueue, xTicksToWait, xCopyPosition)
#else #else
#define traceQUEUE_SEND( pxQueue ) SEGGER_SYSVIEW_RecordU32x4(apiID_OFFSET + apiID_XQUEUEGENERICSEND, SEGGER_SYSVIEW_ShrinkId((U32)pxQueue), 0u, 0u, xCopyPosition) #define traceQUEUE_SEND( pxQueue ) SYSVIEW_RecordU32x4(apiFastID_OFFSET + apiID_XQUEUEGENERICSEND, SEGGER_SYSVIEW_ShrinkId((U32)pxQueue), 0, 0, xCopyPosition)
#endif #endif
#define traceQUEUE_SEND_FAILED( pxQueue ) SEGGER_SYSVIEW_RecordU32x4(apiID_OFFSET + apiID_XQUEUEGENERICSEND, SEGGER_SYSVIEW_ShrinkId((U32)pxQueue), (U32)pvItemToQueue, xTicksToWait, xCopyPosition) #define traceQUEUE_SEND_FAILED( pxQueue ) SYSVIEW_RecordU32x4(apiFastID_OFFSET + apiID_XQUEUEGENERICSEND, SEGGER_SYSVIEW_ShrinkId((U32)pxQueue), (U32)pvItemToQueue, xTicksToWait, xCopyPosition)
#define traceQUEUE_SEND_FROM_ISR( pxQueue ) SEGGER_SYSVIEW_RecordU32x2(apiID_OFFSET + apiID_XQUEUEGENERICSENDFROMISR, SEGGER_SYSVIEW_ShrinkId((U32)pxQueue), (U32)pxHigherPriorityTaskWoken) #define traceQUEUE_SEND_FROM_ISR( pxQueue ) SEGGER_SYSVIEW_RecordU32x4(apiFastID_OFFSET + apiID_XQUEUEGENERICSENDFROMISR, SEGGER_SYSVIEW_ShrinkId((U32)pxQueue), (U32)pvItemToQueue, (U32)pxHigherPriorityTaskWoken, xCopyPosition)
#define traceQUEUE_SEND_FROM_ISR_FAILED( pxQueue ) SEGGER_SYSVIEW_RecordU32x2(apiID_OFFSET + apiID_XQUEUEGENERICSENDFROMISR, SEGGER_SYSVIEW_ShrinkId((U32)pxQueue), (U32)pxHigherPriorityTaskWoken) #define traceQUEUE_SEND_FROM_ISR_FAILED( pxQueue ) SEGGER_SYSVIEW_RecordU32x4(apiFastID_OFFSET + apiID_XQUEUEGENERICSENDFROMISR, SEGGER_SYSVIEW_ShrinkId((U32)pxQueue), (U32)pvItemToQueue, (U32)pxHigherPriorityTaskWoken, xCopyPosition)
#define traceSTREAM_BUFFER_CREATE( pxStreamBuffer, xIsMessageBuffer ) SEGGER_SYSVIEW_RecordU32x2(apiID_OFFSET + apiID_XSTREAMBUFFERCREATE, (U32)xIsMessageBuffer, (U32)pxStreamBuffer) #define traceQUEUE_GIVE_FROM_ISR( pxQueue ) SEGGER_SYSVIEW_RecordU32x2(apiFastID_OFFSET + apiID_XQUEUEGIVEFROMISR, SEGGER_SYSVIEW_ShrinkId((U32)pxQueue), (U32)pxHigherPriorityTaskWoken)
#define traceSTREAM_BUFFER_CREATE_FAILED( xIsMessageBuffer ) SEGGER_SYSVIEW_RecordU32x2(apiID_OFFSET + apiID_XSTREAMBUFFERCREATE, (U32)xIsMessageBuffer, 0u) #define traceQUEUE_GIVE_FROM_ISR_FAILED( pxQueue ) SEGGER_SYSVIEW_RecordU32x2(apiFastID_OFFSET + apiID_XQUEUEGIVEFROMISR, SEGGER_SYSVIEW_ShrinkId((U32)pxQueue), (U32)pxHigherPriorityTaskWoken)
#define traceSTREAM_BUFFER_DELETE( xStreamBuffer ) SEGGER_SYSVIEW_RecordU32 (apiID_OFFSET + apiID_VSTREAMBUFFERDELETE, (U32)xStreamBuffer)
#define traceSTREAM_BUFFER_RESET( xStreamBuffer ) SEGGER_SYSVIEW_RecordU32 (apiID_OFFSET + apiID_XSTREAMBUFFERRESET, (U32)xStreamBuffer)
#define traceSTREAM_BUFFER_SEND( xStreamBuffer, xBytesSent ) SEGGER_SYSVIEW_RecordU32x2(apiID_OFFSET + apiID_XSTREAMBUFFERSEND, (U32)xStreamBuffer, (U32)xBytesSent)
#define traceSTREAM_BUFFER_SEND_FAILED( xStreamBuffer ) SEGGER_SYSVIEW_RecordU32x2(apiID_OFFSET + apiID_XSTREAMBUFFERSEND, (U32)xStreamBuffer, 0u)
#define traceSTREAM_BUFFER_SEND_FROM_ISR( xStreamBuffer, xBytesSent ) SEGGER_SYSVIEW_RecordU32x2(apiID_OFFSET + apiID_XSTREAMBUFFERSENDFROMISR, (U32)xStreamBuffer, (U32)xBytesSent)
#define traceSTREAM_BUFFER_RECEIVE( xStreamBuffer, xReceivedLength ) SEGGER_SYSVIEW_RecordU32x2(apiID_OFFSET + apiID_XSTREAMBUFFERRECEIVE, (U32)xStreamBuffer, (U32)xReceivedLength)
#define traceSTREAM_BUFFER_RECEIVE_FAILED( xStreamBuffer ) SEGGER_SYSVIEW_RecordU32x2(apiID_OFFSET + apiID_XSTREAMBUFFERRECEIVE, (U32)xStreamBuffer, 0u)
#define traceSTREAM_BUFFER_RECEIVE_FROM_ISR( xStreamBuffer, xReceivedLength ) SEGGER_SYSVIEW_RecordU32x2(apiID_OFFSET + apiID_XSTREAMBUFFERRECEIVEFROMISR, (U32)xStreamBuffer, (U32)xReceivedLength)
#define traceTASK_DELETE( pxTCB ) { \
SEGGER_SYSVIEW_RecordU32(apiID_OFFSET + apiID_VTASKDELETE, SEGGER_SYSVIEW_ShrinkId((U32)pxTCB)); \
SYSVIEW_DeleteTask((U32)pxTCB); \
}
#if( portSTACK_GROWTH < 0 ) #if( portSTACK_GROWTH < 0 )
#define traceTASK_CREATE(pxNewTCB) if (pxNewTCB != NULL) { \ #define traceTASK_CREATE(pxNewTCB) if (pxNewTCB != NULL) { \
@@ -265,7 +272,7 @@ Notes:
} }
#endif #endif
#define traceTASK_PRIORITY_SET(pxTask, uxNewPriority) { \ #define traceTASK_PRIORITY_SET(pxTask, uxNewPriority) { \
SEGGER_SYSVIEW_RecordU32x2(apiID_OFFSET+apiID_VTASKPRIORITYSET, \ SEGGER_SYSVIEW_RecordU32x2(apiFastID_OFFSET+apiID_VTASKPRIORITYSET, \
SEGGER_SYSVIEW_ShrinkId((U32)pxTCB), \ SEGGER_SYSVIEW_ShrinkId((U32)pxTCB), \
uxNewPriority \ uxNewPriority \
); \ ); \
@@ -280,15 +287,15 @@ Notes:
// Define INCLUDE_xTaskGetIdleTaskHandle as 1 in FreeRTOSConfig.h to allow identification of Idle state. // Define INCLUDE_xTaskGetIdleTaskHandle as 1 in FreeRTOSConfig.h to allow identification of Idle state.
// //
#if ( INCLUDE_xTaskGetIdleTaskHandle == 1 ) #if ( INCLUDE_xTaskGetIdleTaskHandle == 1 )
#define traceTASK_SWITCHED_IN() if(prvGetTCBFromHandle(NULL) == xIdleTaskHandle) { \ #define traceTASK_SWITCHED_IN() if(prvGetTCBFromHandle(NULL) == xTaskGetIdleTaskHandle()) { \
SEGGER_SYSVIEW_OnIdle(); \ SEGGER_SYSVIEW_OnIdle(); \
} else { \ } else { \
SEGGER_SYSVIEW_OnTaskStartExec((U32)pxCurrentTCB); \ SEGGER_SYSVIEW_OnTaskStartExec((U32)pxCurrentTCB[xPortGetCoreID()]); \
} }
#else #else
#define traceTASK_SWITCHED_IN() { \ #define traceTASK_SWITCHED_IN() { \
if (memcmp(pxCurrentTCB->pcTaskName, "IDLE", 5) != 0) { \ if (memcmp(pxCurrentTCB[xPortGetCoreID()]->pcTaskName, "IDLE", 5) != 0) { \
SEGGER_SYSVIEW_OnTaskStartExec((U32)pxCurrentTCB); \ SEGGER_SYSVIEW_OnTaskStartExec((U32)pxCurrentTCB[xPortGetCoreID()]); \
} else { \ } else { \
SEGGER_SYSVIEW_OnIdle(); \ SEGGER_SYSVIEW_OnIdle(); \
} \ } \
@@ -296,13 +303,12 @@ Notes:
#endif #endif
#define traceMOVED_TASK_TO_READY_STATE(pxTCB) SEGGER_SYSVIEW_OnTaskStartReady((U32)pxTCB) #define traceMOVED_TASK_TO_READY_STATE(pxTCB) SEGGER_SYSVIEW_OnTaskStartReady((U32)pxTCB)
#define traceREADDED_TASK_TO_READY_STATE(pxTCB) #define traceREADDED_TASK_TO_READY_STATE(pxTCB)
#define traceMOVED_TASK_TO_DELAYED_LIST() SEGGER_SYSVIEW_OnTaskStopReady((U32)pxCurrentTCB, (1u << 2)) #define traceMOVED_TASK_TO_DELAYED_LIST() SEGGER_SYSVIEW_OnTaskStopReady((U32)pxCurrentTCB[xPortGetCoreID()], (1u << 2))
#define traceMOVED_TASK_TO_OVERFLOW_DELAYED_LIST() SEGGER_SYSVIEW_OnTaskStopReady((U32)pxCurrentTCB, (1u << 2)) #define traceMOVED_TASK_TO_OVERFLOW_DELAYED_LIST() SEGGER_SYSVIEW_OnTaskStopReady((U32)pxCurrentTCB[xPortGetCoreID()], (1u << 2))
#define traceMOVED_TASK_TO_SUSPENDED_LIST(pxTCB) SEGGER_SYSVIEW_OnTaskStopReady((U32)pxTCB, ((3u << 3) | 3)) #define traceMOVED_TASK_TO_SUSPENDED_LIST(pxTCB) SEGGER_SYSVIEW_OnTaskStopReady((U32)pxTCB, ((3u << 3) | 3))
#define traceISR_EXIT_TO_SCHEDULER() SEGGER_SYSVIEW_RecordExitISRToScheduler() #define traceISR_EXIT_TO_SCHEDULER() SEGGER_SYSVIEW_RecordExitISRToScheduler()
#define traceISR_EXIT() SEGGER_SYSVIEW_RecordExitISR() #define traceISR_EXIT() SEGGER_SYSVIEW_RecordExitISR()
#define traceISR_ENTER(_n_) SEGGER_SYSVIEW_RecordEnterISR(_n_) #define traceISR_ENTER(_n_) SEGGER_SYSVIEW_RecordEnterISR(_n_)
@@ -320,6 +326,8 @@ void SYSVIEW_AddTask (U32 xHandle, const char* pcTaskName, unsigned uxCurre
void SYSVIEW_UpdateTask (U32 xHandle, const char* pcTaskName, unsigned uxCurrentPriority, U32 pxStack, unsigned uStackHighWaterMark); void SYSVIEW_UpdateTask (U32 xHandle, const char* pcTaskName, unsigned uxCurrentPriority, U32 pxStack, unsigned uStackHighWaterMark);
void SYSVIEW_DeleteTask (U32 xHandle); void SYSVIEW_DeleteTask (U32 xHandle);
void SYSVIEW_SendTaskInfo (U32 TaskID, const char* sName, unsigned Prio, U32 StackBase, unsigned StackSize); void SYSVIEW_SendTaskInfo (U32 TaskID, const char* sName, unsigned Prio, U32 StackBase, unsigned StackSize);
void SYSVIEW_RecordU32x4 (unsigned Id, U32 Para0, U32 Para1, U32 Para2, U32 Para3);
void SYSVIEW_RecordU32x5 (unsigned Id, U32 Para0, U32 Para1, U32 Para2, U32 Para3, U32 Para4);
#ifdef __cplusplus #ifdef __cplusplus
} }
@@ -327,4 +335,4 @@ void SYSVIEW_SendTaskInfo (U32 TaskID, const char* sName, unsigned Prio, U32 Sta
#endif #endif
/*************************** End of file ****************************/ /*************************** End of file ****************************/

View File

@@ -714,12 +714,12 @@ static SPI_MASTER_ISR_ATTR void uninstall_priv_desc(spi_trans_priv_t* trans_buf)
{ {
spi_transaction_t *trans_desc = trans_buf->trans; spi_transaction_t *trans_desc = trans_buf->trans;
if ((void *)trans_buf->buffer_to_send != &trans_desc->tx_data[0] && if ((void *)trans_buf->buffer_to_send != &trans_desc->tx_data[0] &&
trans_buf->buffer_to_send != trans_desc->tx_buffer) { trans_buf->buffer_to_send != trans_desc->tx_buffer) { // NOLINT(clang-analyzer-unix.Malloc)
free((void *)trans_buf->buffer_to_send); //force free, ignore const free((void *)trans_buf->buffer_to_send); //force free, ignore const
} }
// copy data from temporary DMA-capable buffer back to IRAM buffer and free the temporary one. // copy data from temporary DMA-capable buffer back to IRAM buffer and free the temporary one.
if ((void *)trans_buf->buffer_to_rcv != &trans_desc->rx_data[0] && if ((void *)trans_buf->buffer_to_rcv != &trans_desc->rx_data[0] &&
trans_buf->buffer_to_rcv != trans_desc->rx_buffer) { trans_buf->buffer_to_rcv != trans_desc->rx_buffer) { // NOLINT(clang-analyzer-unix.Malloc)
if (trans_desc->flags & SPI_TRANS_USE_RXDATA) { if (trans_desc->flags & SPI_TRANS_USE_RXDATA) {
memcpy((uint8_t *) & trans_desc->rx_data[0], trans_buf->buffer_to_rcv, (trans_desc->rxlength + 7) / 8); memcpy((uint8_t *) & trans_desc->rx_data[0], trans_buf->buffer_to_rcv, (trans_desc->rxlength + 7) / 8);
} else { } else {

View File

@@ -544,7 +544,7 @@ static const uint8_t data_drom[320+3] = {
0x70, 0x22, 0x7D, 0x0A, 0x6D, 0xD3, 0x77, 0x73, 0xD0, 0xF4, 0x06, 0xB2, 0x19, 0x8C, 0xFF, 0x58, 0xE4, 0xDB, 0xE9, 0xEC, 0x89, 0x6A, 0xF4, 0x0E, 0x67, 0x12, 0xEC, 0x11, 0xD2, 0x1F, 0x8D, 0xD7, 0x70, 0x22, 0x7D, 0x0A, 0x6D, 0xD3, 0x77, 0x73, 0xD0, 0xF4, 0x06, 0xB2, 0x19, 0x8C, 0xFF, 0x58, 0xE4, 0xDB, 0xE9, 0xEC, 0x89, 0x6A, 0xF4, 0x0E, 0x67, 0x12, 0xEC, 0x11, 0xD2, 0x1F, 0x8D, 0xD7,
}; };
TEST_CASE("SPI Master DMA test, TX and RX in different regions", "[spi] [ignore]") TEST_CASE("SPI Master DMA test, TX and RX in different regions", "[spi][ignore]")
{ {
#ifdef CONFIG_SPIRAM #ifdef CONFIG_SPIRAM
//test psram if enabled //test psram if enabled

View File

@@ -5,6 +5,10 @@ entries:
panic_handler (noflash) panic_handler (noflash)
reset_reason (noflash) reset_reason (noflash)
system_api:esp_system_abort (noflash) system_api:esp_system_abort (noflash)
startup:do_core_init (default)
startup:do_secondary_init (default)
startup:start_cpu0_default (default)
if ESP_CONSOLE_USB_CDC_SUPPORT_ETS_PRINTF: if ESP_CONSOLE_USB_CDC_SUPPORT_ETS_PRINTF:
usb_console:esp_usb_console_write_char (noflash) usb_console:esp_usb_console_write_char (noflash)

View File

@@ -454,6 +454,10 @@ extern "C" {
#define traceCREATE_COUNTING_SEMAPHORE_FAILED() #define traceCREATE_COUNTING_SEMAPHORE_FAILED()
#endif #endif
#ifndef traceQUEUE_SEMAPHORE_RECEIVE
#define traceQUEUE_SEMAPHORE_RECEIVE( pxQueue )
#endif
#ifndef traceQUEUE_SEND #ifndef traceQUEUE_SEND
#define traceQUEUE_SEND( pxQueue ) #define traceQUEUE_SEND( pxQueue )
#endif #endif
@@ -506,6 +510,14 @@ extern "C" {
#define traceQUEUE_DELETE( pxQueue ) #define traceQUEUE_DELETE( pxQueue )
#endif #endif
#ifndef traceQUEUE_GIVE_FROM_ISR
#define traceQUEUE_GIVE_FROM_ISR( pxQueue )
#endif
#ifndef traceQUEUE_GIVE_FROM_ISR_FAILED
#define traceQUEUE_GIVE_FROM_ISR_FAILED( pxQueue )
#endif
#ifndef traceTASK_CREATE #ifndef traceTASK_CREATE
#define traceTASK_CREATE( pxNewTCB ) #define traceTASK_CREATE( pxNewTCB )
#endif #endif

View File

@@ -1171,7 +1171,7 @@ Queue_t * const pxQueue = xQueue;
{ {
const int8_t cTxLock = pxQueue->cTxLock; const int8_t cTxLock = pxQueue->cTxLock;
traceQUEUE_SEND_FROM_ISR( pxQueue ); traceQUEUE_GIVE_FROM_ISR( pxQueue );
/* A task can only have an inherited priority if it is a mutex /* A task can only have an inherited priority if it is a mutex
holder - and if there is a mutex holder then the mutex cannot be holder - and if there is a mutex holder then the mutex cannot be
@@ -1276,7 +1276,7 @@ Queue_t * const pxQueue = xQueue;
} }
else else
{ {
traceQUEUE_SEND_FROM_ISR_FAILED( pxQueue ); traceQUEUE_GIVE_FROM_ISR_FAILED( pxQueue );
xReturn = errQUEUE_FULL; xReturn = errQUEUE_FULL;
} }
taskEXIT_CRITICAL_ISR(&pxQueue->mux); taskEXIT_CRITICAL_ISR(&pxQueue->mux);
@@ -1462,7 +1462,7 @@ Queue_t * const pxQueue = xQueue;
must be the highest priority task wanting to access the queue. */ must be the highest priority task wanting to access the queue. */
if( uxSemaphoreCount > ( UBaseType_t ) 0 ) if( uxSemaphoreCount > ( UBaseType_t ) 0 )
{ {
traceQUEUE_RECEIVE( pxQueue ); traceQUEUE_SEMAPHORE_RECEIVE( pxQueue );
/* Semaphores are queues with a data size of zero and where the /* Semaphores are queues with a data size of zero and where the
messages waiting is the semaphore's count. Reduce the count. */ messages waiting is the semaphore's count. Reduce the count. */

View File

@@ -601,12 +601,10 @@ static void prvAddNewTaskToReadyList( TCB_t *pxNewTCB, TaskFunction_t pxTaskCode
*/ */
void taskYIELD_OTHER_CORE( BaseType_t xCoreID, UBaseType_t uxPriority ) void taskYIELD_OTHER_CORE( BaseType_t xCoreID, UBaseType_t uxPriority )
{ {
TCB_t *curTCB;
BaseType_t i; BaseType_t i;
if (xCoreID != tskNO_AFFINITY) { if (xCoreID != tskNO_AFFINITY) {
curTCB = pxCurrentTCB[xCoreID]; if ( pxCurrentTCB[ xCoreID ]->uxPriority < uxPriority ) { // NOLINT(clang-analyzer-core.NullDereference) IDF-685
if ( curTCB->uxPriority < uxPriority ) { // NOLINT(clang-analyzer-core.NullDereference) IDF-685
vPortYieldOtherCore( xCoreID ); vPortYieldOtherCore( xCoreID );
} }
} }
@@ -1440,7 +1438,7 @@ static void prvAddNewTaskToReadyList( TCB_t *pxNewTCB, TaskFunction_t pxTaskCode
if( xShouldDelay != pdFALSE ) if( xShouldDelay != pdFALSE )
{ {
traceTASK_DELAY_UNTIL( xTimeToWake ); traceTASK_DELAY_UNTIL();
/* prvAddCurrentTaskToDelayedList() needs the block time, not /* prvAddCurrentTaskToDelayedList() needs the block time, not
the time to wake, so subtract the current tick count. */ the time to wake, so subtract the current tick count. */
@@ -3433,7 +3431,7 @@ void vTaskPlaceOnUnorderedEventList( List_t * pxEventList, const TickType_t xIte
xTicksToWait = portMAX_DELAY; xTicksToWait = portMAX_DELAY;
} }
traceTASK_DELAY_UNTIL( ( xTickCount + xTicksToWait ) ); traceTASK_DELAY_UNTIL( );
prvAddCurrentTaskToDelayedList( xPortGetCoreID(), xTicksToWait ); prvAddCurrentTaskToDelayedList( xPortGetCoreID(), xTicksToWait );
taskEXIT_CRITICAL(&xTaskQueueMutex); taskEXIT_CRITICAL(&xTaskQueueMutex);
} }

View File

@@ -93,8 +93,10 @@ extern "C" {
#ifdef CONFIG_LEGACY_INCLUDE_COMMON_HEADERS #ifdef CONFIG_LEGACY_INCLUDE_COMMON_HEADERS
#include "soc/soc_memory_layout.h" #include "soc/soc_memory_layout.h"
#endif
#include "esp_system.h" #include "esp_system.h"
#include "soc/cpu.h" #include "soc/cpu.h"
#include <limits.h>
/*----------------------------------------------------------- /*-----------------------------------------------------------
* Port specific definitions. * Port specific definitions.

View File

@@ -103,8 +103,8 @@ pool_t tlsf_add_pool(tlsf_t tlsf, void* mem, size_t bytes);
void tlsf_remove_pool(tlsf_t tlsf, pool_t pool); void tlsf_remove_pool(tlsf_t tlsf, pool_t pool);
/* malloc/memalign/realloc/free replacements. */ /* malloc/memalign/realloc/free replacements. */
void* tlsf_malloc(tlsf_t tlsf, size_t bytes); void* tlsf_malloc(tlsf_t tlsf, size_t size);
void* tlsf_memalign(tlsf_t tlsf, size_t align, size_t bytes); void* tlsf_memalign(tlsf_t tlsf, size_t align, size_t size);
void* tlsf_realloc(tlsf_t tlsf, void* ptr, size_t size); void* tlsf_realloc(tlsf_t tlsf, void* ptr, size_t size);
void tlsf_free(tlsf_t tlsf, void* ptr); void tlsf_free(tlsf_t tlsf, void* ptr);

View File

@@ -145,8 +145,8 @@ TEST_CASE("heap_caps metadata test", "[heap]")
multi_heap_info_t after; multi_heap_info_t after;
heap_caps_get_info(&after, MALLOC_CAP_8BIT); heap_caps_get_info(&after, MALLOC_CAP_8BIT);
TEST_ASSERT(after.largest_free_block < original.largest_free_block); TEST_ASSERT(after.largest_free_block <= original.largest_free_block);
TEST_ASSERT(after.total_free_bytes < original.total_free_bytes); TEST_ASSERT(after.total_free_bytes <= original.total_free_bytes);
free(b); free(b);
heap_caps_get_info(&after, MALLOC_CAP_8BIT); heap_caps_get_info(&after, MALLOC_CAP_8BIT);

View File

@@ -24,7 +24,7 @@ TEST_CASE("realloc shrink buffer in place", "[heap]")
#endif #endif
#ifndef CONFIG_ESP32S2_MEMPROT_FEATURE #ifndef CONFIG_ESP32S2_MEMPROT_FEATURE
TEST_CASE("realloc shrink buffer with EXEC CAPS", "[heap]") TEST_CASE("realloc shrink buffer with EXEC CAPS", "[heap][ignore]")
{ {
const size_t buffer_size = 64; const size_t buffer_size = 64;

View File

@@ -7,7 +7,7 @@ Overview
This section contains documentation of FreeRTOS types, functions, and macros. It is automatically generated from FreeRTOS header files. This section contains documentation of FreeRTOS types, functions, and macros. It is automatically generated from FreeRTOS header files.
.. note:: .. note::
ESP-IDF FreeRTOS is based on the Xtensa port of FreeRTOS v8.2.0, however some functions of FreeRTOS v9.0.0 have been backported. See the :ref:`backported-features` for more information. ESP-IDF FreeRTOS is based on the Xtensa port of FreeRTOS v10.2.0,
For more information about FreeRTOS features specific to ESP-IDF, see :doc:`ESP-IDF FreeRTOS SMP Changes<../../api-guides/freertos-smp>` For more information about FreeRTOS features specific to ESP-IDF, see :doc:`ESP-IDF FreeRTOS SMP Changes<../../api-guides/freertos-smp>`
and :doc:`ESP-IDF FreeRTOS Additions<freertos_additions>`. and :doc:`ESP-IDF FreeRTOS Additions<freertos_additions>`.

View File

@@ -20,4 +20,4 @@ skip:
- "components/nghttp/nghttp2" - "components/nghttp/nghttp2"
- "components/protobuf-c/protobuf-c" - "components/protobuf-c/protobuf-c"
- "components/spiffs/spiffs" - "components/spiffs/spiffs"
- "components/unity/unity" - "components/unity/unity"

View File

@@ -1,3 +1,3 @@
# This config is split between targets since different component needs to be included (esp32, esp32s2) # This config is split between targets since different component needs to be included (esp32, esp32s2)
CONFIG_IDF_TARGET="esp32" CONFIG_IDF_TARGET="esp32"
TEST_COMPONENTS=freertos esp32 esp_ipc esp_system esp_timer driver heap pthread soc spi_flash vfs TEST_COMPONENTS=freertos esp32 esp_ipc driver heap soc spi_flash vfs