Event Recorder and Component Viewer  Version 1.3.0
MDK Debugger Views for Status and Event Information
 All Files Functions Macros Groups Pages
Event Recorder: Theory of operation

This section describes how the Event Recorder collects event data, generates time stamps, and transfers this information via a debug unit to a host computer.

The Event Recorder is implemented in the target application using the software component Compiler:Event Recorder which adds the source file EventRecorder.c to the application. Each event is stored in a 16-byte structure that is composed of a 16-bit id, 32-bit time stamp, two 32-bit data values and consistency check values.

To store these events, a circular buffer is provided that can store a minimum of 8 events. The size of this circular buffer is configurable with the #define EVENT_RECORD_COUNT.

Event id

The Event Data Recording functions get a parameter id that is composed of level, component number, and message number as shown below:

id bits Description
message number 0..7 identifies the event message information of the software component
component number 8..15 identifies the software component (also used for filtering, see table below)
level 16..17 specifies the class of the message for filtering (see table below)
— (reserved) 18..31 set to 0

The level specifies the category of the event message and can be used for filtering:

level Message relates to ...
EventLevelError = 0 Run-time error
EventLevelAPI = 1 API function call
EventLevelOp = 2 Internal operation
EventLevelDetail = 3 Additional detailed information of operations

The component number specifies the software component that the event message belongs to and can be also used for filtering:

component number Relation to software components
0x0 .. 0x3F (0 .. 63) software components of the user application
0x40 .. 0x7F (64 .. 127) third party middleware components
0x80 .. 0xEE (128 .. 238) MDK middleware components
0xEF (239) Start/Stop events for Event Statistic information
0xF0 .. 0xFC (240 .. 253) RTOS kernel
0xFD (253) Inter-process communication layer (multiprocessor systems)
0xFE (254) printf-style debug outputs
0xFF (255) Event Recorder messages

The following sections describe:

  • Configuration : explains the set-up of the Event Recorder and the configuration of a user provided timer.
  • Event filtering : shows how to limit the amount of data that is displayed in the Event Recorder window.
  • Resource requirements : lists the technical data and explains the hardware and software requirements.

Configuration

Selecting the software component Compiler:Event Recorder to a project will add the file EventRecorderConf.h that is used to define the configuration parameters of the Event Recorder. It uses Configuration Wizard Annotations that show a graphical representation of the settings in MDK:

config_wizard.png
EventRecorderConf.h in Configuration Wizard View


Option #define Description
Number of Records EVENT_RECORD_COUNT Specifies the number or records stored in the Event Record Buffer. Each record is 16 bytes.
Time Stamp Source EVENT_TIMESTAMP_SOURCE Specifies the timer that is used as time base. Refer to Time stamp source below for more information.
Time Stamp Clock Frequency [Hz] EVENT_TIMESTAMP_FREQ Specifies the timer clock frequency.

Time stamp source

The following time stamp sources can be set:

Source Description
DWT Cycle Counter Default setting. The DWT cycle counter is part of that CoreSight debug interface. It is neither available in Cortex-M0/M0+/M23, nor in simulation.
SysTick System tick timer is available on all Cortex-M processors. But in power-down modes it might be disabled.
CMSIS-RTOS2 System Timer The system tick counter provided by a CMSIS-RTOS2 compliant real-time operating system.
User Timer (Normal Reset) User-defined timer that is reset by a system reset.
User Timer (Power-On Reset)User-defined timer which is only reset during a power-on reset.
Note
If you specify the DWT Cycle Counter to be used for a Cortex-M0/M0+/M23 device, a warning will be issued at compile time:
Invalid Time Stamp Source selected in EventRecorderConf.h!

Override the Event Recorder timer functions

In the EventRecorder.c source code file, the time stamp functions EventRecorderTimerSetup, EventRecorderTimerGetFreq and EventRecorderTimerGetCount are defined as __WEAK. Override them in your application when using a User Timer. If your timer peripheral is reset by a hardware reset, please select the option "User Timer (Normal Reset)". If your timer peripheral is only reset after a power-on reset, please select the option "User Timer (Power-On Reset)".

Specify an alternative DWT Cycle Counter for µVision simulator

As the DWT Cycle Counter is not available in simulation, you can specify an alternative in a simulation initialization file, for example Debug_Sim.ini:

MAP 0xE0001000, 0xE0001007 READ WRITE
signal void DWT_CYCCNT (void) {
while (1) {
rwatch(0xE0001004);
_WWORD(0xE0001004, states);
}
}
DWT_CYCCNT()

Refer to the SCVD in MyComponent to see how it is used in a µVision project.

Resource requirements

Technical data of Event Recorder firmware

Target: Cortex-M3 using DWT cycle counter as timer

Parameter ARMCC V5.06 ARMCC V5.06 ARMCC V6.9 ARMCC V6.9
Compiler options -O3 -O3 -Otime -Os -O3
ROM size 1396 bytes 1936 bytes 1626 bytes 3024 bytes
RAM size @8 records (min) 288 bytes 288 bytes 288 bytes 288 bytes
RAM size @64 records (default) 1184 bytes 1184 bytes 1184 bytes 1184 bytes
EventRecord2 (id+8bytes) 258 cycles 238 cycles 209 cycles 189 cycles
EventRecord4 (id+16bytes) 450 cycles 429 cycles 363 cycles 329 cycles
EventRecordData (id+8bytes) 378 cycles 342 cycles 276 cycles 254 cycles
EventRecordData (id+16bytes) 573 cycles 544 cycles 429 cycles 396 cycles
EventRecordData (id+24bytes) 747 cycles 722 cycles 567 cycles 523 cycles
EventRecordData (id+32bytes) 921 cycles 903 cycles 706 cycles 651 cycles
Note
Timing measured in simulator (zero cycle memory, no interrupts). Function parameter in application is not considered.

Individual ROM size for Event Recorder instrumentation functions for inlining: