summaryrefslogtreecommitdiff
path: root/hw/bsp/sysview_freertos_hooks.h
blob: 2669e42f529efdd800c5948676d94c4b64144197 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
/*
 * SPDX-FileCopyrightText: Copyright (c) 2019 Ha Thach (tinyusb.org)
 * SPDX-License-Identifier: MIT
 *
 * This file is part of the TinyUSB stack.
 */

// SEGGER SystemView instrumentation for FreeRTOSConfig.h (SYSVIEW=<level> build). #include this
// from the bottom of FreeRTOSConfig.h, after every other config option -- CFG_TUD_SYSVIEW /
// CFG_TUH_SYSVIEW must already be visible (from tusb_option.h by way of tusb_config.h) for the
// guard below to see them, and traceMALLOC/traceFREE must be defined before any FreeRTOS header
// that reads them is included. Shared verbatim across every FreeRTOS-capable family instead of
// pasting the same block into each FreeRTOSConfig.h; hw/bsp/family_support.cmake's SYSVIEW
// detector greps for the #include line this replaces, not this file's content.
#if (defined(CFG_TUD_SYSVIEW) && CFG_TUD_SYSVIEW) || (defined(CFG_TUH_SYSVIEW) && CFG_TUH_SYSVIEW)
  #undef  INCLUDE_uxTaskPriorityGet
  #define INCLUDE_uxTaskPriorityGet       1
  #undef  INCLUDE_xTaskGetIdleTaskHandle
  #define INCLUDE_xTaskGetIdleTaskHandle  1
  // Both macros below are generic FreeRTOS.h knobs (FreeRTOS.h supplies a "#ifndef ... 0"
  // default for each, identically on every port -- verified against lib/FreeRTOS-Kernel), not
  // architecture-specific, so forcing them here is safe for any family this header is wired
  // into. tusb_sysview_stack_report() (src/common/tusb_sysview.c) needs
  // configRECORD_STACK_HIGH_ADDRESS=1 to compute true "bytes used at peak" instead of
  // (inverted) headroom; without it the number it publishes is the exact opposite of the
  // "stack high-water" label the PR-comment legend gives it. configUSE_TRACE_FACILITY=1 is
  // what makes TaskStatus_t/uxTaskGetSystemState() available at all for that same report.
  #undef  configUSE_TRACE_FACILITY
  #define configUSE_TRACE_FACILITY        1
  #undef  configRECORD_STACK_HIGH_ADDRESS
  #define configRECORD_STACK_HIGH_ADDRESS 1
  #ifndef TU_SYSVIEW_HEAP_HOOKS_DECLARED /* avoid -Werror=redundant-decls vs tusb_sysview.h */
  #define TU_SYSVIEW_HEAP_HOOKS_DECLARED
  extern void tusb_sysview_heap_alloc(void* ptr, unsigned size);
  extern void tusb_sysview_heap_free(void* ptr);
  #endif
  #define traceMALLOC(pvAddress, uiSize) tusb_sysview_heap_alloc(pvAddress, uiSize)
  #define traceFREE(pvAddress, uiSize)   tusb_sysview_heap_free(pvAddress)
  #include "SEGGER_SYSVIEW_FreeRTOS.h"
#endif