Master Tracealyzer with Bare Metal
Getting Started with Tracealyzer on Bare Metal
Integrate TraceRecorder, capture your first Bare Metal trace, and analyze it in Tracealyzer.
Step 1
Integrate TraceRecorder
Step 2
Configure Tracing
Step 3
Capture Your First Trace
Capture your first trace and see how your Bare Metal application executes.
Prerequisites
Before you begin
- Install Tracealyzer. If you haven’t done so, see detailed instructions here
- Existing application that builds and runs
- Target/debug connection available
Step 1: Add TraceRecorder
Integrate TraceRecorder into Your Project
TraceRecorder
- Add the following TraceRecorder source files to your project and make sure they are compiled:
TraceRecorder/src/*.c - Add the following TraceRecorder header files to your project:
TraceRecorder/include/*.h
Make sure to update the compiler’s include path to ensure all header files are found!
Configure TraceRecorder
- In config/trcConfig.h, set
TRC_CFG_HARDWARE_PORTto a suitable hardware port for your device (see include/trcDefines.h and include/trcHardwarePort.h) - If your application builds after removing the line
#error "Trace Recorder: Please include your processor's header file …"in config/trcConfig.h, everything is fine, else replace it with your processors header file
Start TraceRecorder
- Enable tracing by adding a call in your main function to
xTraceEnable(TRC_START);
This should be done after the initial hardware setup, but must be called before any other TraceRecorder functions. Optionally,xTraceInitialize()can be used to initialize the trace system without starting the tracing. Then callxTraceEnable()at a later point to start the tracing.
For complete TraceRecorder Integration details and advanced configuration, see the detailed TraceRecorder for Bare Metal reference guide.
Step 2: Configure Tracing
Configure Tracing
Initial setup
You’ll begin by selecting a capture method that suits your needs, either Snapshot or Streaming. Each method offers unique benefits, so consider your requirements carefully before proceeding.
-
Snapshot: Store trace data in target RAM and retrieve it later by utilizing the RingBuffer stream port.
-
Streaming: Continuously transfer trace data to Tracealyzer using a stream port such as J-Link RTT, TCP/IP etc.
Recommended: Capture your first trace with Snapshot
Snapshot tracing is the simplest way to verify that TraceRecorder is working. It stores the latest trace data in target RAM using the RingBuffer stream port.
Need long-running or live traces?
Use Streaming instead.
Snapshot
Run → Halt → Save Snapshot → Open in Tracealyzer
Ensure the trcStreamPort_RingBuffer.c is copied into your project (should already be if you followed instructions above)
Set the trace buffer size and select the ringbuffer mode in trcConfig.h. This minimal configuration will allow you to capture essential trace data without overwhelming your system resources.
TRC_CFG_STREAM_PORT_BUFFER_SIZEdecides the size of the trace buffer that is stored in RAM. A larger buffer stores more trace history but uses more RAM. Start with the default/recommended value of 10240 bytes and increase it if you need a longer trace.TRC_CFG_STREAM_PORT_RINGBUFFER_MODEcan be set to
-
TRC_CFG_STREAM_PORT_RINGBUFFER_MODE_OVERWRITE_WHEN_FULLfor continuously recordingTRC_CFG_STREAM_PORT_RINGBUFFER_MODE_STOP_WHEN_FULLfor stopping when the buffer is full
After your application has run, halt the target and store the RingBuffer content to your host. Instructions for how to achieve this in an easy manner may be found under “Capture Your First Trace” below.
Streaming
Run → Continously Capture in Tracealyzer → Stop
Streaming reduces the limitation imposed by the target’s RAM because trace data is continuously transferred to the host. The practical trace length and reliability still depend on the transport and its available bandwidth. To setup streaming you will:
- Start by selecting a method for your data streaming
Streaming method Typical use J-Link RTT Debug probe TCP/IP Network-connected target ITM ARM Cortex-M + debugger Other stream ports See stream-port documentation - Update the stream port configuration in config/trcConfig.h to match your desired streaming solution.
- Ensure your target settings are matched in Tracealyzer application.
Step 3: Trace Capture
Capture Your First Trace
Snapshot
- VS Code
- STM32CubeIDE
- GDB or Eclipse
- Renesas e2 studiot
- IAR Embedded Workbench for Arm
- Lauterbach TRACE32
- Other Application Notes
Streaming
Opening the Trace
A successful trace should show recorded task execution, interrupts and other system events in the timeline.
If the trace is empty or doesn’t open correctly, see Troubleshooting.
Using Your Trace
-
Task scheduling — See when tasks execute, block and resume.
-
CPU usage — Identify tasks consuming significant CPU time.
-
Timing — Find long execution times and unexpected delays.
-
Interrupts — Understand how interrupts affect task execution.
-
User events — Correlate trace data with application-specific behavior and custom events/logs. All synchronized into one execution timeline.
To learn more about using Tracealyzer, see Tracealyzer Features and Capabilities.
Troubleshoot Your Bare Metal Trace
Check the Setup Before Capturing Again
Start with a Bare Metal application that builds and runs, a working target connection, and Tracealyzer installed on your host. Then follow the checks below for the symptom you see.
Build Fails After Adding TraceRecorder
Hardware-Port or Version Error
Trace File Is Empty
Snapshot Stops Too Soon
Streaming Data Does Not Arrive
Enhance Your Tracing Skills
Unlock deeper insights by exploring advanced trace analysis techniques and optimize your Bare Metal applications.
Solutions
Tracealyzer
Detect
DevAlert
Try
Buy
Resources
Blog
White Papers
Application Notes
Videos
Company
Management
Press
Contact
Security Policy
Events
Stay in Touch
Copyright © 2026 Percepio AB. All rights reserved. | Privacy Policy | Licensing | Terms and Conditions | Cookie Settings
