123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163 |
- /*********************************************************************
- * SEGGER MICROCONTROLLER GmbH & Co. KG *
- * Solutions for real time microcontroller applications *
- **********************************************************************
- * *
- * (c) 2015 - 2016 SEGGER Microcontroller GmbH & Co. KG *
- * *
- * www.segger.com Support: support@segger.com *
- * *
- **********************************************************************
- * *
- * SEGGER SystemView * Real-time application analysis *
- * *
- **********************************************************************
- * *
- * All rights reserved. *
- * *
- * * This software may in its unmodified form be freely redistributed *
- * in source form. *
- * * The source code may be modified, provided the source code *
- * retains the above copyright notice, this list of conditions and *
- * the following disclaimer. *
- * * Modified versions of this software in source or linkable form *
- * may not be distributed without prior consent of SEGGER. *
- * *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS "AS IS" AND *
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, *
- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A *
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL *
- * SEGGER Microcontroller BE LIABLE FOR ANY DIRECT, INDIRECT, *
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES *
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS *
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS *
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, *
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING *
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS *
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *
- * *
- **********************************************************************
- * *
- * SystemView version: V2.38 *
- * *
- **********************************************************************
- -------------------------- END-OF-HEADER -----------------------------
- File : SEGGER_SYSVIEW_Config_RTThread.c
- Purpose : Sample setup configuration of SystemView with RT-Thread.
- Revision: $Rev: 3735 $
- */
- #include "rtthread.h"
- #include "SEGGER_SYSVIEW.h"
- #include "SEGGER_SYSVIEW_RTThread.h"
- //
- // SystemcoreClock can be used in most CMSIS compatible projects.
- // In non-CMSIS projects define SYSVIEW_CPU_FREQ.
- //
- extern unsigned int SystemCoreClock;
- /*********************************************************************
- *
- * Defines, configurable
- *
- **********************************************************************
- */
- // The application name to be displayed in SystemViewer
- #ifndef SYSVIEW_APP_NAME
- #define SYSVIEW_APP_NAME "RT-Thread Trace"
- #endif
- // The target device name
- #ifndef SYSVIEW_DEVICE_NAME
- #define SYSVIEW_DEVICE_NAME "Cortex-M4"
- #endif
- // Frequency of the timestamp. Must match SEGGER_SYSVIEW_Conf.h
- #ifndef SYSVIEW_TIMESTAMP_FREQ
- #define SYSVIEW_TIMESTAMP_FREQ (SystemCoreClock)
- #endif
- // System Frequency. SystemcoreClock is used in most CMSIS compatible projects.
- #ifndef SYSVIEW_CPU_FREQ
- #define SYSVIEW_CPU_FREQ (SystemCoreClock)
- #endif
- // The lowest RAM address used for IDs (pointers)
- #ifndef SYSVIEW_RAM_BASE
- #define SYSVIEW_RAM_BASE (0x20000000)
- #endif
- #ifndef SYSVIEW_SYSDESC0
- #define SYSVIEW_SYSDESC0 "I#15=SysTick"
- #endif
- // Define as 1 if the Cortex-M cycle counter is used as SystemView timestamp. Must match SEGGER_SYSVIEW_Conf.h
- #ifndef USE_CYCCNT_TIMESTAMP
- #define USE_CYCCNT_TIMESTAMP 1
- #endif
- #ifndef SYSVIEW_SYSDESC1
- #define SYSVIEW_SYSDESC1 "I#53=IntUart1,I#77=IntEth0"
- #endif
- //#ifndef SYSVIEW_SYSDESC2
- // #define SYSVIEW_SYSDESC2 ""
- //#endif
- /*********************************************************************
- *
- * Defines, fixed
- *
- **********************************************************************
- */
- #define DWT_CTRL (*(volatile rt_uint32_t*) (0xE0001000uL)) // DWT Control Register
- #define NOCYCCNT_BIT (1uL << 25) // Cycle counter support bit
- #define CYCCNTENA_BIT (1uL << 0) // Cycle counter enable bit
- /*********************************************************************
- *
- * _cbSendSystemDesc()
- *
- * Function description
- * Sends SystemView description strings.
- */
- static void _cbSendSystemDesc(void) {
- SEGGER_SYSVIEW_SendSysDesc("N="SYSVIEW_APP_NAME",O=RTThread,D="SYSVIEW_DEVICE_NAME);
- #ifdef SYSVIEW_SYSDESC0
- SEGGER_SYSVIEW_SendSysDesc(SYSVIEW_SYSDESC0);
- #endif
- #ifdef SYSVIEW_SYSDESC1
- SEGGER_SYSVIEW_SendSysDesc(SYSVIEW_SYSDESC1);
- #endif
- #ifdef SYSVIEW_SYSDESC2
- SEGGER_SYSVIEW_SendSysDesc(SYSVIEW_SYSDESC2);
- #endif
- }
- extern const SEGGER_SYSVIEW_OS_API SYSVIEW_X_OS_TraceAPI;
- /*********************************************************************
- *
- * Global functions
- *
- **********************************************************************
- */
- void SEGGER_SYSVIEW_Conf(void) {
- #if USE_CYCCNT_TIMESTAMP
- //
- // The cycle counter must be activated in order
- // to use time related functions.
- //
- if ((DWT_CTRL & NOCYCCNT_BIT) == 0) { // Cycle counter supported?
- if ((DWT_CTRL & CYCCNTENA_BIT) == 0) { // Cycle counter not enabled?
- DWT_CTRL |= CYCCNTENA_BIT; // Enable Cycle counter
- }
- }
- #endif
- SEGGER_SYSVIEW_Init(SYSVIEW_TIMESTAMP_FREQ, SYSVIEW_CPU_FREQ,
- &SYSVIEW_X_OS_TraceAPI, _cbSendSystemDesc);
- SEGGER_SYSVIEW_SetRAMBase(SYSVIEW_RAM_BASE);
- }
- /*************************** End of file ****************************/
|