
FreeRTOS+Trace - Uploading the trace data
-----------------------------------------
Percepio AB, Nov. 8, 2012

This document decribes how to upload the trace data from the target system to
FreeRTOS+Trace. For information on how to integrate and enable the recorder 
library in your FreeRTOS project, see the FreeRTOS+Trace User Manual.

FreeRTOS+Trace uses your existing debugger to upload the trace data from the 
chip RAM. This is a plain RAM dump, that is done whenever you want to look at 
the trace buffer contents. This means it works with essentially with any debug 
probe on the market.

Note that hardware-generated trace is not required (or used by) FreeRTOS+Trace. 
We however plan to add support for that in future versions of FreeRTOS+Trace 
and other Tracealyzer products.

Built-in support for Segger J-Link/J-Trace and Atmel SAM-ICE
------------------------------------------------------------
FreeRTOS+Trace v2.3 supports Segger J-Link and J-Link compatible debuggers 
directly, without any debugger IDE involved. Using other debug probes is 
also possible, but requires some extra steps, described below.

If you have a Segger J-Link/J-Trace debug probe or another J-Link compatible 
debug probe, just select 

    "File" menu -> "Upload from <debug probe name>". 

This opens a dialog where you get to enter the memory region where
the recorder data structure is located. Normally you select the entire 
internal RAM according to the datasheet of your MCU, but the exact address
can be found can by inspecting the "RecorderData" struct or the 
"RecorderDataPtr" pointer with your debugger.

Typical values are 0x0, 0x10000000 or 0x20000000 as start address
and 0x10000 or 0x20000 as size (64 KB or 128 KB).

This makes FreeRTOS+Trace reads the chip RAM and locate the trace data. 
Note that this option is only available if a compatible debug probe is found.

J-Link compatible debug probes also include Atmel SAM-ICE and many built-in 
debug interfaces on demonstration/evaluation boards (where there is a USB 
connection directly to the board). Look for a Segger J-Link label on the board.

MemoryLogger extension in Atmel Studio 6
----------------------------------------
Atmel's new MemoryLogger extension provides a superb integration with
FreeRTOS+Trace. Look for "MemoryLogger" in Atmel Gallery, available in 
Atmel Studio and at the Atmel website.

This extension automatically detects the path to FreeRTOS+Trace, if 
installed, and gives you a single-click upload/refresh. You can use it 
while debugging and optionally get an automatic refresh eash time the 
MCU is halted, e.g., on each breakpoint.

Using other development environments and debug probes
-----------------------------------------------------
Most debuggers are able to save the RAM contents to a file. FreeRTOS+Trace 
supports the following common formats:
- Binary (.bin), supporting gdb, J-Link and Renesas HEW.
- Intel Hex (.hex), supporting IAR Embedded Workbench and Atmel Studio (atprogram.exe)
- MCH (.mch), supporting Microchip MPLAB.

When you store the RAM dump, you must also make sure to select the right region, 
i.e., start address and size. The recorder data is stored in a single data 
block, identified by the pointer RecorderDataPtr. 
It is not necessary to match the begin and end of the recorder data, as long as 
it is fully included by the dumped memory region. FreeRTOS+Trace automatically 
finds the trace data in the RAM dump, thanks to special signatures. For chips 
with on-chip RAM only, we therefore recommend to dump the entire RAM. This is 
usually very fast.
For chips with larger amounts of (external) RAM, it is typically possible to 
dump a limited region where the data is typically found.

Using IAR Embedded Workbench for ARM, version 6.3
-------------------------------------------------
In the debugger view, when stopped on a breakpoint:
- Select "Debug" menu, "Memory" submenu, "Save..." (keyboard shortcut: ALT,d,y,s)
- In the Save dialog
	- Zone: Memory
	- Start Adress: 10000000 (for NXP LPC1766 in the demo project)
	- End Adress: 1000FFFF (for NXP LPC1766 in the demo project)
	- File format: Intel Extended
	- Filename: <name>.hex
	- Press "Save" button
You can now open <name>.hex in FreeRTOS+Trace.

To find the right Start and End addresses, check the address of the symbol 
"RecorderData". The addresses does not need to match this symbol exactly, as 
long as the whole data is included.

Using Renesas High-performance Embedded Workshop v4.09
------------------------------------------------------
In the debugger view, when stopped on a breakpoint:
- Select "Debug" menu, "Save Memory..." (keyboard shortcut: ALT,d,a)
- In the Save dialog
	- Format: Binary
	- Filename: <name>.bin
	- Start Address: 00000000 (For RX62N in the demo project)
	- End Address: 0000FFFF (For RX62N in the demo project)
	- Access size: 1
	- Press "Save" button and open <name>.bin in FreeRTOS+Trace.
	
Using Microchip MPLAB v8.86
------------------------------------------------------
- Select "View" -> "File Registers". This shows you the memory contents.
- Make sure "Hex" is selected in the bottom left (instead of "Symbolic"). Hex mode seems to be default.
- Right click in the view and select "Export Table...".
- In the dialog ("Export As"), make sure "Single Column Output" is selected (seems to be default).
- Select start address 0x0000 and make sure the end address is beyond the RecorderData structure. 
  The default values seems to be the whole RAM, so you probably don't need to change this.
- Save as a .mch file and open this file in FreeRTOS+Trace v2.2.4 or later (support for the .mch format was added in v2.2.4).

Using STM32 ST-Link
------------------------------------------------------
- Start "ST-Link Utility"
- Connect to the device and view the device memory.
- Set the view to display the entire RAM, or at least the section containing the RecorderData structure.
- Select "Save as" and choose binary (.bin) or Intel Hex (.hex) format.
- Open the resulting file in FreeRTOS+Trace.

In case you have any question, contact support@percepio.com

Percepio AB
www.percepio.com
