Logging

This GOAL core module provides functions to output data via an output channel like UART or Ethernet. The data can be divided into the following categories, named logging levels:

  • error messages

  • warning messages

  • information messages

  • debug messages

For each logging level this module provides an output function:

Table: Logging level output functions

Logging level

Output function

Logging level

Output function

Error

goal_logErr()

Warning

goal_logWarn()

Information

goal_logInfo()

Debug

goal_logDbg()


The escape sequences \n and \r are filtered out from the before being send out through the channel.
The output channel is configured by the compiler-defines GOAL_CONFIG_LOGGING_TARET_RAW and GOAL_CONFIG_LOGGING_TARGET_SYSLOG.
GOAL provides generic format descriptors to output data to make printf-like format specifiers portable compared to the architecture and compilers. The GOAL format descriptors are initialized architecture-specific in …\goal\plat\arch\common\goal_arch_common.h. The following format descriptors are available: FMT_d32, FMT_i32, FMT_u32, FMT_x32, FMT_d64, FMT_i64, FMT_u64, FMT_x64, FMT_size_t, FMT_ptr and FMT_ptrdiff. FMT_ptr represents a pointer address. FMT_ptrdiff represents a difference of two pointer addresses.


Example: The actual position value of data type int32_t shall be printed as information:

goal_logInfo("actual position: "FMT_i32" inc", (int32_t) actPosVal);


The logging functionality is available after the state GOAL_FSA_INIT_GOAL.
It is recommended only to enable logging during development as it can have a serious impact on the runtime behavior.

  • GOAL files:

    • goal_log.[h,c]

  • example:

    • …\goal\appl\task_lock

Configuration

You can activate the logging by typing make log in the corresponding project directory. The project can then be build using make or make gen_project.

user:~/goal$ cd projects/goal_eip/opener/01_simple_io/gcc user:~/goal/projects/goal_eip/opener/01_simple_io/gcc$ make log logging to target raw enabled

The command will add the compiler-defines below to the goal_config.h.

#define GOAL_CONFIG_LOGGING 1 #define GOAL_CONFIG_LOGGING_TARGET_RAW 1

The following compiler-defines are available to configure the logging:

  • GOAL_CONFIG_LOGGING:

    • 0: logging is switched off for the complete GOAL system (default)

    • 1: logging is switched on and the logging can be used by other GOAL components

  • GOAL_CONFIG_LOGGING_TARGET_RAW:

    • 0: no board-specific output channel is available (default)

    • 1: the board-specific output channel is used, most likely UART

      • The board-specific function goal_targetMsgRaw() must be available.

      • GOAL_CONFIG_LOGGING_TARGET_RAW_INSTANT (in addition to GOAL_CONFIG_LOGGING_TARGET_RAW)

        • 0: log messages are stored in a ring buffer
          (+ small influence on realtime behavior of the device)
          (- messages might be dropped)
          (- if device crashes, last messages will not be printed)

        • 1: log messages are directly printed via goal_targetMsgRaw()
          (- big influence on realtime behavior of the device)
          (+ no messages are lost, because they are immediately printed)
          (+ messages are printed right after they have been created)

  • GOAL_CONFIG_LOGGING_TARGET_SYSLOG:

    • 0: no output via a Ethernet channel (default)

    • 1: output via the Ethernet channel as broadcast Ethernet frame, e.g. to indicate the frame by Wireshark

Platform API

Table: goal_targetMsgRaw()

Prototype

void goal_targetMsgRaw(const char *str, unsigned int len)

Description

This indication function transmits a raw message.

Parameters



Str

raw message

Len

length of the raw message in bytes

Return values

None

Category

Optional

Condition

compiler-define GOAL_CONFIG_LOGGING_TARGET_RAW must be set to 1