![]() |
Event Recorder and Component Viewer
Version 1.3.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 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. |
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)".
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:
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 inlining: