152 #include "SEGGER_SYSVIEW_Int.h" 153 #include "SEGGER_RTT.h" 164 #if SEGGER_SYSVIEW_ID_SHIFT 165 #define SHRINK_ID(Id) (((Id) - _SYSVIEW_Globals.RAMBaseAddress) >> SEGGER_SYSVIEW_ID_SHIFT) 167 #define SHRINK_ID(Id) ((Id) - _SYSVIEW_Globals.RAMBaseAddress) 170 #if SEGGER_SYSVIEW_RTT_CHANNEL > 0 171 #define CHANNEL_ID_UP SEGGER_SYSVIEW_RTT_CHANNEL 172 #define CHANNEL_ID_DOWN SEGGER_SYSVIEW_RTT_CHANNEL 174 #define CHANNEL_ID_UP _SYSVIEW_Globals.UpChannel 175 #define CHANNEL_ID_DOWN _SYSVIEW_Globals.DownChannel 189 #if SEGGER_SYSVIEW_TIMESTAMP_BITS < 32 // Eliminate unused bits in case hardware timestamps are less than 32 bits 190 #define MAKE_DELTA_32BIT(Delta) Delta <<= 32 - SEGGER_SYSVIEW_TIMESTAMP_BITS; \ 191 Delta >>= 32 - SEGGER_SYSVIEW_TIMESTAMP_BITS; 193 #define MAKE_DELTA_32BIT(Delta) 203 #define ENABLE_STATE_OFF 0 204 #define ENABLE_STATE_ON 1 205 #define ENABLE_STATE_DROPPING 2 207 #define FORMAT_FLAG_LEFT_JUSTIFY (1u << 0) 208 #define FORMAT_FLAG_PAD_ZERO (1u << 1) 209 #define FORMAT_FLAG_PRINT_SIGN (1u << 2) 210 #define FORMAT_FLAG_ALTERNATE (1u << 3) 212 #define MODULE_EVENT_OFFSET (512) 236 #if (SEGGER_SYSVIEW_POST_MORTEM_MODE == 1) 244 SEGGER_SYSVIEW_SEND_SYS_DESC_FUNC* pfSendSysDesc;
247 U32 MicroJVMTaskPriority;
248 U32 CurrentMicroEJTaskId;
257 static void _SendPacket(U8* pStartPacket, U8* pEndPacket,
unsigned int EventId);
258 static U32 _SEGGER_SYSVIEW_convertMicroEJTask(U32 TaskId);
266 static const U8 _abSync[10] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
268 #ifdef SEGGER_SYSVIEW_SECTION 269 #if (defined __GNUC__) 270 __attribute__ ((section (SEGGER_SYSVIEW_SECTION)))
static char _UpBuffer [SEGGER_SYSVIEW_RTT_BUFFER_SIZE];
271 #if (SEGGER_SYSVIEW_POST_MORTEM_MODE != 1) 272 __attribute__ ((section (SEGGER_SYSVIEW_SECTION)))
static char _DownBuffer[8];
274 #elif (defined __ICCARM__) || (defined __ICCRX__) 275 #pragma location=SEGGER_SYSVIEW_SECTION 276 static char _UpBuffer [SEGGER_SYSVIEW_RTT_BUFFER_SIZE];
277 #pragma location=SEGGER_SYSVIEW_SECTION 278 static char _DownBuffer[8];
279 #elif (defined __CC_ARM) 280 __attribute__ ((section (SEGGER_SYSVIEW_SECTION), zero_init))
static char _UpBuffer [SEGGER_SYSVIEW_RTT_BUFFER_SIZE];
281 #if (SEGGER_SYSVIEW_POST_MORTEM_MODE != 1) 282 __attribute__ ((section (SEGGER_SYSVIEW_SECTION), zero_init))
static char _DownBuffer[8];
285 static char _UpBuffer [SEGGER_SYSVIEW_RTT_BUFFER_SIZE];
286 #if (SEGGER_SYSVIEW_POST_MORTEM_MODE != 1) 287 static char _DownBuffer[8];
291 static char _UpBuffer [SEGGER_SYSVIEW_RTT_BUFFER_SIZE];
292 #if (SEGGER_SYSVIEW_POST_MORTEM_MODE != 1) 293 static char _DownBuffer[8];
300 static U8 _NumModules;
307 static U8 _connectionDetected = 0;
316 #define ENCODE_U32(pDest, Value) { \ 317 U8* pSysviewPointer; \ 319 pSysviewPointer = pDest; \ 320 SysViewData = Value; \ 321 while(SysViewData > 0x7F) { \ 322 *pSysviewPointer++ = (U8)(SysViewData | 0x80); \ 325 *pSysviewPointer++ = (U8)SysViewData; \ 326 pDest = pSysviewPointer; \ 331 #if (SEGGER_SYSVIEW_USE_STATIC_BUFFER == 1) 332 static U8 _aPacket[SEGGER_SYSVIEW_MAX_PACKET_SIZE];
334 #define RECORD_START(PacketSize) SEGGER_SYSVIEW_LOCK(); \ 335 pPayloadStart = _PreparePacket(_aPacket); 337 #define RECORD_END() SEGGER_SYSVIEW_UNLOCK() 341 #define RECORD_START(PacketSize) U8 aPacket[(PacketSize)]; \ 342 pPayloadStart = _PreparePacket(aPacket); \ 370 static U8* _EncodeData(U8* pPayload,
const char* pSrc,
unsigned int NumBytes) {
374 *pPayload++ = NumBytes;
375 while (n < NumBytes) {
376 *pPayload++ = *pSrc++;
404 static U8 *_EncodeStr(U8 *pPayload,
const char *pText,
unsigned int Limit) {
411 while(*(pText + Len) != 0) {
424 *pPayload++ = (Len & 255);
425 *pPayload++ = ((Len >> 8) & 255);
432 *pPayload++ = *pText++;
463 static U8 *_EncodeTaskName(U8 *pPayload,
const char *pText,
unsigned int Limit,
int mej_task) {
466 char *prefix = mej_task == 1 ?
"[MEJ] " :
"[OS] ";
467 unsigned int prefix_len = strlen(prefix);
472 while(*(pText + Len) != 0) {
488 *pPayload++ = (Len & 255);
489 *pPayload++ = ((Len >> 8) & 255);
495 while (n < prefix_len) {
496 *pPayload++ = *prefix++;
500 *pPayload++ = *pText++;
524 static U8* _PreparePacket(U8* pPacket) {
540 #if (SEGGER_SYSVIEW_POST_MORTEM_MODE != 1) 541 static void _HandleIncomingPacket(
void) {
545 Status = SEGGER_RTT_ReadNoLock(CHANNEL_ID_DOWN, &Cmd, 1);
548 case SEGGER_SYSVIEW_COMMAND_ID_START:
549 SEGGER_SYSVIEW_Start();
551 case SEGGER_SYSVIEW_COMMAND_ID_STOP:
552 SEGGER_SYSVIEW_Stop();
554 case SEGGER_SYSVIEW_COMMAND_ID_GET_SYSTIME:
555 SEGGER_SYSVIEW_RecordSystime();
557 case SEGGER_SYSVIEW_COMMAND_ID_GET_TASKLIST:
558 SEGGER_SYSVIEW_SendTaskList();
560 case SEGGER_SYSVIEW_COMMAND_ID_GET_SYSDESC:
561 SEGGER_SYSVIEW_GetSysDesc();
563 case SEGGER_SYSVIEW_COMMAND_ID_GET_NUMMODULES:
564 SEGGER_SYSVIEW_SendNumModules();
566 case SEGGER_SYSVIEW_COMMAND_ID_GET_MODULEDESC:
567 SEGGER_SYSVIEW_SendModuleDescription();
569 case SEGGER_SYSVIEW_COMMAND_ID_GET_MODULE:
570 Status = SEGGER_RTT_ReadNoLock(CHANNEL_ID_DOWN, &Cmd, 1);
572 SEGGER_SYSVIEW_SendModule(Cmd);
577 SEGGER_RTT_ReadNoLock(CHANNEL_ID_DOWN, &Cmd, 1);
583 #endif // (SEGGER_SYSVIEW_POST_MORTEM_MODE != 1) 605 #if (SEGGER_SYSVIEW_POST_MORTEM_MODE != 1) 606 static int _TrySendOverflowPacket(
void) {
613 aPacket[0] = SYSVIEW_EVTID_OVERFLOW;
614 pPayload = &aPacket[1];
615 ENCODE_U32(pPayload, _SYSVIEW_Globals.DropCount);
619 TimeStamp = SEGGER_SYSVIEW_GET_TIMESTAMP();
620 Delta = TimeStamp - _SYSVIEW_Globals.LastTxTimeStamp;
621 MAKE_DELTA_32BIT(Delta);
622 ENCODE_U32(pPayload, Delta);
626 Status = SEGGER_RTT_WriteSkipNoLock(CHANNEL_ID_UP, aPacket, pPayload - aPacket);
628 _SYSVIEW_Globals.LastTxTimeStamp = TimeStamp;
629 _SYSVIEW_Globals.EnableState--;
631 _SYSVIEW_Globals.DropCount++;
636 #endif // (SEGGER_SYSVIEW_POST_MORTEM_MODE != 1) 649 #if (SEGGER_SYSVIEW_POST_MORTEM_MODE == 1) 650 static void _SendSyncInfo(
void) {
659 SEGGER_RTT_WriteWithOverwriteNoLock(CHANNEL_ID_UP, _abSync, 10);
660 SEGGER_SYSVIEW_RecordVoid(SYSVIEW_EVTID_TRACE_START);
664 RECORD_START(SEGGER_SYSVIEW_INFO_SIZE + 4 * SEGGER_SYSVIEW_QUANTA_U32);
666 pPayload = pPayloadStart;
667 ENCODE_U32(pPayload, _SYSVIEW_Globals.SysFreq);
668 ENCODE_U32(pPayload, _SYSVIEW_Globals.CPUFreq);
669 ENCODE_U32(pPayload, _SYSVIEW_Globals.RAMBaseAddress);
670 ENCODE_U32(pPayload, SEGGER_SYSVIEW_ID_SHIFT);
671 _SendPacket(pPayloadStart, pPayload, SYSVIEW_EVTID_INIT);
674 if (_SYSVIEW_Globals.pfSendSysDesc) {
675 _SYSVIEW_Globals.pfSendSysDesc();
677 SEGGER_SYSVIEW_RecordSystime();
678 SEGGER_SYSVIEW_SendTaskList();
679 if (_NumModules > 0) {
680 SEGGER_SYSVIEW_SendNumModules();
681 for (
int n = 0; n < _NumModules; n++) {
682 SEGGER_SYSVIEW_SendModule(n);
684 SEGGER_SYSVIEW_SendModuleDescription();
687 #endif // (SEGGER_SYSVIEW_POST_MORTEM_MODE == 1) 708 static void _SendPacket(U8* pStartPacket, U8* pEndPacket,
unsigned int EventId) {
709 unsigned int NumBytes;
712 #if (SEGGER_SYSVIEW_POST_MORTEM_MODE != 1) 716 #if (SEGGER_SYSVIEW_USE_STATIC_BUFFER == 0) 717 SEGGER_SYSVIEW_LOCK();
720 #if (SEGGER_SYSVIEW_POST_MORTEM_MODE == 1) 721 if (_SYSVIEW_Globals.EnableState == 0) {
725 if (_SYSVIEW_Globals.EnableState == 1) {
728 if (_SYSVIEW_Globals.EnableState == 0) {
736 if (_SYSVIEW_Globals.EnableState == 2) {
737 _TrySendOverflowPacket();
738 if (_SYSVIEW_Globals.EnableState != 1) {
748 if (_SYSVIEW_Globals.DisabledEvents & ((U32)1u << EventId)) {
758 *--pStartPacket = EventId;
760 NumBytes = pEndPacket - pStartPacket;
761 if (NumBytes > 127) {
762 *--pStartPacket = (NumBytes >> 7);
763 *--pStartPacket = NumBytes | 0x80;
765 *--pStartPacket = NumBytes;
768 *--pStartPacket = (EventId >> 7);
769 *--pStartPacket = EventId | 0x80;
771 *--pStartPacket = EventId;
777 TimeStamp = SEGGER_SYSVIEW_GET_TIMESTAMP();
778 Delta = TimeStamp - _SYSVIEW_Globals.LastTxTimeStamp;
779 MAKE_DELTA_32BIT(Delta);
780 ENCODE_U32(pEndPacket, Delta);
781 #if (SEGGER_SYSVIEW_POST_MORTEM_MODE == 1) 785 SEGGER_RTT_WriteWithOverwriteNoLock(CHANNEL_ID_UP, pStartPacket, pEndPacket - pStartPacket);
786 _SYSVIEW_Globals.LastTxTimeStamp = TimeStamp;
791 Status = SEGGER_RTT_WriteSkipNoLock(CHANNEL_ID_UP, pStartPacket, pEndPacket - pStartPacket);
793 _SYSVIEW_Globals.LastTxTimeStamp = TimeStamp;
795 _SYSVIEW_Globals.EnableState++;
799 #if (SEGGER_SYSVIEW_POST_MORTEM_MODE == 1) 803 if (_SYSVIEW_Globals.RecursionCnt == 0) {
804 _SYSVIEW_Globals.RecursionCnt = 1;
805 if (_SYSVIEW_Globals.PacketCount++ & (1 << SEGGER_SYSVIEW_SYNC_PERIOD_SHIFT)) {
807 _SYSVIEW_Globals.PacketCount = 0;
809 _SYSVIEW_Globals.RecursionCnt = 0;
820 if (SEGGER_RTT_HASDATA(CHANNEL_ID_DOWN)) {
821 if (_SYSVIEW_Globals.RecursionCnt == 0) {
822 _SYSVIEW_Globals.RecursionCnt = 1;
823 _HandleIncomingPacket();
824 _SYSVIEW_Globals.RecursionCnt = 0;
829 #if (SEGGER_SYSVIEW_USE_STATIC_BUFFER == 0) 830 SEGGER_SYSVIEW_UNLOCK();
834 #ifndef SEGGER_SYSVIEW_EXCLUDE_PRINTF // Define in project to avoid warnings about variable parameter list 847 static int _VPrintHost(
const char* s, U32 Options, va_list* pParamList) {
848 U32 aParas[SEGGER_SYSVIEW_MAX_ARGUMENTS];
855 #if SEGGER_SYSVIEW_PRINTF_IMPLICIT_FORMAT 873 #if SEGGER_SYSVIEW_PRINTF_IMPLICIT_FORMAT == 0 874 aParas[NumArguments++] = va_arg(*pParamList,
int);
875 if (NumArguments == SEGGER_SYSVIEW_MAX_ARGUMENTS) {
883 aParas[NumArguments++] = va_arg(*pParamList,
int);
884 if (NumArguments == SEGGER_SYSVIEW_MAX_ARGUMENTS) {
892 #if SEGGER_SYSVIEW_PRINTF_IMPLICIT_FORMAT 901 RECORD_START(SEGGER_SYSVIEW_INFO_SIZE + SEGGER_SYSVIEW_MAX_STRING_LEN + 2 * SEGGER_SYSVIEW_QUANTA_U32 + SEGGER_SYSVIEW_MAX_ARGUMENTS * SEGGER_SYSVIEW_QUANTA_U32);
902 pPayload = _EncodeStr(pPayloadStart, s, SEGGER_SYSVIEW_MAX_STRING_LEN);
903 ENCODE_U32(pPayload, Options);
904 ENCODE_U32(pPayload, NumArguments);
906 while (NumArguments--) {
907 ENCODE_U32(pPayload, (*pParas));
910 _SendPacket(pPayloadStart, pPayload, SYSVIEW_EVTID_PRINT_FORMATTED);
934 if ((Cnt + 1u) <= SEGGER_SYSVIEW_MAX_STRING_LEN) {
935 *(p->pPayload++) = c;
941 if (p->Cnt == SEGGER_SYSVIEW_MAX_STRING_LEN) {
942 *(p->pPayloadStart) = p->Cnt;
943 pPayload = p->pPayload;
944 Options = p->Options;
945 ENCODE_U32(pPayload, Options);
946 ENCODE_U32(pPayload, 0);
947 _SendPacket(p->pPayloadStart, pPayload, SYSVIEW_EVTID_PRINT_FORMATTED);
948 p->pPayloadStart = _PreparePacket(p->pBuffer);
949 p->pPayload = p->pPayloadStart + 1u;
970 static void _PrintUnsigned(
SEGGER_SYSVIEW_PRINTF_DESC * pBufferDesc,
unsigned int v,
unsigned int Base,
unsigned int NumDigits,
unsigned int FieldWidth,
unsigned int FormatFlags) {
971 static const char _aV2C[16] = {
'0',
'1',
'2',
'3',
'4',
'5',
'6',
'7',
'8',
'9',
'A',
'B',
'C',
'D',
'E',
'F' };
984 while (Number >= Base) {
985 Number = (Number / Base);
988 if (NumDigits > Width) {
994 if ((FormatFlags & FORMAT_FLAG_LEFT_JUSTIFY) == 0u) {
995 if (FieldWidth != 0u) {
996 if (((FormatFlags & FORMAT_FLAG_PAD_ZERO) == FORMAT_FLAG_PAD_ZERO) && (NumDigits == 0u)) {
1001 while ((FieldWidth != 0u) && (Width < FieldWidth)) {
1003 _StoreChar(pBufferDesc, c);
1013 if (NumDigits > 1u) {
1029 _StoreChar(pBufferDesc, _aV2C[Div]);
1035 if ((FormatFlags & FORMAT_FLAG_LEFT_JUSTIFY) == FORMAT_FLAG_LEFT_JUSTIFY) {
1036 if (FieldWidth != 0u) {
1037 while ((FieldWidth != 0u) && (Width < FieldWidth)) {
1039 _StoreChar(pBufferDesc,
' ');
1061 static void _PrintInt(
SEGGER_SYSVIEW_PRINTF_DESC * pBufferDesc,
int v,
unsigned int Base,
unsigned int NumDigits,
unsigned int FieldWidth,
unsigned int FormatFlags) {
1065 Number = (v < 0) ? -v : v;
1071 while (Number >= (
int)Base) {
1072 Number = (Number / (int)Base);
1075 if (NumDigits > Width) {
1078 if ((FieldWidth > 0u) && ((v < 0) || ((FormatFlags & FORMAT_FLAG_PRINT_SIGN) == FORMAT_FLAG_PRINT_SIGN))) {
1085 if ((((FormatFlags & FORMAT_FLAG_PAD_ZERO) == 0u) || (NumDigits != 0u)) && ((FormatFlags & FORMAT_FLAG_LEFT_JUSTIFY) == 0u)) {
1086 if (FieldWidth != 0u) {
1087 while ((FieldWidth != 0u) && (Width < FieldWidth)) {
1089 _StoreChar(pBufferDesc,
' ');
1098 _StoreChar(pBufferDesc,
'-');
1099 }
else if ((FormatFlags & FORMAT_FLAG_PRINT_SIGN) == FORMAT_FLAG_PRINT_SIGN) {
1100 _StoreChar(pBufferDesc,
'+');
1107 if (((FormatFlags & FORMAT_FLAG_PAD_ZERO) == FORMAT_FLAG_PAD_ZERO) && ((FormatFlags & FORMAT_FLAG_LEFT_JUSTIFY) == 0u) && (NumDigits == 0u)) {
1108 if (FieldWidth != 0u) {
1109 while ((FieldWidth != 0u) && (Width < FieldWidth)) {
1111 _StoreChar(pBufferDesc,
'0');
1118 _PrintUnsigned(pBufferDesc, (
unsigned int)v, Base, NumDigits, FieldWidth, FormatFlags);
1134 static void _VPrintTarget(
const char* sFormat, U32 Options, va_list* pParamList) {
1138 unsigned int NumDigits;
1139 unsigned int FormatFlags;
1140 unsigned int FieldWidth;
1142 #if SEGGER_SYSVIEW_USE_STATIC_BUFFER == 0 1143 RECORD_START(SEGGER_SYSVIEW_INFO_SIZE + SEGGER_SYSVIEW_MAX_STRING_LEN + 1 + 2 * SEGGER_SYSVIEW_QUANTA_U32);
1144 SEGGER_SYSVIEW_LOCK();
1146 RECORD_START(SEGGER_SYSVIEW_INFO_SIZE + SEGGER_SYSVIEW_MAX_STRING_LEN + 1 + 2 * SEGGER_SYSVIEW_QUANTA_U32);
1149 #if SEGGER_SYSVIEW_USE_STATIC_BUFFER == 0 1150 BufferDesc.pBuffer = aPacket;
1152 BufferDesc.pBuffer = _aPacket;
1154 BufferDesc.Cnt = 0u;
1155 BufferDesc.pPayloadStart = pPayloadStart;
1156 BufferDesc.pPayload = BufferDesc.pPayloadStart + 1u;
1157 BufferDesc.Options = Options;
1174 case '-': FormatFlags |= FORMAT_FLAG_LEFT_JUSTIFY; sFormat++;
break;
1175 case '0': FormatFlags |= FORMAT_FLAG_PAD_ZERO; sFormat++;
break;
1176 case '+': FormatFlags |= FORMAT_FLAG_PRINT_SIGN; sFormat++;
break;
1177 case '#': FormatFlags |= FORMAT_FLAG_ALTERNATE; sFormat++;
break;
1178 default: v = 0;
break;
1187 if ((c <
'0') || (c >
'9')) {
1191 FieldWidth = (FieldWidth * 10u) + ((
unsigned int)c -
'0');
1203 if ((c <
'0') || (c >
'9')) {
1207 NumDigits = NumDigits * 10u + ((
unsigned int)c -
'0');
1215 if ((c ==
'l') || (c ==
'h')) {
1228 v = va_arg(*pParamList,
int);
1230 _StoreChar(&BufferDesc, c0);
1234 v = va_arg(*pParamList,
int);
1235 _PrintInt(&BufferDesc, v, 10u, NumDigits, FieldWidth, FormatFlags);
1238 v = va_arg(*pParamList,
int);
1239 _PrintUnsigned(&BufferDesc, (
unsigned int)v, 10u, NumDigits, FieldWidth, FormatFlags);
1243 v = va_arg(*pParamList,
int);
1244 _PrintUnsigned(&BufferDesc, (
unsigned int)v, 16u, NumDigits, FieldWidth, FormatFlags);
1247 v = va_arg(*pParamList,
int);
1248 _PrintUnsigned(&BufferDesc, (
unsigned int)v, 16u, 8u, 8u, 0u);
1251 _StoreChar(&BufferDesc,
'%');
1258 _StoreChar(&BufferDesc, c);
1265 if (BufferDesc.Cnt != 0u) {
1266 *(BufferDesc.pPayloadStart) = BufferDesc.Cnt;
1267 ENCODE_U32(BufferDesc.pPayload, BufferDesc.Options);
1268 ENCODE_U32(BufferDesc.pPayload, 0);
1269 _SendPacket(BufferDesc.pPayloadStart, BufferDesc.pPayload, SYSVIEW_EVTID_PRINT_FORMATTED);
1271 #if SEGGER_SYSVIEW_USE_STATIC_BUFFER == 0 1272 SEGGER_SYSVIEW_UNLOCK();
1278 #endif // SEGGER_SYSVIEW_EXCLUDE_PRINTF 1310 void SEGGER_SYSVIEW_Init(U32 SysFreq, U32 CPUFreq,
const SEGGER_SYSVIEW_OS_API *pOSAPI, SEGGER_SYSVIEW_SEND_SYS_DESC_FUNC pfSendSysDesc) {
1311 #ifdef SEGGER_RTT_SECTION 1317 #if (SEGGER_SYSVIEW_POST_MORTEM_MODE == 1) 1318 #if SEGGER_SYSVIEW_RTT_CHANNEL > 0 1319 SEGGER_RTT_ConfigUpBuffer(SEGGER_SYSVIEW_RTT_CHANNEL,
"SysView", &_UpBuffer[0],
sizeof(_UpBuffer), SEGGER_RTT_MODE_NO_BLOCK_SKIP);
1321 _SYSVIEW_Globals.UpChannel = SEGGER_RTT_AllocUpBuffer (
"SysView", &_UpBuffer[0],
sizeof(_UpBuffer), SEGGER_RTT_MODE_NO_BLOCK_SKIP);
1323 _SYSVIEW_Globals.RAMBaseAddress = SEGGER_SYSVIEW_ID_BASE;
1324 _SYSVIEW_Globals.LastTxTimeStamp = SEGGER_SYSVIEW_GET_TIMESTAMP();
1325 _SYSVIEW_Globals.pOSAPI = pOSAPI;
1326 _SYSVIEW_Globals.SysFreq = SysFreq;
1327 _SYSVIEW_Globals.CPUFreq = CPUFreq;
1328 _SYSVIEW_Globals.pfSendSysDesc = pfSendSysDesc;
1329 _SYSVIEW_Globals.EnableState = 0;
1330 _SYSVIEW_Globals.PacketCount = 0;
1331 #else // (SEGGER_SYSVIEW_POST_MORTEM_MODE == 1) 1332 #if SEGGER_SYSVIEW_RTT_CHANNEL > 0 1333 SEGGER_RTT_ConfigUpBuffer (SEGGER_SYSVIEW_RTT_CHANNEL,
"SysView", &_UpBuffer[0],
sizeof(_UpBuffer), SEGGER_RTT_MODE_NO_BLOCK_SKIP);
1334 SEGGER_RTT_ConfigDownBuffer (SEGGER_SYSVIEW_RTT_CHANNEL,
"SysView", &_DownBuffer[0],
sizeof(_DownBuffer), SEGGER_RTT_MODE_NO_BLOCK_SKIP);
1336 _SYSVIEW_Globals.UpChannel = SEGGER_RTT_AllocUpBuffer (
"SysView", &_UpBuffer[0],
sizeof(_UpBuffer), SEGGER_RTT_MODE_NO_BLOCK_SKIP);
1340 _SYSVIEW_Globals.DownChannel = _SYSVIEW_Globals.UpChannel;
1341 SEGGER_RTT_ConfigDownBuffer (_SYSVIEW_Globals.DownChannel,
"SysView", &_DownBuffer[0],
sizeof(_DownBuffer), SEGGER_RTT_MODE_NO_BLOCK_SKIP);
1343 _SYSVIEW_Globals.RAMBaseAddress = SEGGER_SYSVIEW_ID_BASE;
1344 _SYSVIEW_Globals.LastTxTimeStamp = SEGGER_SYSVIEW_GET_TIMESTAMP();
1345 _SYSVIEW_Globals.pOSAPI = pOSAPI;
1346 _SYSVIEW_Globals.SysFreq = SysFreq;
1347 _SYSVIEW_Globals.CPUFreq = CPUFreq;
1348 _SYSVIEW_Globals.pfSendSysDesc = pfSendSysDesc;
1349 _SYSVIEW_Globals.EnableState = 0;
1350 #endif // (SEGGER_SYSVIEW_POST_MORTEM_MODE == 1) 1364 void SEGGER_SYSVIEW_SetRAMBase(U32 RAMBaseAddress) {
1365 _SYSVIEW_Globals.RAMBaseAddress = RAMBaseAddress;
1378 void SEGGER_SYSVIEW_RecordVoid(
unsigned int EventID) {
1380 RECORD_START(SEGGER_SYSVIEW_INFO_SIZE);
1382 _SendPacket(pPayloadStart, pPayloadStart, EventID);
1398 void SEGGER_SYSVIEW_RecordU32(
unsigned int EventID, U32 Value) {
1401 RECORD_START(SEGGER_SYSVIEW_INFO_SIZE + SEGGER_SYSVIEW_QUANTA_U32);
1403 pPayload = pPayloadStart;
1404 ENCODE_U32(pPayload, Value);
1405 _SendPacket(pPayloadStart, pPayload, EventID);
1421 void SEGGER_SYSVIEW_RecordU32x2(
unsigned int EventID, U32 Para0, U32 Para1) {
1424 RECORD_START(SEGGER_SYSVIEW_INFO_SIZE + 2 * SEGGER_SYSVIEW_QUANTA_U32);
1426 pPayload = pPayloadStart;
1427 ENCODE_U32(pPayload, Para0);
1428 ENCODE_U32(pPayload, Para1);
1429 _SendPacket(pPayloadStart, pPayload, EventID);
1446 void SEGGER_SYSVIEW_RecordU32x3(
unsigned int EventID, U32 Para0, U32 Para1, U32 Para2) {
1449 RECORD_START(SEGGER_SYSVIEW_INFO_SIZE + 3 * SEGGER_SYSVIEW_QUANTA_U32);
1451 pPayload = pPayloadStart;
1452 ENCODE_U32(pPayload, Para0);
1453 ENCODE_U32(pPayload, Para1);
1454 ENCODE_U32(pPayload, Para2);
1455 _SendPacket(pPayloadStart, pPayload, EventID);
1473 void SEGGER_SYSVIEW_RecordU32x4(
unsigned int EventID, U32 Para0, U32 Para1, U32 Para2, U32 Para3) {
1476 RECORD_START(SEGGER_SYSVIEW_INFO_SIZE + 4 * SEGGER_SYSVIEW_QUANTA_U32);
1478 pPayload = pPayloadStart;
1479 ENCODE_U32(pPayload, Para0);
1480 ENCODE_U32(pPayload, Para1);
1481 ENCODE_U32(pPayload, Para2);
1482 ENCODE_U32(pPayload, Para3);
1483 _SendPacket(pPayloadStart, pPayload, EventID);
1502 void SEGGER_SYSVIEW_RecordU32x5(
unsigned int EventID, U32 Para0, U32 Para1, U32 Para2, U32 Para3, U32 Para4) {
1505 RECORD_START(SEGGER_SYSVIEW_INFO_SIZE + 5 * SEGGER_SYSVIEW_QUANTA_U32);
1507 pPayload = pPayloadStart;
1508 ENCODE_U32(pPayload, Para0);
1509 ENCODE_U32(pPayload, Para1);
1510 ENCODE_U32(pPayload, Para2);
1511 ENCODE_U32(pPayload, Para3);
1512 ENCODE_U32(pPayload, Para4);
1513 _SendPacket(pPayloadStart, pPayload, EventID);
1533 void SEGGER_SYSVIEW_RecordU32x6(
unsigned int EventID, U32 Para0, U32 Para1, U32 Para2, U32 Para3, U32 Para4, U32 Para5) {
1536 RECORD_START(SEGGER_SYSVIEW_INFO_SIZE + 6 * SEGGER_SYSVIEW_QUANTA_U32);
1538 pPayload = pPayloadStart;
1539 ENCODE_U32(pPayload, Para0);
1540 ENCODE_U32(pPayload, Para1);
1541 ENCODE_U32(pPayload, Para2);
1542 ENCODE_U32(pPayload, Para3);
1543 ENCODE_U32(pPayload, Para4);
1544 ENCODE_U32(pPayload, Para5);
1545 _SendPacket(pPayloadStart, pPayload, EventID);
1566 void SEGGER_SYSVIEW_RecordU32x7(
unsigned int EventID, U32 Para0, U32 Para1, U32 Para2, U32 Para3, U32 Para4, U32 Para5, U32 Para6) {
1569 RECORD_START(SEGGER_SYSVIEW_INFO_SIZE + 7 * SEGGER_SYSVIEW_QUANTA_U32);
1571 pPayload = pPayloadStart;
1572 ENCODE_U32(pPayload, Para0);
1573 ENCODE_U32(pPayload, Para1);
1574 ENCODE_U32(pPayload, Para2);
1575 ENCODE_U32(pPayload, Para3);
1576 ENCODE_U32(pPayload, Para4);
1577 ENCODE_U32(pPayload, Para5);
1578 ENCODE_U32(pPayload, Para6);
1579 _SendPacket(pPayloadStart, pPayload, EventID);
1601 void SEGGER_SYSVIEW_RecordU32x8(
unsigned int EventID, U32 Para0, U32 Para1, U32 Para2, U32 Para3, U32 Para4, U32 Para5, U32 Para6, U32 Para7) {
1604 RECORD_START(SEGGER_SYSVIEW_INFO_SIZE + 8 * SEGGER_SYSVIEW_QUANTA_U32);
1606 pPayload = pPayloadStart;
1607 ENCODE_U32(pPayload, Para0);
1608 ENCODE_U32(pPayload, Para1);
1609 ENCODE_U32(pPayload, Para2);
1610 ENCODE_U32(pPayload, Para3);
1611 ENCODE_U32(pPayload, Para4);
1612 ENCODE_U32(pPayload, Para5);
1613 ENCODE_U32(pPayload, Para6);
1614 ENCODE_U32(pPayload, Para7);
1615 _SendPacket(pPayloadStart, pPayload, EventID);
1638 void SEGGER_SYSVIEW_RecordU32x9(
unsigned int EventID, U32 Para0, U32 Para1, U32 Para2, U32 Para3, U32 Para4, U32 Para5, U32 Para6, U32 Para7, U32 Para8) {
1641 RECORD_START(SEGGER_SYSVIEW_INFO_SIZE + 9 * SEGGER_SYSVIEW_QUANTA_U32);
1643 pPayload = pPayloadStart;
1644 ENCODE_U32(pPayload, Para0);
1645 ENCODE_U32(pPayload, Para1);
1646 ENCODE_U32(pPayload, Para2);
1647 ENCODE_U32(pPayload, Para3);
1648 ENCODE_U32(pPayload, Para4);
1649 ENCODE_U32(pPayload, Para5);
1650 ENCODE_U32(pPayload, Para6);
1651 ENCODE_U32(pPayload, Para7);
1652 ENCODE_U32(pPayload, Para8);
1653 _SendPacket(pPayloadStart, pPayload, EventID);
1677 void SEGGER_SYSVIEW_RecordU32x10(
unsigned int EventID, U32 Para0, U32 Para1, U32 Para2, U32 Para3, U32 Para4, U32 Para5, U32 Para6, U32 Para7, U32 Para8, U32 Para9) {
1680 RECORD_START(SEGGER_SYSVIEW_INFO_SIZE + 10 * SEGGER_SYSVIEW_QUANTA_U32);
1682 pPayload = pPayloadStart;
1683 ENCODE_U32(pPayload, Para0);
1684 ENCODE_U32(pPayload, Para1);
1685 ENCODE_U32(pPayload, Para2);
1686 ENCODE_U32(pPayload, Para3);
1687 ENCODE_U32(pPayload, Para4);
1688 ENCODE_U32(pPayload, Para5);
1689 ENCODE_U32(pPayload, Para6);
1690 ENCODE_U32(pPayload, Para7);
1691 ENCODE_U32(pPayload, Para8);
1692 ENCODE_U32(pPayload, Para9);
1693 _SendPacket(pPayloadStart, pPayload, EventID);
1712 void SEGGER_SYSVIEW_RecordString(
unsigned int EventID,
const char* pString) {
1715 RECORD_START(SEGGER_SYSVIEW_INFO_SIZE + 1 + SEGGER_SYSVIEW_MAX_STRING_LEN);
1717 pPayload = _EncodeStr(pPayloadStart, pString, SEGGER_SYSVIEW_MAX_STRING_LEN);
1718 _SendPacket(pPayloadStart, pPayload, EventID);
1741 void SEGGER_SYSVIEW_Start(
void) {
1742 if (_SYSVIEW_Globals.EnableState == 0) {
1743 _SYSVIEW_Globals.EnableState = 1;
1744 #if (SEGGER_SYSVIEW_POST_MORTEM_MODE == 1) 1747 SEGGER_SYSVIEW_LOCK();
1748 SEGGER_RTT_WriteSkipNoLock(CHANNEL_ID_UP, _abSync, 10);
1749 SEGGER_SYSVIEW_UNLOCK();
1750 SEGGER_SYSVIEW_RecordVoid(SYSVIEW_EVTID_TRACE_START);
1754 RECORD_START(SEGGER_SYSVIEW_INFO_SIZE + 4 * SEGGER_SYSVIEW_QUANTA_U32);
1756 pPayload = pPayloadStart;
1757 ENCODE_U32(pPayload, _SYSVIEW_Globals.SysFreq);
1758 ENCODE_U32(pPayload, _SYSVIEW_Globals.CPUFreq);
1759 ENCODE_U32(pPayload, _SYSVIEW_Globals.RAMBaseAddress);
1760 ENCODE_U32(pPayload, SEGGER_SYSVIEW_ID_SHIFT);
1761 _SendPacket(pPayloadStart, pPayload, SYSVIEW_EVTID_INIT);
1764 if (_SYSVIEW_Globals.pfSendSysDesc) {
1765 _SYSVIEW_Globals.pfSendSysDesc();
1767 SEGGER_SYSVIEW_RecordSystime();
1768 SEGGER_SYSVIEW_SendTaskList();
1769 SEGGER_SYSVIEW_SendNumModules();
1787 void SEGGER_SYSVIEW_Stop(
void) {
1789 RECORD_START(SEGGER_SYSVIEW_INFO_SIZE);
1791 if (_SYSVIEW_Globals.EnableState) {
1792 _SendPacket(pPayloadStart, pPayloadStart, SYSVIEW_EVTID_TRACE_STOP);
1793 _SYSVIEW_Globals.EnableState = 0;
1806 void SEGGER_SYSVIEW_GetSysDesc(
void) {
1809 RECORD_START(SEGGER_SYSVIEW_INFO_SIZE + 4 * SEGGER_SYSVIEW_QUANTA_U32);
1811 pPayload = pPayloadStart;
1812 ENCODE_U32(pPayload, _SYSVIEW_Globals.SysFreq);
1813 ENCODE_U32(pPayload, _SYSVIEW_Globals.CPUFreq);
1814 ENCODE_U32(pPayload, _SYSVIEW_Globals.RAMBaseAddress);
1815 ENCODE_U32(pPayload, SEGGER_SYSVIEW_ID_SHIFT);
1816 _SendPacket(pPayloadStart, pPayload, SYSVIEW_EVTID_INIT);
1818 if (_SYSVIEW_Globals.pfSendSysDesc) {
1819 _SYSVIEW_Globals.pfSendSysDesc();
1849 if (pInfo->TaskID == _SYSVIEW_Globals.MicroJVMTaskId && _SYSVIEW_Globals.CurrentMicroEJTaskId != 0)
1857 RECORD_START(SEGGER_SYSVIEW_INFO_SIZE + SEGGER_SYSVIEW_QUANTA_U32 + 1 + 32);
1859 pPayload = pPayloadStart;
1860 ENCODE_U32(pPayload, SHRINK_ID(pInfo->TaskID));
1861 ENCODE_U32(pPayload, pInfo->IsMicroEJThread == 1 ? _SYSVIEW_Globals.MicroJVMTaskPriority * 100 + pInfo->Prio : pInfo->Prio * 100);
1862 pPayload = _EncodeTaskName(pPayload, pInfo->sName, 32, pInfo->IsMicroEJThread);
1863 _SendPacket(pPayloadStart, pPayload, SYSVIEW_EVTID_TASK_INFO);
1865 pPayload = pPayloadStart;
1866 ENCODE_U32(pPayload, SHRINK_ID(pInfo->TaskID));
1867 ENCODE_U32(pPayload, pInfo->StackBase);
1868 ENCODE_U32(pPayload, pInfo->StackSize);
1869 ENCODE_U32(pPayload, 0);
1870 _SendPacket(pPayloadStart, pPayload, SYSVIEW_EVTID_STACK_INFO);
1881 void SEGGER_SYSVIEW_SendTaskList(
void) {
1882 if (_SYSVIEW_Globals.pOSAPI && _SYSVIEW_Globals.pOSAPI->pfSendTaskList) {
1883 _SYSVIEW_Globals.pOSAPI->pfSendTaskList();
1906 void SEGGER_SYSVIEW_SendSysDesc(
const char *sSysDesc) {
1909 RECORD_START(SEGGER_SYSVIEW_INFO_SIZE + 1 + SEGGER_SYSVIEW_MAX_STRING_LEN);
1911 pPayload = _EncodeStr(pPayloadStart, sSysDesc, SEGGER_SYSVIEW_MAX_STRING_LEN);
1912 _SendPacket(pPayloadStart, pPayload, SYSVIEW_EVTID_SYSDESC);
1924 void SEGGER_SYSVIEW_RecordSystime(
void) {
1927 if (_SYSVIEW_Globals.pOSAPI && _SYSVIEW_Globals.pOSAPI->pfGetTime) {
1928 Systime = _SYSVIEW_Globals.pOSAPI->pfGetTime();
1929 SEGGER_SYSVIEW_RecordU32x2(SYSVIEW_EVTID_SYSTIME_US,
1931 (U32)(Systime >> 32));
1933 SEGGER_SYSVIEW_RecordU32(SYSVIEW_EVTID_SYSTIME_CYCLES, SEGGER_SYSVIEW_GET_TIMESTAMP());
1948 void SEGGER_SYSVIEW_RecordEnterISR(
void) {
1952 RECORD_START(SEGGER_SYSVIEW_INFO_SIZE + SEGGER_SYSVIEW_QUANTA_U32);
1954 pPayload = pPayloadStart;
1955 v = SEGGER_SYSVIEW_GET_INTERRUPT_ID();
1956 ENCODE_U32(pPayload, v);
1957 _SendPacket(pPayloadStart, pPayload, SYSVIEW_EVTID_ISR_ENTER);
1975 void SEGGER_SYSVIEW_RecordExitISR(
void) {
1977 RECORD_START(SEGGER_SYSVIEW_INFO_SIZE);
1979 _SendPacket(pPayloadStart, pPayloadStart, SYSVIEW_EVTID_ISR_EXIT);
1997 void SEGGER_SYSVIEW_RecordExitISRToScheduler(
void) {
1999 RECORD_START(SEGGER_SYSVIEW_INFO_SIZE);
2001 _SendPacket(pPayloadStart, pPayloadStart, SYSVIEW_EVTID_ISR_TO_SCHEDULER);
2015 void SEGGER_SYSVIEW_RecordEnterTimer(U32 TimerId) {
2018 RECORD_START(SEGGER_SYSVIEW_INFO_SIZE + SEGGER_SYSVIEW_QUANTA_U32);
2020 pPayload = pPayloadStart;
2021 ENCODE_U32(pPayload, SHRINK_ID(TimerId));
2022 _SendPacket(pPayloadStart, pPayload, SYSVIEW_EVTID_TIMER_ENTER);
2033 void SEGGER_SYSVIEW_RecordExitTimer(
void) {
2035 RECORD_START(SEGGER_SYSVIEW_INFO_SIZE);
2037 _SendPacket(pPayloadStart, pPayloadStart, SYSVIEW_EVTID_TIMER_EXIT);
2051 void SEGGER_SYSVIEW_RecordEndCall(
unsigned int EventID) {
2054 RECORD_START(SEGGER_SYSVIEW_INFO_SIZE + SEGGER_SYSVIEW_QUANTA_U32);
2056 pPayload = pPayloadStart;
2057 ENCODE_U32(pPayload, EventID);
2058 _SendPacket(pPayloadStart, pPayload, SYSVIEW_EVTID_END_CALL);
2073 void SEGGER_SYSVIEW_RecordEndCallU32(
unsigned int EventID, U32 Para0) {
2076 RECORD_START(SEGGER_SYSVIEW_INFO_SIZE + 2 * SEGGER_SYSVIEW_QUANTA_U32);
2078 pPayload = pPayloadStart;
2079 ENCODE_U32(pPayload, EventID);
2080 ENCODE_U32(pPayload, Para0);
2081 _SendPacket(pPayloadStart, pPayload, SYSVIEW_EVTID_END_CALL);
2092 void SEGGER_SYSVIEW_OnIdle(
void) {
2094 RECORD_START(SEGGER_SYSVIEW_INFO_SIZE);
2096 _SendPacket(pPayloadStart, pPayloadStart, SYSVIEW_EVTID_IDLE);
2111 void SEGGER_SYSVIEW_OnTaskCreate(U32 TaskId) {
2114 RECORD_START(SEGGER_SYSVIEW_INFO_SIZE + SEGGER_SYSVIEW_QUANTA_U32);
2116 pPayload = pPayloadStart;
2117 TaskId = SHRINK_ID(TaskId);
2118 ENCODE_U32(pPayload, TaskId);
2119 _SendPacket(pPayloadStart, pPayload, SYSVIEW_EVTID_TASK_CREATE);
2136 void SEGGER_SYSVIEW_OnTaskTerminate(U32 TaskId) {
2139 RECORD_START(SEGGER_SYSVIEW_INFO_SIZE + SEGGER_SYSVIEW_QUANTA_U32);
2141 pPayload = pPayloadStart;
2142 TaskId = SHRINK_ID(TaskId);
2143 ENCODE_U32(pPayload, TaskId);
2144 _SendPacket(pPayloadStart, pPayload, SYSVIEW_EVTID_TASK_TERMINATE);
2160 void SEGGER_SYSVIEW_OnTaskStartExec(U32 TaskId) {
2161 TaskId = _SEGGER_SYSVIEW_convertMicroEJTask(TaskId);
2164 RECORD_START(SEGGER_SYSVIEW_INFO_SIZE + SEGGER_SYSVIEW_QUANTA_U32);
2166 pPayload = pPayloadStart;
2167 TaskId = SHRINK_ID(TaskId);
2168 ENCODE_U32(pPayload, TaskId);
2169 _SendPacket(pPayloadStart, pPayload, SYSVIEW_EVTID_TASK_START_EXEC);
2181 void SEGGER_SYSVIEW_OnTaskStopExec(
void) {
2183 RECORD_START(SEGGER_SYSVIEW_INFO_SIZE);
2185 _SendPacket(pPayloadStart, pPayloadStart, SYSVIEW_EVTID_TASK_STOP_EXEC);
2199 void SEGGER_SYSVIEW_OnTaskStartReady(U32 TaskId) {
2200 TaskId = _SEGGER_SYSVIEW_convertMicroEJTask(TaskId);
2203 RECORD_START(SEGGER_SYSVIEW_INFO_SIZE + SEGGER_SYSVIEW_QUANTA_U32);
2205 pPayload = pPayloadStart;
2206 TaskId = SHRINK_ID(TaskId);
2207 ENCODE_U32(pPayload, TaskId);
2208 _SendPacket(pPayloadStart, pPayload, SYSVIEW_EVTID_TASK_START_READY);
2223 void SEGGER_SYSVIEW_OnTaskStopReady(U32 TaskId,
unsigned int Cause) {
2224 TaskId = _SEGGER_SYSVIEW_convertMicroEJTask(TaskId);
2227 RECORD_START(SEGGER_SYSVIEW_INFO_SIZE + 2 * SEGGER_SYSVIEW_QUANTA_U32);
2229 pPayload = pPayloadStart;
2230 TaskId = SHRINK_ID(TaskId);
2231 ENCODE_U32(pPayload, TaskId);
2232 ENCODE_U32(pPayload, Cause);
2233 _SendPacket(pPayloadStart, pPayload, SYSVIEW_EVTID_TASK_STOP_READY);
2247 void SEGGER_SYSVIEW_OnUserStart(
unsigned UserId) {
2250 RECORD_START(SEGGER_SYSVIEW_INFO_SIZE + SEGGER_SYSVIEW_QUANTA_U32);
2252 pPayload = pPayloadStart;
2253 ENCODE_U32(pPayload, UserId);
2254 _SendPacket(pPayloadStart, pPayload, SYSVIEW_EVTID_USER_START);
2268 void SEGGER_SYSVIEW_OnUserStop(
unsigned UserId) {
2271 RECORD_START(SEGGER_SYSVIEW_INFO_SIZE + SEGGER_SYSVIEW_QUANTA_U32);
2273 pPayload = pPayloadStart;
2274 ENCODE_U32(pPayload, UserId);
2275 _SendPacket(pPayloadStart, pPayload, SYSVIEW_EVTID_USER_STOP);
2290 void SEGGER_SYSVIEW_NameResource(U32 ResourceId,
const char* sName) {
2293 RECORD_START(SEGGER_SYSVIEW_INFO_SIZE + SEGGER_SYSVIEW_QUANTA_U32 + 1 + SEGGER_SYSVIEW_MAX_STRING_LEN);
2295 pPayload = pPayloadStart;
2296 ENCODE_U32(pPayload, SHRINK_ID(ResourceId));
2297 pPayload = _EncodeStr(pPayload, sName, SEGGER_SYSVIEW_MAX_STRING_LEN);
2298 _SendPacket(pPayloadStart, pPayload, SYSVIEW_EVTID_NAME_RESOURCE);
2319 int SEGGER_SYSVIEW_SendPacket(U8* pPacket, U8* pPayloadEnd,
unsigned int EventId) {
2320 #if (SEGGER_SYSVIEW_USE_STATIC_BUFFER == 1) 2321 SEGGER_SYSVIEW_LOCK();
2323 _SendPacket(pPacket + 4, pPayloadEnd, EventId);
2324 #if (SEGGER_SYSVIEW_USE_STATIC_BUFFER == 1) 2325 SEGGER_SYSVIEW_UNLOCK();
2346 U8* SEGGER_SYSVIEW_EncodeU32(U8* pPayload, U32 Value) {
2347 ENCODE_U32(pPayload, Value);
2373 U8* SEGGER_SYSVIEW_EncodeString(U8* pPayload,
const char* s,
unsigned int MaxLen) {
2374 return _EncodeStr(pPayload, s, MaxLen);
2399 U8* SEGGER_SYSVIEW_EncodeData(U8 *pPayload,
const char* pSrc,
unsigned int NumBytes) {
2400 return _EncodeData(pPayload, pSrc, NumBytes);
2427 U8* SEGGER_SYSVIEW_EncodeId(U8* pPayload, U32 Id) {
2429 ENCODE_U32(pPayload, Id);
2455 U32 SEGGER_SYSVIEW_ShrinkId(U32 Id) {
2456 return SHRINK_ID(Id);
2478 SEGGER_SYSVIEW_LOCK();
2479 if (_pFirstModule == 0) {
2485 pModule->EventOffset = MODULE_EVENT_OFFSET;
2487 _pFirstModule = pModule;
2495 pModule->EventOffset = _pFirstModule->EventOffset + _pFirstModule->NumEvents;
2496 pModule->pNext = _pFirstModule;
2497 _pFirstModule = pModule;
2500 SEGGER_SYSVIEW_SendModule(0);
2501 if (pModule->pfSendModuleDesc) {
2502 pModule->pfSendModuleDesc();
2504 SEGGER_SYSVIEW_UNLOCK();
2518 void SEGGER_SYSVIEW_RecordModuleDescription(
const SEGGER_SYSVIEW_MODULE* pModule,
const char* sDescription) {
2534 RECORD_START(SEGGER_SYSVIEW_INFO_SIZE + 2 * SEGGER_SYSVIEW_QUANTA_U32 + 1 + SEGGER_SYSVIEW_MAX_STRING_LEN);
2536 pPayload = pPayloadStart;
2541 ENCODE_U32(pPayload, ModuleId);
2542 ENCODE_U32(pPayload, (pModule->EventOffset));
2543 pPayload = _EncodeStr(pPayload, sDescription, SEGGER_SYSVIEW_MAX_STRING_LEN);
2544 _SendPacket(pPayloadStart, pPayload, SYSVIEW_EVTID_MODULEDESC);
2559 void SEGGER_SYSVIEW_SendModule(U8 ModuleId) {
2563 if (_pFirstModule != 0) {
2564 pModule = _pFirstModule;
2565 for (n = 0; n < ModuleId; n++) {
2566 pModule = pModule->pNext;
2574 RECORD_START(SEGGER_SYSVIEW_INFO_SIZE + 2 * SEGGER_SYSVIEW_QUANTA_U32 + 1 + SEGGER_SYSVIEW_MAX_STRING_LEN);
2576 pPayload = pPayloadStart;
2581 ENCODE_U32(pPayload, ModuleId);
2582 ENCODE_U32(pPayload, (pModule->EventOffset));
2583 pPayload = _EncodeStr(pPayload, pModule->sModule, SEGGER_SYSVIEW_MAX_STRING_LEN);
2584 _SendPacket(pPayloadStart, pPayload, SYSVIEW_EVTID_MODULEDESC);
2598 void SEGGER_SYSVIEW_SendModuleDescription(
void) {
2601 if (_pFirstModule != 0) {
2602 pModule = _pFirstModule;
2604 if (pModule->pfSendModuleDesc) {
2605 pModule->pfSendModuleDesc();
2607 pModule = pModule->pNext;
2619 void SEGGER_SYSVIEW_SendNumModules(
void) {
2622 RECORD_START(SEGGER_SYSVIEW_INFO_SIZE + 2*SEGGER_SYSVIEW_QUANTA_U32);
2623 pPayload = pPayloadStart;
2624 ENCODE_U32(pPayload, _NumModules);
2625 _SendPacket(pPayloadStart, pPayload, SYSVIEW_EVTID_NUMMODULES);
2629 #ifndef SEGGER_SYSVIEW_EXCLUDE_PRINTF // Define in project to avoid warnings about variable parameter list 2646 void SEGGER_SYSVIEW_PrintfHostEx(
const char* s, U32 Options, ...) {
2648 #if SEGGER_SYSVIEW_PRINTF_IMPLICIT_FORMAT 2651 va_start(ParamList, Options);
2652 r = _VPrintHost(s, Options, &ParamList);
2656 va_start(ParamList, Options);
2657 _VPrintTarget(s, Options, &ParamList);
2661 va_start(ParamList, Options);
2662 _VPrintHost(s, Options, &ParamList);
2680 void SEGGER_SYSVIEW_PrintfHost(
const char* s, ...) {
2682 #if SEGGER_SYSVIEW_PRINTF_IMPLICIT_FORMAT 2685 va_start(ParamList, s);
2686 r = _VPrintHost(s, SEGGER_SYSVIEW_LOG, &ParamList);
2690 va_start(ParamList, s);
2691 _VPrintTarget(s, SEGGER_SYSVIEW_LOG, &ParamList);
2695 va_start(ParamList, s);
2696 _VPrintHost(s, SEGGER_SYSVIEW_LOG, &ParamList);
2715 void SEGGER_SYSVIEW_WarnfHost(
const char* s, ...) {
2717 #if SEGGER_SYSVIEW_PRINTF_IMPLICIT_FORMAT 2720 va_start(ParamList, s);
2721 r = _VPrintHost(s, SEGGER_SYSVIEW_WARNING, &ParamList);
2725 va_start(ParamList, s);
2726 _VPrintTarget(s, SEGGER_SYSVIEW_WARNING, &ParamList);
2730 va_start(ParamList, s);
2731 _VPrintHost(s, SEGGER_SYSVIEW_WARNING, &ParamList);
2750 void SEGGER_SYSVIEW_ErrorfHost(
const char* s, ...) {
2752 #if SEGGER_SYSVIEW_PRINTF_IMPLICIT_FORMAT 2755 va_start(ParamList, s);
2756 r = _VPrintHost(s, SEGGER_SYSVIEW_ERROR, &ParamList);
2760 va_start(ParamList, s);
2761 _VPrintTarget(s, SEGGER_SYSVIEW_ERROR, &ParamList);
2765 va_start(ParamList, s);
2766 _VPrintHost(s, SEGGER_SYSVIEW_ERROR, &ParamList);
2783 void SEGGER_SYSVIEW_PrintfTargetEx(
const char* s, U32 Options, ...) {
2786 va_start(ParamList, Options);
2787 _VPrintTarget(s, Options, &ParamList);
2802 void SEGGER_SYSVIEW_PrintfTarget(
const char* s, ...) {
2805 va_start(ParamList, s);
2806 _VPrintTarget(s, SEGGER_SYSVIEW_LOG, &ParamList);
2821 void SEGGER_SYSVIEW_WarnfTarget(
const char* s, ...) {
2824 va_start(ParamList, s);
2825 _VPrintTarget(s, SEGGER_SYSVIEW_WARNING, &ParamList);
2840 void SEGGER_SYSVIEW_ErrorfTarget(
const char* s, ...) {
2843 va_start(ParamList, s);
2844 _VPrintTarget(s, SEGGER_SYSVIEW_ERROR, &ParamList);
2847 #endif // SEGGER_SYSVIEW_EXCLUDE_PRINTF 2859 void SEGGER_SYSVIEW_Print(
const char* s) {
2862 RECORD_START(SEGGER_SYSVIEW_INFO_SIZE + 2 * SEGGER_SYSVIEW_QUANTA_U32 + SEGGER_SYSVIEW_MAX_STRING_LEN);
2864 pPayload = _EncodeStr(pPayloadStart, s, SEGGER_SYSVIEW_MAX_STRING_LEN);
2865 ENCODE_U32(pPayload, SEGGER_SYSVIEW_LOG);
2866 ENCODE_U32(pPayload, 0);
2867 _SendPacket(pPayloadStart, pPayload, SYSVIEW_EVTID_PRINT_FORMATTED);
2881 void SEGGER_SYSVIEW_Warn(
const char* s) {
2884 RECORD_START(SEGGER_SYSVIEW_INFO_SIZE + 2 * SEGGER_SYSVIEW_QUANTA_U32 + SEGGER_SYSVIEW_MAX_STRING_LEN);
2886 pPayload = _EncodeStr(pPayloadStart, s, SEGGER_SYSVIEW_MAX_STRING_LEN);
2887 ENCODE_U32(pPayload, SEGGER_SYSVIEW_WARNING);
2888 ENCODE_U32(pPayload, 0);
2889 _SendPacket(pPayloadStart, pPayload, SYSVIEW_EVTID_PRINT_FORMATTED);
2903 void SEGGER_SYSVIEW_Error(
const char* s) {
2906 RECORD_START(SEGGER_SYSVIEW_INFO_SIZE + 2 * SEGGER_SYSVIEW_QUANTA_U32 + SEGGER_SYSVIEW_MAX_STRING_LEN);
2908 pPayload = _EncodeStr(pPayloadStart, s, SEGGER_SYSVIEW_MAX_STRING_LEN);
2909 ENCODE_U32(pPayload, SEGGER_SYSVIEW_ERROR);
2910 ENCODE_U32(pPayload, 0);
2911 _SendPacket(pPayloadStart, pPayload, SYSVIEW_EVTID_PRINT_FORMATTED);
2925 void SEGGER_SYSVIEW_EnableEvents(U32 EnableMask) {
2926 _SYSVIEW_Globals.DisabledEvents &= ~EnableMask;
2939 void SEGGER_SYSVIEW_DisableEvents(U32 DisableMask) {
2940 _SYSVIEW_Globals.DisabledEvents |= DisableMask;
2955 int SEGGER_SYSVIEW_isConnected(){
2956 if (_connectionDetected == 0) {
2957 _HandleIncomingPacket();
2958 if (_SYSVIEW_Globals.EnableState != 0) {
2959 _connectionDetected = 1;
2963 return _connectionDetected;
2978 void SEGGER_SYSVIEW_setMicroJVMTask(U32 TaskId){
2979 _SYSVIEW_Globals.MicroJVMTaskId = TaskId;
2994 void SEGGER_SYSVIEW_setMicroJVMTaskPriority(U32 TaskPriority){
2995 _SYSVIEW_Globals.MicroJVMTaskPriority = TaskPriority;
3010 void SEGGER_SYSVIEW_setCurrentMicroEJTask(U32 TaskId){
3011 U32 previous_current = _SYSVIEW_Globals.CurrentMicroEJTaskId;
3012 _SYSVIEW_Globals.CurrentMicroEJTaskId = TaskId;
3014 if (0 == previous_current && 0 != TaskId)
3018 SEGGER_SYSVIEW_OnTaskTerminate(_SYSVIEW_Globals.MicroJVMTaskId);
3021 SEGGER_SYSVIEW_SendTaskList();
3023 else if (0 != previous_current && 0 == TaskId)
3027 SEGGER_SYSVIEW_OnTaskCreate(_SYSVIEW_Globals.MicroJVMTaskId);
3030 SEGGER_SYSVIEW_SendTaskList();
3034 static U32 _SEGGER_SYSVIEW_convertMicroEJTask(U32 TaskId){
3035 U32 CurrentMicroEJTaskId = _SYSVIEW_Globals.CurrentMicroEJTaskId;
3036 if(TaskId == _SYSVIEW_Globals.MicroJVMTaskId && CurrentMicroEJTaskId != 0){
3039 return CurrentMicroEJTaskId;