]> git.sur5r.net Git - freertos/blobdiff - FreeRTOS-Plus/Source/FreeRTOS-Plus-Trace/streamports/Jlink_RTT/include/trcStreamingPort.h
Update trace recorder code.
[freertos] / FreeRTOS-Plus / Source / FreeRTOS-Plus-Trace / streamports / Jlink_RTT / include / trcStreamingPort.h
index aeb0d02d7c945a9aa2f15758b2d4a27d85e329fe..815a61e08aa724c74188d2922ba7efa19ffb4317 100644 (file)
@@ -1,5 +1,5 @@
 /*******************************************************************************\r
- * Trace Recorder Library for Tracealyzer v3.1.2\r
+ * Trace Recorder Library for Tracealyzer v4.1.1\r
  * Percepio AB, www.percepio.com\r
  *\r
  * trcStreamingPort.h\r
@@ -7,6 +7,11 @@
  * The interface definitions for trace streaming ("stream ports").\r
  * This "stream port" sets up the recorder to use SEGGER RTT as streaming channel.\r
  *\r
+ * Note that this stream port is more complex than the typical case, since\r
+ * the J-Link interface uses a separate RAM buffer in SEGGER_RTT.c, instead\r
+ * of the default buffer included in the recorder core. The other stream ports \r
+ * offer more typical examples of how to define a custom streaming interface.\r
+ *\r
  * Terms of Use\r
  * This file is part of the trace recorder library (RECORDER), which is the \r
  * intellectual property of Percepio AB (PERCEPIO) and provided under a\r
@@ -39,7 +44,7 @@
  *\r
  * Tabs are used for indent in this file (1 tab = 4 spaces)\r
  *\r
- * Copyright Percepio AB, 2017.\r
+ * Copyright Percepio AB, 2018.\r
  * www.percepio.com\r
  ******************************************************************************/\r
 \r
@@ -113,17 +118,18 @@ extern "C" {
  * internal RAM buffer read by the J-Link probes during execution.\r
  *\r
  * Possible values:\r
- * - SEGGER_RTT_MODE_BLOCK_IF_FIFO_FULL (default)\r
- * - SEGGER_RTT_MODE_NO_BLOCK_SKIP\r
+ * - SEGGER_RTT_MODE_BLOCK_IF_FIFO_FULL \r
+ * - SEGGER_RTT_MODE_NO_BLOCK_SKIP (default)\r
  *\r
- * We recommend using SEGGER_RTT_MODE_BLOCK_IF_FIFO_FULL, to ensure you get a\r
+ * Using SEGGER_RTT_MODE_BLOCK_IF_FIFO_FULL ensure that you get a\r
  * complete and valid trace. This may however cause blocking if your streaming\r
  * interface isn't fast enough, which may disturb the real-time behavior.\r
- * We therefore recommend to try SEGGER_RTT_MODE_NO_BLOCK_SKIP as well. \r
- * In this mode, Tracealyzer will report lost events if the transfer is not\r
+ * \r
+ * We therefore recommend SEGGER_RTT_MODE_NO_BLOCK_SKIP. In this mode, \r
+ * Tracealyzer will report lost events if the transfer is not\r
  * fast enough. In that case, try increasing the size of the "up buffer".\r
  ******************************************************************************/\r
-#define TRC_CFG_RTT_MODE SEGGER_RTT_MODE_BLOCK_IF_FIFO_FULL\r
+#define TRC_CFG_RTT_MODE SEGGER_RTT_MODE_NO_BLOCK_SKIP\r
 \r
 #include "SEGGER_RTT_Conf.h"\r
 #include "SEGGER_RTT.h"\r
@@ -140,22 +146,18 @@ extern "C" {
 #if TRC_CFG_RTT_UP_BUFFER_INDEX == 0\r
 #define TRC_RTT_ALLOC_UP() static char* _TzTraceData = NULL;    /* Not actually used. Ignore allocation method. */\r
 #define TRC_STREAM_PORT_MALLOC() /* Static allocation. Not used. */\r
-#define TRC_ALLOC_CUSTOM_BUFFER(bufname) /* Only for custom allocation */\r
 #else\r
 #if TRC_CFG_RECORDER_BUFFER_ALLOCATION == TRC_RECORDER_BUFFER_ALLOCATION_STATIC\r
 #define TRC_RTT_ALLOC_UP() char _TzTraceData[TRC_CFG_RTT_BUFFER_SIZE_UP];    /* Static allocation */\r
 #define TRC_STREAM_PORT_MALLOC() /* Static allocation. Not used. */\r
-#define TRC_ALLOC_CUSTOM_BUFFER(bufname) /* Only for custom allocation */\r
 #endif\r
 #if TRC_CFG_RECORDER_BUFFER_ALLOCATION == TRC_RECORDER_BUFFER_ALLOCATION_DYNAMIC\r
 #define TRC_RTT_ALLOC_UP() char* _TzTraceData = NULL;    /* Dynamic allocation */\r
 #define TRC_STREAM_PORT_MALLOC() _TzTraceData = TRC_PORT_MALLOC(TRC_CFG_RTT_BUFFER_SIZE_UP);\r
-#define TRC_ALLOC_CUSTOM_BUFFER(bufname) /* Only for custom allocation */\r
 #endif\r
 #if TRC_CFG_RECORDER_BUFFER_ALLOCATION == TRC_RECORDER_BUFFER_ALLOCATION_CUSTOM\r
 #define TRC_RTT_ALLOC_UP() char* _TzTraceData = NULL;                                  /* Custom allocation, user needs to call vTraceSetRecorderDataBuffer before vTraceEnable, to assign this */ \r
 #define TRC_STREAM_PORT_MALLOC()                                                                               /* Not used in custom mode */\r
-#define TRC_ALLOC_CUSTOM_BUFFER(bufname) char bufname [TRC_CFG_RTT_BUFFER_SIZE_UP];  /* Not static in this case, since declared in user code */\r
 #endif\r
 #endif\r
 \r
@@ -170,20 +172,22 @@ extern "C" {
        TRC_RTT_ALLOC_UP() /* Macro that will result in proper UP buffer allocation */ \\r
        TRC_RTT_ALLOC_DOWN() /* Macro that will result in proper DOWN buffer allocation */\r
 \r
+int32_t readFromRTT(void* ptrData, uint32_t size, int32_t* ptrBytesRead);\r
+\r
+int32_t writeToRTT(void* ptrData, uint32_t size, int32_t* ptrBytesWritten);\r
+\r
+\r
 #define TRC_STREAM_PORT_INIT() \\r
        TRC_STREAM_PORT_MALLOC(); /*Dynamic allocation or empty if static */ \\r
        SEGGER_RTT_ConfigUpBuffer(TRC_CFG_RTT_UP_BUFFER_INDEX, "TzData", _TzTraceData, TRC_CFG_RTT_BUFFER_SIZE_UP, TRC_CFG_RTT_MODE ); \\r
        SEGGER_RTT_ConfigDownBuffer(TRC_CFG_RTT_DOWN_BUFFER_INDEX, "TzCtrl", _TzCtrlData, TRC_CFG_RTT_BUFFER_SIZE_DOWN, TRC_CFG_RTT_MODE);\r
 \r
-#define TRC_STREAM_PORT_ALLOCATE_EVENT(_type, _ptrData, _size) _type _tmpArray[_size / sizeof(_type)]; _type* _ptrData = _tmpArray;\r
-#define TRC_STREAM_PORT_ALLOCATE_DYNAMIC_EVENT(_type, _ptrData, _size) _type _tmpArray[sizeof(largestEventType) / sizeof(_type)]; _type* _ptrData = _tmpArray;\r
-#define TRC_STREAM_PORT_COMMIT_EVENT(_ptrData, _size) SEGGER_RTT_Write(TRC_CFG_RTT_UP_BUFFER_INDEX, (const char*)_ptrData, _size);\r
-#define TRC_STREAM_PORT_READ_DATA(_ptrData, _size, _ptrBytesRead) if (SEGGER_RTT_HASDATA(TRC_CFG_RTT_DOWN_BUFFER_INDEX)) *_ptrBytesRead = (int)SEGGER_RTT_Read(TRC_CFG_RTT_DOWN_BUFFER_INDEX, (char*)_ptrData, _size);\r
-#define TRC_STREAM_PORT_PERIODIC_SEND_DATA(_ptrBytesSent)\r
+/* Important for the J-Link port, in most other ports this can be skipped (default is 1) */\r
+#define TRC_STREAM_PORT_USE_INTERNAL_BUFFER 0\r
+  \r
+#define TRC_STREAM_PORT_WRITE_DATA(_ptrData, _size, _ptrBytesWritten) writeToRTT(_ptrData, _size, _ptrBytesWritten)\r
 \r
-#define TRC_STREAM_PORT_ON_TRACE_BEGIN() /* Do nothing */\r
-#define TRC_STREAM_PORT_ON_TRACE_END() /* Do nothing */\r
-    \r
+#define TRC_STREAM_PORT_READ_DATA(_ptrData, _size, _ptrBytesRead) readFromRTT(_ptrData, _size, _ptrBytesRead)\r
 \r
 #ifdef __cplusplus\r
 }\r