diff --git a/components/app_trace/sys_view/Sample/OS/SEGGER_SYSVIEW_FreeRTOS.c b/components/app_trace/sys_view/Sample/OS/SEGGER_SYSVIEW_FreeRTOS.c index 46a1c5f548..6b55c4f565 100644 --- a/components/app_trace/sys_view/Sample/OS/SEGGER_SYSVIEW_FreeRTOS.c +++ b/components/app_trace/sys_view/Sample/OS/SEGGER_SYSVIEW_FreeRTOS.c @@ -1,9 +1,9 @@ /********************************************************************* -* SEGGER Microcontroller GmbH * +* SEGGER Microcontroller GmbH & Co. KG * * The Embedded Experts * ********************************************************************** * * -* (c) 1995 - 2019 SEGGER Microcontroller GmbH * +* (c) 2015 - 2017 SEGGER Microcontroller GmbH & Co. KG * * * * www.segger.com Support: support@segger.com * * * @@ -17,14 +17,24 @@ * * * SEGGER strongly recommends to not make any changes * * 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 * * without modification, are permitted provided that the following * -* condition is met: * +* conditions are met: * * * * 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 * * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, * @@ -42,14 +52,14 @@ * * ********************************************************************** * * -* SystemView version: 3.10 * +* SystemView version: V2.42 * * * ********************************************************************** -------------------------- END-OF-HEADER ----------------------------- File : SEGGER_SYSVIEW_FreeRTOS.c Purpose : Interface between FreeRTOS and SystemView. -Revision: $Rev: 7947 $ +Revision: $Rev: 3734 $ */ #include "freertos/FreeRTOS.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 unsigned _NumTasks; /********************************************************************* * @@ -84,11 +93,13 @@ static unsigned _NumTasks; static void _cbSendTaskList(void) { 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 - _aTasks[n].uStackHighWaterMark = uxTaskGetStackHighWaterMark((TaskHandle_t)_aTasks[n].xHandle); + _aTasks[n].uStackHighWaterMark = uxTaskGetStackHighWaterMark((TaskHandle_t)_aTasks[n].xHandle); #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. */ void SYSVIEW_AddTask(U32 xHandle, const char* pcTaskName, unsigned uxCurrentPriority, U32 pxStack, unsigned uStackHighWaterMark) { + unsigned n; if (memcmp(pcTaskName, "IDLE", 5) == 0) { 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."); return; } - _aTasks[_NumTasks].xHandle = xHandle; - _aTasks[_NumTasks].pcTaskName = pcTaskName; - _aTasks[_NumTasks].uxCurrentPriority = uxCurrentPriority; - _aTasks[_NumTasks].pxStack = pxStack; - _aTasks[_NumTasks].uStackHighWaterMark = uStackHighWaterMark; - - _NumTasks++; + _aTasks[n].xHandle = xHandle; + _aTasks[n].pcTaskName = pcTaskName; + _aTasks[n].uxCurrentPriority = uxCurrentPriority; + _aTasks[n].pxStack = pxStack; + _aTasks[n].uStackHighWaterMark = uStackHighWaterMark; SYSVIEW_SendTaskInfo(xHandle, pcTaskName,uxCurrentPriority, pxStack, uStackHighWaterMark); @@ -160,12 +175,12 @@ void SYSVIEW_UpdateTask(U32 xHandle, const char* pcTaskName, unsigned uxCurrentP return; } - for (n = 0; n < _NumTasks; n++) { + for (n = 0; n < SYSVIEW_FREERTOS_MAX_NOF_TASKS; n++) { if (_aTasks[n].xHandle == xHandle) { break; } } - if (n < _NumTasks) { + if (n < SYSVIEW_FREERTOS_MAX_NOF_TASKS) { _aTasks[n].pcTaskName = pcTaskName; _aTasks[n].uxCurrentPriority = uxCurrentPriority; _aTasks[n].pxStack = pxStack; @@ -186,36 +201,18 @@ void SYSVIEW_UpdateTask(U32 xHandle, const char* pcTaskName, unsigned uxCurrentP */ void SYSVIEW_DeleteTask(U32 xHandle) { unsigned n; - - if (_NumTasks == 0) { - return; // Early out - } - for (n = 0; n < _NumTasks; n++) { + + for (n = 0; n < SYSVIEW_FREERTOS_MAX_NOF_TASKS; n++) { if (_aTasks[n].xHandle == xHandle) { break; } } - if (n == (_NumTasks - 1)) { - // - // Task is last item in list. - // 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--; + if (n == SYSVIEW_FREERTOS_MAX_NOF_TASKS) { + SEGGER_SYSVIEW_Warn("SYSTEMVIEW: Could not find task information. Cannot delete task."); + return; } + + _aTasks[n].xHandle = 0; } /********************************************************************* @@ -237,6 +234,47 @@ void SYSVIEW_SendTaskInfo(U32 TaskID, const char* sName, unsigned Prio, U32 Stac 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 @@ -249,4 +287,4 @@ const SEGGER_SYSVIEW_OS_API SYSVIEW_X_OS_TraceAPI = { _cbSendTaskList, }; -/*************************** End of file ****************************/ \ No newline at end of file +/*************************** End of file ****************************/ diff --git a/components/app_trace/sys_view/Sample/OS/SEGGER_SYSVIEW_FreeRTOS.h b/components/app_trace/sys_view/Sample/OS/SEGGER_SYSVIEW_FreeRTOS.h index 6fd742607f..5607bdb4b6 100644 --- a/components/app_trace/sys_view/Sample/OS/SEGGER_SYSVIEW_FreeRTOS.h +++ b/components/app_trace/sys_view/Sample/OS/SEGGER_SYSVIEW_FreeRTOS.h @@ -1,9 +1,9 @@ /********************************************************************* -* SEGGER Microcontroller GmbH * +* SEGGER Microcontroller GmbH & Co. KG * * The Embedded Experts * ********************************************************************** * * -* (c) 1995 - 2019 SEGGER Microcontroller GmbH * +* (c) 2015 - 2017 SEGGER Microcontroller GmbH & Co. KG * * * * www.segger.com Support: support@segger.com * * * @@ -17,14 +17,24 @@ * * * SEGGER strongly recommends to not make any changes * * 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 * * without modification, are permitted provided that the following * -* condition is met: * +* conditions are met: * * * * 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 * * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, * @@ -42,14 +52,14 @@ * * ********************************************************************** * * -* SystemView version: 3.10 * +* SystemView version: V2.42 * * * ********************************************************************** -------------------------- END-OF-HEADER ----------------------------- File : SEGGER_SYSVIEW_FreeRTOS.h Purpose : Interface between FreeRTOS and SystemView. -Revision: $Rev: 7745 $ +Revision: $Rev: 3734 $ Notes: (1) Include this file at the end of FreeRTOSConfig.h @@ -70,7 +80,7 @@ Notes: #define portSTACK_GROWTH ( -1 ) #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_VTASKDELETE (2u) -#define apiID_VTASKDELAY (3u) -#define apiID_VTASKDELAYUNTIL (4u) -#define apiID_UXTASKPRIORITYGET (5u) -#define apiID_UXTASKPRIORITYGETFROMISR (6u) -#define apiID_ETASKGETSTATE (7u) -#define apiID_VTASKPRIORITYSET (8u) -#define apiID_VTASKSUSPEND (9u) -#define apiID_VTASKRESUME (10u) -#define apiID_XTASKRESUMEFROMISR (11u) -#define apiID_VTASKSTARTSCHEDULER (12u) -#define apiID_VTASKENDSCHEDULER (13u) -#define apiID_VTASKSUSPENDALL (14u) -#define apiID_XTASKRESUMEALL (15u) -#define apiID_XTASKGETTICKCOUNT (16u) -#define apiID_XTASKGETTICKCOUNTFROMISR (17u) -#define apiID_UXTASKGETNUMBEROFTASKS (18u) -#define apiID_PCTASKGETTASKNAME (19u) -#define apiID_UXTASKGETSTACKHIGHWATERMARK (20u) -#define apiID_VTASKSETAPPLICATIONTASKTAG (21u) -#define apiID_XTASKGETAPPLICATIONTASKTAG (22u) -#define apiID_VTASKSETTHREADLOCALSTORAGEPOINTER (23u) -#define apiID_PVTASKGETTHREADLOCALSTORAGEPOINTER (24u) -#define apiID_XTASKCALLAPPLICATIONTASKHOOK (25u) -#define apiID_XTASKGETIDLETASKHANDLE (26u) -#define apiID_UXTASKGETSYSTEMSTATE (27u) -#define apiID_VTASKLIST (28u) -#define apiID_VTASKGETRUNTIMESTATS (29u) -#define apiID_XTASKGENERICNOTIFY (30u) -#define apiID_XTASKGENERICNOTIFYFROMISR (31u) -#define apiID_XTASKNOTIFYWAIT (32u) -#define apiID_VTASKNOTIFYGIVEFROMISR (33u) -#define apiID_ULTASKNOTIFYTAKE (34u) -#define apiID_XTASKNOTIFYSTATECLEAR (35u) -#define apiID_XTASKGETCURRENTTASKHANDLE (36u) -#define apiID_VTASKSETTIMEOUTSTATE (37u) -#define apiID_XTASKCHECKFORTIMEOUT (38u) -#define apiID_VTASKMISSEDYIELD (39u) -#define apiID_XTASKGETSCHEDULERSTATE (40u) -#define apiID_VTASKPRIORITYINHERIT (41u) -#define apiID_XTASKPRIORITYDISINHERIT (42u) -#define apiID_XTASKGENERICCREATE (43u) -#define apiID_UXTASKGETTASKNUMBER (44u) -#define apiID_VTASKSETTASKNUMBER (45u) -#define apiID_VTASKSTEPTICK (46u) -#define apiID_ETASKCONFIRMSLEEPMODESTATUS (47u) -#define apiID_XTIMERCREATE (48u) -#define apiID_PVTIMERGETTIMERID (49u) -#define apiID_VTIMERSETTIMERID (50u) -#define apiID_XTIMERISTIMERACTIVE (51u) -#define apiID_XTIMERGETTIMERDAEMONTASKHANDLE (52u) -#define apiID_XTIMERPENDFUNCTIONCALLFROMISR (53u) -#define apiID_XTIMERPENDFUNCTIONCALL (54u) -#define apiID_PCTIMERGETTIMERNAME (55u) -#define apiID_XTIMERCREATETIMERTASK (56u) -#define apiID_XTIMERGENERICCOMMAND (57u) -#define apiID_XQUEUEGENERICSEND (58u) -#define apiID_XQUEUEPEEKFROMISR (59u) -#define apiID_XQUEUEGENERICRECEIVE (60u) -#define apiID_UXQUEUEMESSAGESWAITING (61u) -#define apiID_UXQUEUESPACESAVAILABLE (62u) -#define apiID_VQUEUEDELETE (63u) -#define apiID_XQUEUEGENERICSENDFROMISR (64u) -#define apiID_XQUEUEGIVEFROMISR (65u) -#define apiID_XQUEUERECEIVEFROMISR (66u) -#define apiID_XQUEUEISQUEUEEMPTYFROMISR (67u) -#define apiID_XQUEUEISQUEUEFULLFROMISR (68u) -#define apiID_UXQUEUEMESSAGESWAITINGFROMISR (69u) -#define apiID_XQUEUEALTGENERICSEND (70u) -#define apiID_XQUEUEALTGENERICRECEIVE (71u) -#define apiID_XQUEUECRSENDFROMISR (72u) -#define apiID_XQUEUECRRECEIVEFROMISR (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 apiID_UXTASKPRIORITYGET (2u) +#define apiID_ETASKGETSTATE (3u) +#define apiID_VTASKSTARTSCHEDULER (4u) +#define apiID_VTASKENDSCHEDULER (5u) +#define apiID_VTASKSUSPENDALL (6u) +#define apiID_XTASKRESUMEALL (7u) +#define apiID_XTASKGETTICKCOUNT (8u) +#define apiID_UXTASKGETNUMBEROFTASKS (9u) +#define apiID_PCTASKGETTASKNAME (10u) +#define apiID_UXTASKGETSTACKHIGHWATERMARK (11u) +#define apiID_VTASKSETAPPLICATIONTASKTAG (12u) +#define apiID_XTASKGETAPPLICATIONTASKTAG (13u) +#define apiID_VTASKSETTHREADLOCALSTORAGEPOINTER (14u) +#define apiID_PVTASKGETTHREADLOCALSTORAGEPOINTER (15u) +#define apiID_XTASKCALLAPPLICATIONTASKHOOK (16u) +#define apiID_XTASKGETIDLETASKHANDLE (17u) +#define apiID_UXTASKGETSYSTEMSTATE (18u) +#define apiID_VTASKLIST (19u) +#define apiID_VTASKGETRUNTIMESTATS (20u) +#define apiID_XTASKNOTIFYSTATECLEAR (21u) +#define apiID_XTASKGETCURRENTTASKHANDLE (22u) +#define apiID_VTASKSETTIMEOUTSTATE (23u) +#define apiID_XTASKCHECKFORTIMEOUT (24u) +#define apiID_VTASKMISSEDYIELD (25u) +#define apiID_XTASKGETSCHEDULERSTATE (26u) +#define apiID_XTASKGENERICCREATE (27u) +#define apiID_UXTASKGETTASKNUMBER (28u) +#define apiID_VTASKSETTASKNUMBER (29u) +#define apiID_ETASKCONFIRMSLEEPMODESTATUS (30u) +#define apiID_XTIMERCREATE (31u) +#define apiID_PVTIMERGETTIMERID (32u) +#define apiID_VTIMERSETTIMERID (33u) +#define apiID_XTIMERISTIMERACTIVE (34u) +#define apiID_XTIMERGETTIMERDAEMONTASKHANDLE (35u) +#define apiID_XTIMERPENDFUNCTIONCALLFROMISR (36u) +#define apiID_XTIMERPENDFUNCTIONCALL (37u) +#define apiID_PCTIMERGETTIMERNAME (38u) +#define apiID_XTIMERCREATETIMERTASK (39u) +#define apiID_XTIMERGENERICCOMMAND (40u) +#define apiID_UXQUEUEMESSAGESWAITING (41u) +#define apiID_UXQUEUESPACESAVAILABLE (42u) +#define apiID_UXQUEUEMESSAGESWAITINGFROMISR (43u) +#define apiID_XQUEUEALTGENERICSEND (44u) +#define apiID_XQUEUEALTGENERICRECEIVE (45u) +#define apiID_XQUEUECRSENDFROMISR (46u) +#define apiID_XQUEUECRRECEIVEFROMISR (47u) +#define apiID_XQUEUECRSEND (48u) +#define apiID_XQUEUECRRECEIVE (49u) +#define apiID_XQUEUECREATEMUTEX (50u) +#define apiID_XQUEUECREATECOUNTINGSEMAPHORE (51u) +#define apiID_XQUEUEGETMUTEXHOLDER (52u) +#define apiID_XQUEUETAKEMUTEXRECURSIVE (53u) +#define apiID_XQUEUEGIVEMUTEXRECURSIVE (54u) +#define apiID_VQUEUEUNREGISTERQUEUE (55u) +#define apiID_XQUEUECREATESET (56u) +#define apiID_XQUEUEADDTOSET (57u) +#define apiID_XQUEUEREMOVEFROMSET (58u) +#define apiID_XQUEUESELECTFROMSET (59u) +#define apiID_XQUEUESELECTFROMSETFROMISR (60u) +#define apiID_XQUEUEGENERICRESET (61u) +#define apiID_VLISTINITIALISE (62u) +#define apiID_VLISTINITIALISEITEM (63u) +#define apiID_VLISTINSERT (64u) +#define apiID_VLISTINSERTEND (65u) +#define apiID_UXLISTREMOVE (66u) +#define apiID_XEVENTGROUPCREATE (67u) +#define apiID_XEVENTGROUPWAITBITS (68u) +#define apiID_XEVENTGROUPCLEARBITS (69u) +#define apiID_XEVENTGROUPSETBITS (70u) +#define apiID_XEVENTGROUPSYNC (71u) +#define apiID_VEVENTGROUPDELETE (72u) +#define apiID_UXEVENTGROUPGETNUMBER (73u) -#define traceTASK_NOTIFY_TAKE() SEGGER_SYSVIEW_RecordU32x2(apiID_OFFSET + apiID_ULTASKNOTIFYTAKE, xClearCountOnExit, xTicksToWait) -#define traceTASK_DELAY() SEGGER_SYSVIEW_RecordU32 (apiID_OFFSET + apiID_VTASKDELAY, xTicksToDelay) -#define traceTASK_DELAY_UNTIL(xTimeToWake) SEGGER_SYSVIEW_RecordVoid (apiID_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_PRIORITY_INHERIT( pxTCB, uxPriority ) SEGGER_SYSVIEW_RecordU32 (apiID_OFFSET + apiID_VTASKPRIORITYINHERIT, (U32)pxMutexHolder) -#define traceTASK_RESUME( pxTCB ) SEGGER_SYSVIEW_RecordU32 (apiID_OFFSET + apiID_VTASKRESUME, SEGGER_SYSVIEW_ShrinkId((U32)pxTCB)) -#define traceINCREASE_TICK_COUNT( xTicksToJump ) SEGGER_SYSVIEW_RecordU32 (apiID_OFFSET + apiID_VTASKSTEPTICK, xTicksToJump) -#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_RESUME_FROM_ISR( pxTCB ) SEGGER_SYSVIEW_RecordU32 (apiID_OFFSET + apiID_XTASKRESUMEFROMISR, SEGGER_SYSVIEW_ShrinkId((U32)pxTCB)) -#define traceTASK_NOTIFY() SEGGER_SYSVIEW_RecordU32x4(apiID_OFFSET + apiID_XTASKGENERICNOTIFY, SEGGER_SYSVIEW_ShrinkId((U32)pxTCB), ulValue, eAction, (U32)pulPreviousNotificationValue) -#define traceTASK_NOTIFY_FROM_ISR() SEGGER_SYSVIEW_RecordU32x5(apiID_OFFSET + apiID_XTASKGENERICNOTIFYFROMISR, SEGGER_SYSVIEW_ShrinkId((U32)pxTCB), ulValue, eAction, (U32)pulPreviousNotificationValue, (U32)pxHigherPriorityTaskWoken) -#define traceTASK_NOTIFY_WAIT() SEGGER_SYSVIEW_RecordU32x4(apiID_OFFSET + apiID_XTASKNOTIFYWAIT, ulBitsToClearOnEntry, ulBitsToClearOnExit, (U32)pulNotificationValue, xTicksToWait) +#define traceTASK_NOTIFY_TAKE() SEGGER_SYSVIEW_RecordU32x2(apiFastID_OFFSET + apiID_ULTASKNOTIFYTAKE, xClearCountOnExit, xTicksToWait) +#define traceTASK_DELAY() SEGGER_SYSVIEW_RecordU32(apiFastID_OFFSET + apiID_VTASKDELAY, xTicksToDelay) +#define traceTASK_DELAY_UNTIL() SEGGER_SYSVIEW_RecordVoid(apiFastID_OFFSET + apiID_VTASKDELAYUNTIL) +#define traceTASK_DELETE( pxTCB ) if (pxTCB != NULL) { \ + SEGGER_SYSVIEW_RecordU32(apiFastID_OFFSET + apiID_VTASKDELETE, \ + SEGGER_SYSVIEW_ShrinkId((U32)pxTCB)); \ + SYSVIEW_DeleteTask((U32)pxTCB); \ + } +#define traceTASK_NOTIFY_GIVE_FROM_ISR() SEGGER_SYSVIEW_RecordU32x2(apiFastID_OFFSET + apiID_VTASKNOTIFYGIVEFROMISR, SEGGER_SYSVIEW_ShrinkId((U32)pxTCB), (U32)pxHigherPriorityTaskWoken) +#define traceTASK_PRIORITY_INHERIT( pxTCB, uxPriority ) SEGGER_SYSVIEW_RecordU32(apiFastID_OFFSET + apiID_VTASKPRIORITYINHERIT, (U32)pxMutexHolder) +#define traceTASK_RESUME( pxTCB ) SEGGER_SYSVIEW_RecordU32(apiFastID_OFFSET + apiID_VTASKRESUME, SEGGER_SYSVIEW_ShrinkId((U32)pxTCB)) +#define traceINCREASE_TICK_COUNT( xTicksToJump ) SEGGER_SYSVIEW_RecordU32(apiFastID_OFFSET + apiID_VTASKSTEPTICK, xTicksToJump) +#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_DELETE( pxQueue ) SEGGER_SYSVIEW_RecordU32 (apiID_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_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_FAILED( pxQueue ) SEGGER_SYSVIEW_RecordU32x2(apiID_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_FAILED( pxQueue ) SEGGER_SYSVIEW_RecordU32x4(apiID_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_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_FAILED( pxQueue ) SEGGER_SYSVIEW_RecordU32x3(apiID_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_CREATE( pxNewQueue ) SEGGER_SYSVIEW_RecordU32x3(apiFastID_OFFSET + apiID_XQUEUEGENERICCREATE, uxQueueLength, uxItemSize, ucQueueType) +#define traceQUEUE_DELETE( pxQueue ) SEGGER_SYSVIEW_RecordU32(apiFastID_OFFSET + apiID_VQUEUEDELETE, SEGGER_SYSVIEW_ShrinkId((U32)pxQueue)) +#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(apiFastID_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(apiFastID_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(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(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(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(apiFastID_OFFSET + apiID_VQUEUEADDTOREGISTRY, SEGGER_SYSVIEW_ShrinkId((U32)xQueue), (U32)pcQueueName) #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 - #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 -#define traceQUEUE_SEND_FAILED( pxQueue ) SEGGER_SYSVIEW_RecordU32x4(apiID_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_FAILED( pxQueue ) SEGGER_SYSVIEW_RecordU32x2(apiID_OFFSET + apiID_XQUEUEGENERICSENDFROMISR, SEGGER_SYSVIEW_ShrinkId((U32)pxQueue), (U32)pxHigherPriorityTaskWoken) -#define traceSTREAM_BUFFER_CREATE( pxStreamBuffer, xIsMessageBuffer ) SEGGER_SYSVIEW_RecordU32x2(apiID_OFFSET + apiID_XSTREAMBUFFERCREATE, (U32)xIsMessageBuffer, (U32)pxStreamBuffer) -#define traceSTREAM_BUFFER_CREATE_FAILED( xIsMessageBuffer ) SEGGER_SYSVIEW_RecordU32x2(apiID_OFFSET + apiID_XSTREAMBUFFERCREATE, (U32)xIsMessageBuffer, 0u) -#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); \ - } - +#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_RecordU32x4(apiFastID_OFFSET + apiID_XQUEUEGENERICSENDFROMISR, SEGGER_SYSVIEW_ShrinkId((U32)pxQueue), (U32)pvItemToQueue, (U32)pxHigherPriorityTaskWoken, xCopyPosition) +#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 traceQUEUE_GIVE_FROM_ISR( pxQueue ) SEGGER_SYSVIEW_RecordU32x2(apiFastID_OFFSET + apiID_XQUEUEGIVEFROMISR, SEGGER_SYSVIEW_ShrinkId((U32)pxQueue), (U32)pxHigherPriorityTaskWoken) +#define traceQUEUE_GIVE_FROM_ISR_FAILED( pxQueue ) SEGGER_SYSVIEW_RecordU32x2(apiFastID_OFFSET + apiID_XQUEUEGIVEFROMISR, SEGGER_SYSVIEW_ShrinkId((U32)pxQueue), (U32)pxHigherPriorityTaskWoken) #if( portSTACK_GROWTH < 0 ) #define traceTASK_CREATE(pxNewTCB) if (pxNewTCB != NULL) { \ @@ -265,7 +272,7 @@ Notes: } #endif #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), \ uxNewPriority \ ); \ @@ -280,15 +287,15 @@ Notes: // Define INCLUDE_xTaskGetIdleTaskHandle as 1 in FreeRTOSConfig.h to allow identification of Idle state. // #if ( INCLUDE_xTaskGetIdleTaskHandle == 1 ) - #define traceTASK_SWITCHED_IN() if(prvGetTCBFromHandle(NULL) == xIdleTaskHandle) { \ + #define traceTASK_SWITCHED_IN() if(prvGetTCBFromHandle(NULL) == xTaskGetIdleTaskHandle()) { \ SEGGER_SYSVIEW_OnIdle(); \ } else { \ - SEGGER_SYSVIEW_OnTaskStartExec((U32)pxCurrentTCB); \ + SEGGER_SYSVIEW_OnTaskStartExec((U32)pxCurrentTCB[xPortGetCoreID()]); \ } #else #define traceTASK_SWITCHED_IN() { \ - if (memcmp(pxCurrentTCB->pcTaskName, "IDLE", 5) != 0) { \ - SEGGER_SYSVIEW_OnTaskStartExec((U32)pxCurrentTCB); \ + if (memcmp(pxCurrentTCB[xPortGetCoreID()]->pcTaskName, "IDLE", 5) != 0) { \ + SEGGER_SYSVIEW_OnTaskStartExec((U32)pxCurrentTCB[xPortGetCoreID()]); \ } else { \ SEGGER_SYSVIEW_OnIdle(); \ } \ @@ -296,13 +303,12 @@ Notes: #endif #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_OVERFLOW_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[xPortGetCoreID()], (1u << 2)) #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() SEGGER_SYSVIEW_RecordExitISR() #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_DeleteTask (U32 xHandle); 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 } @@ -327,4 +335,4 @@ void SYSVIEW_SendTaskInfo (U32 TaskID, const char* sName, unsigned Prio, U32 Sta #endif -/*************************** End of file ****************************/ \ No newline at end of file +/*************************** End of file ****************************/ diff --git a/components/driver/spi_master.c b/components/driver/spi_master.c index df04042a4e..870a126234 100644 --- a/components/driver/spi_master.c +++ b/components/driver/spi_master.c @@ -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; 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 } // 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] && - 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) { memcpy((uint8_t *) & trans_desc->rx_data[0], trans_buf->buffer_to_rcv, (trans_desc->rxlength + 7) / 8); } else { diff --git a/components/driver/test/test_spi_master.c b/components/driver/test/test_spi_master.c index 7ba982ab92..8156d6aadc 100644 --- a/components/driver/test/test_spi_master.c +++ b/components/driver/test/test_spi_master.c @@ -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, }; -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 //test psram if enabled diff --git a/components/esp_system/linker.lf b/components/esp_system/linker.lf index e55780553c..412b10d192 100644 --- a/components/esp_system/linker.lf +++ b/components/esp_system/linker.lf @@ -5,6 +5,10 @@ entries: panic_handler (noflash) reset_reason (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: usb_console:esp_usb_console_write_char (noflash) diff --git a/components/freertos/include/freertos/FreeRTOS.h b/components/freertos/include/freertos/FreeRTOS.h index bd241abf26..3f52f4da5a 100644 --- a/components/freertos/include/freertos/FreeRTOS.h +++ b/components/freertos/include/freertos/FreeRTOS.h @@ -454,6 +454,10 @@ extern "C" { #define traceCREATE_COUNTING_SEMAPHORE_FAILED() #endif +#ifndef traceQUEUE_SEMAPHORE_RECEIVE + #define traceQUEUE_SEMAPHORE_RECEIVE( pxQueue ) +#endif + #ifndef traceQUEUE_SEND #define traceQUEUE_SEND( pxQueue ) #endif @@ -506,6 +510,14 @@ extern "C" { #define traceQUEUE_DELETE( pxQueue ) #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 #define traceTASK_CREATE( pxNewTCB ) #endif diff --git a/components/freertos/queue.c b/components/freertos/queue.c index 0327fc0d1d..4be568928c 100644 --- a/components/freertos/queue.c +++ b/components/freertos/queue.c @@ -1171,7 +1171,7 @@ Queue_t * const pxQueue = xQueue; { 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 holder - and if there is a mutex holder then the mutex cannot be @@ -1276,7 +1276,7 @@ Queue_t * const pxQueue = xQueue; } else { - traceQUEUE_SEND_FROM_ISR_FAILED( pxQueue ); + traceQUEUE_GIVE_FROM_ISR_FAILED( pxQueue ); xReturn = errQUEUE_FULL; } 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. */ if( uxSemaphoreCount > ( UBaseType_t ) 0 ) { - traceQUEUE_RECEIVE( pxQueue ); + traceQUEUE_SEMAPHORE_RECEIVE( pxQueue ); /* Semaphores are queues with a data size of zero and where the messages waiting is the semaphore's count. Reduce the count. */ diff --git a/components/freertos/tasks.c b/components/freertos/tasks.c index b7176af448..e81951b780 100644 --- a/components/freertos/tasks.c +++ b/components/freertos/tasks.c @@ -601,12 +601,10 @@ static void prvAddNewTaskToReadyList( TCB_t *pxNewTCB, TaskFunction_t pxTaskCode */ void taskYIELD_OTHER_CORE( BaseType_t xCoreID, UBaseType_t uxPriority ) { - TCB_t *curTCB; BaseType_t i; if (xCoreID != tskNO_AFFINITY) { - curTCB = pxCurrentTCB[xCoreID]; - if ( curTCB->uxPriority < uxPriority ) { // NOLINT(clang-analyzer-core.NullDereference) IDF-685 + if ( pxCurrentTCB[ xCoreID ]->uxPriority < uxPriority ) { // NOLINT(clang-analyzer-core.NullDereference) IDF-685 vPortYieldOtherCore( xCoreID ); } } @@ -1440,7 +1438,7 @@ static void prvAddNewTaskToReadyList( TCB_t *pxNewTCB, TaskFunction_t pxTaskCode if( xShouldDelay != pdFALSE ) { - traceTASK_DELAY_UNTIL( xTimeToWake ); + traceTASK_DELAY_UNTIL(); /* prvAddCurrentTaskToDelayedList() needs the block time, not 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; } - traceTASK_DELAY_UNTIL( ( xTickCount + xTicksToWait ) ); + traceTASK_DELAY_UNTIL( ); prvAddCurrentTaskToDelayedList( xPortGetCoreID(), xTicksToWait ); taskEXIT_CRITICAL(&xTaskQueueMutex); } diff --git a/components/freertos/xtensa/include/freertos/portmacro.h b/components/freertos/xtensa/include/freertos/portmacro.h index 1fd3346d33..f6e4c315e4 100644 --- a/components/freertos/xtensa/include/freertos/portmacro.h +++ b/components/freertos/xtensa/include/freertos/portmacro.h @@ -93,8 +93,10 @@ extern "C" { #ifdef CONFIG_LEGACY_INCLUDE_COMMON_HEADERS #include "soc/soc_memory_layout.h" +#endif #include "esp_system.h" #include "soc/cpu.h" +#include /*----------------------------------------------------------- * Port specific definitions. diff --git a/components/heap/heap_tlsf.h b/components/heap/heap_tlsf.h index e4889f1d2e..26894e29a0 100644 --- a/components/heap/heap_tlsf.h +++ b/components/heap/heap_tlsf.h @@ -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); /* malloc/memalign/realloc/free replacements. */ -void* tlsf_malloc(tlsf_t tlsf, size_t bytes); -void* tlsf_memalign(tlsf_t tlsf, size_t align, size_t bytes); +void* tlsf_malloc(tlsf_t tlsf, size_t size); +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_free(tlsf_t tlsf, void* ptr); diff --git a/components/heap/test/test_malloc_caps.c b/components/heap/test/test_malloc_caps.c index b731050770..2e3343bd30 100644 --- a/components/heap/test/test_malloc_caps.c +++ b/components/heap/test/test_malloc_caps.c @@ -145,8 +145,8 @@ TEST_CASE("heap_caps metadata test", "[heap]") multi_heap_info_t after; heap_caps_get_info(&after, MALLOC_CAP_8BIT); - TEST_ASSERT(after.largest_free_block < original.largest_free_block); - TEST_ASSERT(after.total_free_bytes < original.total_free_bytes); + TEST_ASSERT(after.largest_free_block <= original.largest_free_block); + TEST_ASSERT(after.total_free_bytes <= original.total_free_bytes); free(b); heap_caps_get_info(&after, MALLOC_CAP_8BIT); diff --git a/components/heap/test/test_realloc.c b/components/heap/test/test_realloc.c index f0cf398c00..547be27550 100644 --- a/components/heap/test/test_realloc.c +++ b/components/heap/test/test_realloc.c @@ -24,7 +24,7 @@ TEST_CASE("realloc shrink buffer in place", "[heap]") #endif #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; diff --git a/docs/en/api-reference/system/freertos.rst b/docs/en/api-reference/system/freertos.rst index 374d56a9a7..296045cfbe 100644 --- a/docs/en/api-reference/system/freertos.rst +++ b/docs/en/api-reference/system/freertos.rst @@ -7,7 +7,7 @@ Overview This section contains documentation of FreeRTOS types, functions, and macros. It is automatically generated from FreeRTOS header files. .. 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>` and :doc:`ESP-IDF FreeRTOS Additions`. diff --git a/tools/ci/static-analysis-rules.yml b/tools/ci/static-analysis-rules.yml index d96b0a0aa9..1d67d408f7 100644 --- a/tools/ci/static-analysis-rules.yml +++ b/tools/ci/static-analysis-rules.yml @@ -20,4 +20,4 @@ skip: - "components/nghttp/nghttp2" - "components/protobuf-c/protobuf-c" - "components/spiffs/spiffs" - - "components/unity/unity" + - "components/unity/unity" \ No newline at end of file diff --git a/tools/unit-test-app/configs/default b/tools/unit-test-app/configs/default index 28a89faba7..105c2c5af3 100644 --- a/tools/unit-test-app/configs/default +++ b/tools/unit-test-app/configs/default @@ -1,3 +1,3 @@ # This config is split between targets since different component needs to be included (esp32, esp32s2) 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