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 |
---|---|
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 |