xSCOPE config file¶
An xSCOPE config file is an XML file, with a suffix of .xscope.
It is used for the configuration of xSCOPE, such as to enable printing over xSCOPE, or to configure probes to send data to the host. Config files are the preferred mechanism to configure xSCOPE, however it is also possible to use the xSCOPE target library.
Here is an example:
<xSCOPEconfig ioMode="basic" enabled="true">
<Probe name="Tile0 Result" type="CONTINUOUS" datatype="UINT" units="mV" enabled="true"/>
<Probe name="Tile1 i" type="CONTINUOUS" datatype="UINT" units="mV" enabled="true"/>
<Probe name="Tile1 Accumulation" type="CONTINUOUS" datatype="UINT" units="mV" enabled="true"/>
</xSCOPEconfig>
Here is a more complex example:
<xSCOPEconfig ioDest="link" ioMode="basic" enabled="true">
<Probe name="Probe 1" type="DISCRETE" datatype="UINT" units="Bytes" enabled="true"/>
<Probe name="Probe 2" type="DISCRETE" datatype="UINT" units="Bytes" enabled="false"/>
<Probe name="Really Interesting Probe 3" shortname="PROBE3" type="DISCRETE" datatype="UINT" units="Bytes" enabled="true"/>
<Module name="Ethernet" id="ETH">
<Probe name="Packet Count" type="DISCRETE" datatype="UINT" units="Bytes" enabled="true"/>
</Module>
</xSCOPEconfig>
If compiling and linking separately, the xSCOPE config files must be provided to XCC at every stage, since they are used both to autogenerate definitions at compile time, and provide functionality at link time.
Multiple xSCOPE config files can be provided to xcc, but they must be provided in the same order for every xcc command, and care must be taken: later files can override information specified in earlier files. As good practice, avoid specifying the same probe or module more than once, and only specify the root node’s attributes in a single file.
xscopeconfig element¶
The xscopeconfig element is required. It specifies the top level configuration for xSCOPE.
Attributes are:
iomodeConfigure write syscalls (such as
printforfwrite) to be sent over the much faster xSCOPE transport rather than over JTAG. Can be set to:Value
Description
noneUse JTAG for write syscalls (slow)
basicUse xSCOPE for write syscalls.
timedUse xSCOPE for write syscalls, and prepend each write with a timestamp. Note while this is a useful shortcut to get timestamps while printf debugging, it causes all writes, including writes to files to be prepended with a timestamp. This may not be desirable.
Note that if xSCOPE is configured for io, then
xrun --xscopemust be specified when using xrun/xgdb or the output will not be shown. It is not possible to attach to an already running program and see the xSCOPE output: it must be freshly loaded for the session with xrun/xgdb.enabledMay be set to
trueto enable orfalseto disable xSCOPE. If a.xscopefile is not provided, or this attribute is not specified, then xSCOPE is disabled by default.
probe elements¶
The probe elements are optional, depending on the desired number of
named xSCOPE “probes”. Each probe element represents a single probe
channel which can be used to send reports to the host.
Attributes are:
nameSet to a string representing the name of the probe. This can consist of alphanumeric characters, spaces and underscores.
typeMay be set to:
Value
Description
STARTSTOPEvent which gets a ‘start’ and a ‘stop’ representing a block of execution (e.g a function call).
CONTINUOUSA probe which will receive continuous data which can be interpolated.
DISCRETEA probe which will receive data which should not be interpolated.
STATEMACHINESimilar to
DISCRETE- a probe which represents different states of a state machine, and each report represents moving to a new state.datatypeMay be set to:
Value
Description
NONENo data. The event will be reported but there is no associated data.
UINTUnsigned bit integer (1, 2, 4 or 8 bytes)
INTSigned 32 bit integer (1, 2, 4 or 8 bytes)
FLOATFloating point number (4 or 8 bytes)
unitsSet to a string representing the units of measurement for the probe
enabledMay be set to
trueto enable the probe orfalseto disable it. Defaults tofalse.shortnameThe name of the define which will be used for the auto-generated define name. See Auto-generated header file for more detail. This defaults to a fully capitalised, underscored version of
name. This can consist of alphanumeric characters and underscores, as it becomes a macro name available in the C program.moduleName of the module to add this probe to, which will affect the name of the define visible in C code. It is preferred to not use this attribute, and instead group module probes together in
<Module>elements.
module element¶
The module element can be used to group several related probes together. Probe elements can
be children of the module element.
The auto-generated probe defines will be prefixed with MODULE_ID_ where MODULE_ID
is the contents of the id attribute.
nameSet to a string representing the name of the probe.
idSet to a string to prefix the autogenerated probe define names in the C header. See Auto-generated header file for more detail.
Auto-generated header file¶
The xSCOPE config file is used to automatically generate some preprocessor definitions for the purpose of referencing the probes from code.
These definitions can be used with the xSCOPE target library.
These preprocessor definitions are accessible by #include <xscope.h>.
The definition name is of the form SHORTNAME or MODULE_ID_SHORTNAME where SHORTNAME
is the value of the shortname attribute of the probe element, and MODULE_ID is the contents of the id attribute
of the module element if the probe is part of a module.
The probe definition values are equal to the unique ID of the probe, or -1 if the probe is disabled.
To see the autogenerated file, xcc -save-temps can be used. The auto-generated
file will be dumped to the current directory as xscope_probes.h.
For example, the earlier example autogenerates the following output:
// This file is autogenerated.
#ifndef __XSCOPE_PROBES_H__
#define __XSCOPE_PROBES_H__
#define PROBE_1 (0)
#define PROBE_2 (-1)
#define PROBE3 (1)
#define ETH_PACKET_COUNT (2)
#endif // __XSCOPE_PROBES_H__