Skip to content
Closed
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next Next commit
Improve debugging options
1. separate debug level from systemview enable/disable
   This allows enabling systemview without also setting
   really high debug level.  High debug level caused
   lots of serial output, which slowed things down and
   added Heisenbugs.

2. Add option to redirect output via Segger RTT instead
   of serial output.  Updates to Segger RTT v6.60d.

Boards.txt / platform.txt are used to allow UI to show
the new options, which causes the following to be
defined during build:

* CFG_DEBUG   := As before, from 0 (disabled) to 3 (very verbose)
* CFG_LOGGER  := Where to output logs / printf; either 1 (serial) or 2 (RTT)
* CFG_SYSVIEW := Enables SysView APIs if set to non-zero value
  • Loading branch information
henrygab committed Jan 13, 2020
commit d5b77b0b000b802f3399b015499823769d4ff7e9
101 changes: 93 additions & 8 deletions boards.txt
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@

menu.softdevice=Bootloader
menu.debug=Debug
menu.logger=Logger
menu.sysview=SystemView

# ----------------------------------
# Bluefruit Feather nRF52832
Expand Down Expand Up @@ -49,14 +51,26 @@ feather52832.menu.softdevice.s132v6.build.sd_name=s132
feather52832.menu.softdevice.s132v6.build.sd_version=6.1.1
feather52832.menu.softdevice.s132v6.build.sd_fwid=0x00B7

# Output logging destination -- distinct from debug level
feather52832.menu.logger.serial=Serial (Default)
feather52832.menu.logger.serial.build.logger_flags=-DCFG_LOGGER=1
feather52832.menu.logger.rtt=Segger RTT (requires JLink)
feather52832.menu.logger.rtt.build.logger_flags=-DCFG_LOGGER=2

# Enabling SystemView -- distinct from debug level
feather52832.menu.sysview.disabled=Disable SysView (Default)
feather52832.menu.sysview.disabled.build.sysview_flags=-DCFG_SYSVIEW=0
feather52832.menu.sysview.enabled=Enable SysView (requires JLink)
feather52832.menu.sysview.enabled.build.sysview_flags=-DCFG_SYSVIEW=0xFFFFFFFFu

# Debug Menu
feather52832.menu.debug.l0=Level 0 (Release)
feather52832.menu.debug.l0.build.debug_flags=-DCFG_DEBUG=0
feather52832.menu.debug.l1=Level 1 (Error Message)
feather52832.menu.debug.l1.build.debug_flags=-DCFG_DEBUG=1
feather52832.menu.debug.l2=Level 2 (Full Debug)
feather52832.menu.debug.l2.build.debug_flags=-DCFG_DEBUG=2
feather52832.menu.debug.l3=Level 3 (Segger SystemView)
feather52832.menu.debug.l3=Level 3 (Full Debug ++)
feather52832.menu.debug.l3.build.debug_flags=-DCFG_DEBUG=3

# ----------------------------------
Expand Down Expand Up @@ -102,17 +116,28 @@ feather52840.menu.softdevice.s140v6.build.sd_name=s140
feather52840.menu.softdevice.s140v6.build.sd_version=6.1.1
feather52840.menu.softdevice.s140v6.build.sd_fwid=0x00B6

# Output logging destination -- distinct from debug level
feather52840.menu.logger.serial=Serial (Default)
feather52840.menu.logger.serial.build.logger_flags=-DCFG_LOGGER=1
feather52840.menu.logger.rtt=Segger RTT (requires JLink)
feather52840.menu.logger.rtt.build.logger_flags=-DCFG_LOGGER=2

# Enabling SystemView -- distinct from debug level
feather52840.menu.sysview.disabled=Disable SysView (Default)
feather52840.menu.sysview.disabled.build.sysview_flags=-DCFG_SYSVIEW=0
feather52840.menu.sysview.enabled=Enable SysView (requires JLink)
feather52840.menu.sysview.enabled.build.sysview_flags=-DCFG_SYSVIEW=0xFFFFFFFFu

# Debug Menu
feather52840.menu.debug.l0=Level 0 (Release)
feather52840.menu.debug.l0.build.debug_flags=-DCFG_DEBUG=0
feather52840.menu.debug.l1=Level 1 (Error Message)
feather52840.menu.debug.l1.build.debug_flags=-DCFG_DEBUG=1
feather52840.menu.debug.l2=Level 2 (Full Debug)
feather52840.menu.debug.l2.build.debug_flags=-DCFG_DEBUG=2
feather52840.menu.debug.l3=Level 3 (Segger SystemView)
feather52840.menu.debug.l3=Level 3 (Full Debug ++)
feather52840.menu.debug.l3.build.debug_flags=-DCFG_DEBUG=3


# ----------------------------------
# Bluefruit ItsyBitsy nRF52840 Express
# ----------------------------------
Expand Down Expand Up @@ -156,14 +181,26 @@ itsybitsy52840.menu.softdevice.s140v6.build.sd_name=s140
itsybitsy52840.menu.softdevice.s140v6.build.sd_version=6.1.1
itsybitsy52840.menu.softdevice.s140v6.build.sd_fwid=0x00B6

# Output logging destination -- distinct from debug level
itsybitsy52840.menu.logger.serial=Serial (Default)
itsybitsy52840.menu.logger.serial.build.logger_flags=-DCFG_LOGGER=1
itsybitsy52840.menu.logger.rtt=Segger RTT (requires JLink)
itsybitsy52840.menu.logger.rtt.build.logger_flags=-DCFG_LOGGER=2

# Enabling SystemView -- distinct from debug level
itsybitsy52840.menu.sysview.disabled=Disable SysView (Default)
itsybitsy52840.menu.sysview.disabled.build.sysview_flags=-DCFG_SYSVIEW=0
itsybitsy52840.menu.sysview.enabled=Enable SysView (requires JLink)
itsybitsy52840.menu.sysview.enabled.build.sysview_flags=-DCFG_SYSVIEW=0xFFFFFFFFu

# Debug Menu
itsybitsy52840.menu.debug.l0=Level 0 (Release)
itsybitsy52840.menu.debug.l0.build.debug_flags=-DCFG_DEBUG=0
itsybitsy52840.menu.debug.l1=Level 1 (Error Message)
itsybitsy52840.menu.debug.l1.build.debug_flags=-DCFG_DEBUG=1
itsybitsy52840.menu.debug.l2=Level 2 (Full Debug)
itsybitsy52840.menu.debug.l2.build.debug_flags=-DCFG_DEBUG=2
itsybitsy52840.menu.debug.l3=Level 3 (Segger SystemView)
itsybitsy52840.menu.debug.l3=Level 3 (Full Debug ++)
itsybitsy52840.menu.debug.l3.build.debug_flags=-DCFG_DEBUG=3

# ---------------------------------------------
Expand Down Expand Up @@ -209,14 +246,26 @@ cplaynrf52840.menu.softdevice.s140v6.build.sd_name=s140
cplaynrf52840.menu.softdevice.s140v6.build.sd_version=6.1.1
cplaynrf52840.menu.softdevice.s140v6.build.sd_fwid=0x00B6

# Output logging destination -- distinct from debug level
cplaynrf52840.menu.logger.serial=Serial (Default)
cplaynrf52840.menu.logger.serial.build.logger_flags=-DCFG_LOGGER=1
cplaynrf52840.menu.logger.rtt=Segger RTT (requires JLink)
cplaynrf52840.menu.logger.rtt.build.logger_flags=-DCFG_LOGGER=2

# Enabling SystemView -- distinct from debug level
cplaynrf52840.menu.sysview.disabled=Disable SysView (Default)
cplaynrf52840.menu.sysview.disabled.build.sysview_flags=-DCFG_SYSVIEW=0
cplaynrf52840.menu.sysview.enabled=Enable SysView (requires JLink)
cplaynrf52840.menu.sysview.enabled.build.sysview_flags=-DCFG_SYSVIEW=0xFFFFFFFFu

# Debug Menu
cplaynrf52840.menu.debug.l0=Level 0 (Release)
cplaynrf52840.menu.debug.l0.build.debug_flags=-DCFG_DEBUG=0
cplaynrf52840.menu.debug.l1=Level 1 (Error Message)
cplaynrf52840.menu.debug.l1.build.debug_flags=-DCFG_DEBUG=1
cplaynrf52840.menu.debug.l2=Level 2 (Full Debug)
cplaynrf52840.menu.debug.l2.build.debug_flags=-DCFG_DEBUG=2
cplaynrf52840.menu.debug.l3=Level 3 (Segger SystemView)
cplaynrf52840.menu.debug.l3=Level 3 (Full Debug ++)
cplaynrf52840.menu.debug.l3.build.debug_flags=-DCFG_DEBUG=3


Expand Down Expand Up @@ -263,14 +312,26 @@ cluenrf52840.menu.softdevice.s140v6.build.sd_name=s140
cluenrf52840.menu.softdevice.s140v6.build.sd_version=6.1.1
cluenrf52840.menu.softdevice.s140v6.build.sd_fwid=0x00B6

# Output logging destination -- distinct from debug level
cluenrf52840.menu.logger.serial=Serial (Default)
cluenrf52840.menu.logger.serial.build.logger_flags=-DCFG_LOGGER=1
cluenrf52840.menu.logger.rtt=Segger RTT (requires JLink)
cluenrf52840.menu.logger.rtt.build.logger_flags=-DCFG_LOGGER=2

# Enabling SystemView -- distinct from debug level
cluenrf52840.menu.sysview.disabled=Disable SysView (Default)
cluenrf52840.menu.sysview.disabled.build.sysview_flags=-DCFG_SYSVIEW=0
cluenrf52840.menu.sysview.enabled=Enable SysView (requires JLink)
cluenrf52840.menu.sysview.enabled.build.sysview_flags=-DCFG_SYSVIEW=0xFFFFFFFFu

# Debug Menu
cluenrf52840.menu.debug.l0=Level 0 (Release)
cluenrf52840.menu.debug.l0.build.debug_flags=-DCFG_DEBUG=0
cluenrf52840.menu.debug.l1=Level 1 (Error Message)
cluenrf52840.menu.debug.l1.build.debug_flags=-DCFG_DEBUG=1
cluenrf52840.menu.debug.l2=Level 2 (Full Debug)
cluenrf52840.menu.debug.l2.build.debug_flags=-DCFG_DEBUG=2
cluenrf52840.menu.debug.l3=Level 3 (Segger SystemView)
cluenrf52840.menu.debug.l3=Level 3 (Full Debug ++)
cluenrf52840.menu.debug.l3.build.debug_flags=-DCFG_DEBUG=3

# ----------------------------------
Expand Down Expand Up @@ -316,14 +377,26 @@ metro52840.menu.softdevice.s140v6.build.sd_name=s140
metro52840.menu.softdevice.s140v6.build.sd_version=6.1.1
metro52840.menu.softdevice.s140v6.build.sd_fwid=0x00B6

# Output logging destination -- distinct from debug level
metro52840.menu.logger.serial=Serial (Default)
metro52840.menu.logger.serial.build.logger_flags=-DCFG_LOGGER=1
metro52840.menu.logger.rtt=Segger RTT (requires JLink)
metro52840.menu.logger.rtt.build.logger_flags=-DCFG_LOGGER=2

# Enabling SystemView -- distinct from debug level
metro52840.menu.sysview.disabled=Disable SysView (Default)
metro52840.menu.sysview.disabled.build.sysview_flags=-DCFG_SYSVIEW=0
metro52840.menu.sysview.enabled=Enable SysView (requires JLink)
metro52840.menu.sysview.enabled.build.sysview_flags=-DCFG_SYSVIEW=0xFFFFFFFFu

# Debug Menu
metro52840.menu.debug.l0=Level 0 (Release)
metro52840.menu.debug.l0.build.debug_flags=-DCFG_DEBUG=0
metro52840.menu.debug.l1=Level 1 (Error Message)
metro52840.menu.debug.l1.build.debug_flags=-DCFG_DEBUG=1
metro52840.menu.debug.l2=Level 2 (Full Debug)
metro52840.menu.debug.l2.build.debug_flags=-DCFG_DEBUG=2
metro52840.menu.debug.l3=Level 3 (Segger SystemView)
metro52840.menu.debug.l3=Level 3 (Full Debug ++)
metro52840.menu.debug.l3.build.debug_flags=-DCFG_DEBUG=3

# ----------------------------------
Expand Down Expand Up @@ -359,12 +432,24 @@ pca10056.menu.softdevice.s140v6.build.sd_name=s140
pca10056.menu.softdevice.s140v6.build.sd_version=6.1.1
pca10056.menu.softdevice.s140v6.build.sd_fwid=0x00B6

# Output logging destination -- distinct from debug level
pca10056.menu.logger.serial=Serial (Default)
pca10056.menu.logger.serial.build.logger_flags=-DCFG_LOGGER=1
pca10056.menu.logger.rtt=Segger RTT (requires JLink)
pca10056.menu.logger.rtt.build.logger_flags=-DCFG_LOGGER=2

# Enabling SystemView -- distinct from debug level
pca10056.menu.sysview.disabled=Disable SysView (Default)
pca10056.menu.sysview.disabled.build.sysview_flags=-DCFG_SYSVIEW=0
pca10056.menu.sysview.enabled=Enable SysView (requires JLink)
pca10056.menu.sysview.enabled.build.sysview_flags=-DCFG_SYSVIEW=0xFFFFFFFFu

# Debug Menu
pca10056.menu.debug.l0=Level 0 (Release)
pca10056.menu.debug.l0.build.debug_flags=-DCFG_DEBUG=0
pca10056.menu.debug.l1=Level 1 (Error Message)
pca10056.menu.debug.l1.build.debug_flags=-DCFG_DEBUG=1
pca10056.menu.debug.l2=Level 2 (Full Debug)
pca10056.menu.debug.l2.build.debug_flags=-DCFG_DEBUG=2
pca10056.menu.debug.l3=Level 3 (Segger SystemView)
pca10056.menu.debug.l3=Level 3 (Full Debug ++)
pca10056.menu.debug.l3.build.debug_flags=-DCFG_DEBUG=3
4 changes: 2 additions & 2 deletions cores/nRF5/WInterrupts.c
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,7 @@ void detachInterrupt(uint32_t pin)

void GPIOTE_IRQHandler()
{
#if CFG_DEBUG >= 3
#if CFG_SYSVIEW
SEGGER_SYSVIEW_RecordEnterISR();
#endif

Expand All @@ -171,7 +171,7 @@ void GPIOTE_IRQHandler()
event = (uint32_t)((uint32_t)event + 4);
}

#if CFG_DEBUG >= 3
#if CFG_SYSVIEW
SEGGER_SYSVIEW_RecordExitISR();
#endif
}
126 changes: 71 additions & 55 deletions cores/nRF5/common_func.h
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,20 @@
extern "C" {
#endif

// bitmask of loggers to be enabled -- currently boards.txt only enables one at a time.
#define ADALOG_TYPE_SERIAL 1
#define ADALOG_TYPE_RTT 2
//#define ADALOG_TYPE_SWO 4

#if (CFG_LOGGER & ADALOG_TYPE_SERIAL)
// ? Maybe stdio.h?
#endif

#if (CFG_LOGGER & ADALOG_TYPE_RTT)
#include "SEGGER_RTT.h"
#endif


#define COMMENT_OUT(x)

#define memclr(buffer, size) memset(buffer, 0, size)
Expand Down Expand Up @@ -117,75 +131,77 @@
const char* dbg_err_str(int32_t err_id); // TODO move to other place

#if CFG_DEBUG
#define LOG_LV1(...) ADALOG(__VA_ARGS__)
#define LOG_LV1_BUFFER(...) ADALOG_BUFFER(__VA_ARGS__)
#define LOG_LV1(...) ADALOG(__VA_ARGS__)
#define LOG_LV1_BUFFER(...) ADALOG_BUFFER(__VA_ARGS__)
#else
#define LOG_LV1(...)
#define LOG_LV1_BUFFER(...)
#define LOG_LV1(...)
#define LOG_LV1_BUFFER(...)
#endif

#if CFG_DEBUG >= 2
#define LOG_LV2(...) ADALOG(__VA_ARGS__)
#define LOG_LV2_BUFFER(...) ADALOG_BUFFER(__VA_ARGS__)
#define LOG_LV2(...) ADALOG(__VA_ARGS__)
#define LOG_LV2_BUFFER(...) ADALOG_BUFFER(__VA_ARGS__)
#else
#define LOG_LV2(...)
#define LOG_LV2_BUFFER(...)
#define LOG_LV2(...)
#define LOG_LV2_BUFFER(...)
#endif

#if CFG_DEBUG

#if __cplusplus
#define PRINTF ::printf
#if (CFG_LOGGER & ADALOG_TYPE_RTT)
#define PRINTF(...) SEGGER_RTT_printf(0, __VA_ARGS__)
#elif __cplusplus
#define PRINTF ::printf
#else
#define PRINTF printf
#define PRINTF printf
#endif

#define PRINT_LOCATION() PRINTF("%s: %d:\n", __PRETTY_FUNCTION__, __LINE__)
#define PRINT_MESS(x) PRINTF("%s: %d: %s \n" , __FUNCTION__, __LINE__, (char*)(x))
#define PRTNT_HEAP() if (CFG_DEBUG == 3) PRINTF("\n%s: %d: Heap free: %d\n", __FUNCTION__, __LINE__, util_heap_get_free_size())
#define PRINT_STR(x) PRINTF("%s: %d: " #x " = %s\n" , __FUNCTION__, __LINE__, (char*)(x) )
#define PRINT_INT(x) PRINTF("%s: %d: " #x " = %ld\n" , __FUNCTION__, __LINE__, (uint32_t) (x) )

#define PRINT_HEX(x) \
do {\
PRINTF("%s: %d: " #x " = 0x", __PRETTY_FUNCTION__, __LINE__);\
char fmt[] = "%00X\n";\
fmt[2] += 2*sizeof(x); /* Hex with correct size */\
PRINTF(fmt, (x) );\
}while(0)

#define PRINT_BUFFER(buf, n) \
do {\
uint8_t const* p8 = (uint8_t const*) (buf);\
PRINTF(#buf ": ");\
for(uint32_t i=0; i<(n); i++) PRINTF("%02x ", p8[i]);\
PRINTF("\n");\
}while(0)

#define ADALOG(tag, ...) \
do { \
if ( tag ) PRINTF("[%-6s] ", tag);\
PRINTF(__VA_ARGS__);\
PRINTF("\n");\
}while(0)

#define ADALOG_BUFFER(_tag, _buf, _n) \
do {\
const char * _xtag = _tag;\
if ( _xtag ) PRINTF("%-6s: len = %d\n", _xtag, _n);\
dbgDumpMemory(_buf, 1, _n, true);\
}while(0)
#if CFG_DEBUG
#define PRINT_LOCATION() PRINTF("%s: %d:\n", __PRETTY_FUNCTION__, __LINE__)
#define PRINT_MESS(x) PRINTF("%s: %d: %s \n" , __FUNCTION__, __LINE__, (char*)(x))
#define PRINT_HEAP() if (CFG_DEBUG >= 2) PRINTF("\n%s: %d: Heap free: %d\n", __FUNCTION__, __LINE__, util_heap_get_free_size())
#define PRINT_STR(x) PRINTF("%s: %d: " #x " = %s\n" , __FUNCTION__, __LINE__, (char*)(x) )
#define PRINT_INT(x) PRINTF("%s: %d: " #x " = %ld\n" , __FUNCTION__, __LINE__, (uint32_t) (x) )

#define PRINT_HEX(x) \
do {\
PRINTF("%s: %d: " #x " = 0x", __PRETTY_FUNCTION__, __LINE__);\
char fmt[] = "%00X\n";\
fmt[2] += 2*sizeof(x); /* Hex with correct size */\
PRINTF(fmt, (x) );\
}while(0)

#define PRINT_BUFFER(buf, n) \
do {\
uint8_t const* p8 = (uint8_t const*) (buf);\
PRINTF(#buf ": ");\
for(uint32_t i=0; i<(n); i++) PRINTF("%02x ", p8[i]);\
PRINTF("\n");\
}while(0)

#define ADALOG(tag, ...) \
do { \
if ( tag ) PRINTF("[%-6s] ", tag);\
PRINTF(__VA_ARGS__);\
PRINTF("\n");\
}while(0)

#define ADALOG_BUFFER(_tag, _buf, _n) \
do {\
const char * _xtag = _tag;\
if ( _xtag ) PRINTF("%-6s: len = %d\n", _xtag, _n);\
dbgDumpMemory(_buf, 1, _n, true);\
}while(0)

#else

#define PRINT_LOCATION()
#define PRINT_MESS(x)
#define PRTNT_HEAP()
#define PRINT_STR(x)
#define PRINT_INT(x)
#define PRINT_HEX(x)
#define PRINT_BUFFER(buf, n)
#define ADALOG(...)
#define PRINT_LOCATION()
#define PRINT_MESS(x)
#define PRINT_HEAP()
#define PRINT_STR(x)
#define PRINT_INT(x)
#define PRINT_HEX(x)
#define PRINT_BUFFER(buf, n)
#define ADALOG(...)

#endif

Expand Down
9 changes: 7 additions & 2 deletions cores/nRF5/freertos/config/FreeRTOSConfig.h
Original file line number Diff line number Diff line change
Expand Up @@ -197,8 +197,13 @@ standard names - or at least those used in the unmodified vector table. */
#define configUSE_DISABLE_TICK_AUTO_CORRECTION_DEBUG 0

// Sysview require at least debug level 3
#if CFG_DEBUG >= 3
#include "sysview/SEGGER_SYSVIEW_FreeRTOS.h"
#if CFG_SYSVIEW
#include "sysview/SEGGER_SYSVIEW_FreeRTOS.h"
#endif

// Segger RTT output requires at least debug level 20
#if (CFG_LOGGER & ADALOG_TYPE_RTT)
#include "sysview/SEGGER/SEGGER_RTT.h"
#endif

#endif /* FREERTOS_CONFIG_H */
Loading