![]() |
Event Recorder and Component Viewer
Version 1.4.0
MDK Debugger Views for Status and Event Information
|
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
.
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:
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:
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. |
The following time stamp sources can be selected:
Source | Description |
---|---|
DWT Cycle Counter | Default setting. The DWT cycle counter is part of the CoreSight debug interface. DWT is not available with Cortex-M0/M0+/M23. uVision can simulate DWT using a script. |
SysTick | System tick timer is available on most 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 stops by any system reset. Refer to Event Recorder - Timer for more information. |
User Timer (Power-On Reset) | User-defined timer that stops only by power-on reset. Refer to Event Recorder - Timer for more information. |
Some Arm processors do not offer the DWT Cycle Counter and require therefore alternative time-stamp sources.
SysTick
For applications that do not use the SysTick timer, you may configure EventRecorderConf.h with:
The example project SCVD Cortex-M0 SysTick shows this configuration.
CMSIS-RTOS2 System Timer
For applications that use a CMSIS-RTOS2 compliant RTOS (SysTick timer used by RTOS), you may configure EventRecorderConf.h with:
The example project SCVD Cortex-M0 RTOS shows this configuration.
The DWT Cycle Counter can be simulated with the following debug initialization file, for example Debug_Sim.ini:
Refer to the SCVD in MyComponent to see how it is used in a µVision project.
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 |
Individual ROM size for Event Recorder instrumentation functions for in-lining: