Guidelines for Developing a Nios II HAL Device Driver

ID 683146
Date 6/12/2015
Public
Document Table of Contents

1.12.5.1. Altera Logging Usage

You enable Altera logging with the hal.log_port BSP setting by setting the logging level with ALT_LOG_FLAGS. This setting causes the SBT to define ALT_LOG_ENABLE in public.mk.

You can add Altera logging diagnostic messages to your code by invoking ALT_LOG_PRINTF(), a macro that handles most printf() formatting options.

Writes to the Altera logging device are blocking. Therefore, when hal.log_port is set to a component instance of type altera_avalon_jtag_uart, you must run an application to accept the Altera logging output in order for the Nios II application to complete initialization. Otherwise, the application pends on an ALT_LOG_PRINTF() statement until the Altera logging device's output buffer can be drained.

You can handle the JTAG UART logging output in either of the following ways:

  • Run your application in the Nios II SBT for Eclipse. JTAG UART logging output appears in the Nios II Console view.
  • Run your application from the Nios II Command Shell, with the nios2-download command. From another Nios II Command Shell, run nios2-terminal to accept the JTAG UART logging output.

You can disable the Altera logging feature by setting the hal.log_port setting in the BSP to none. This is the default setting. In the example BSP, hal_my_uart, the create-this-bsp script initially sets hal.log_port to jtag_uart. You can enable and disable it in the BSP Editor. After regenerating a BSP, you can check the value of hal.log_port in summary.html, located in the bsp/hal_my_uart folder.

Disabling Altera logging has the effect of leaving ALT_LOG_ENABLE undefined in bsp/hal_my_uart/public.mk. When this feature is disabled, the application does not pend on ALT_LOG_PRINTF() statements, even when no terminal capable of receiving Altera logging output is connected.

You can leave your ALT_LOG_PRINTF() debugging statements in the final source code version intended for production release, provided you set hal.log_port to none. With this setting, the definition of ALT_LOG_PRINTF() is empty, and so the compiler effectively removes these macro invocations. They have no impact on code footprint or performance unless you re-enable Altera logging.

For complete information about using the Altera logging functions, refer to "Using Character-Mode Devices" section in the "Developing Programs Using the Hardware Abstraction Layer" chapter in the Nios II Software Developer's Handbook.