The SCVD interpreter can access symbol information from the user application that is loaded into the debugger. This symbol information is used to:
- generate address for reading memory content from the target system with the elements read and readlist
- map member offsets in the element typedef using the attribute import.
Symbols can be referenced with:
- test.c/MySymbol - to access a static symbol in a specific file.
- MySymbol - to access a public symbol.
This symbol information is used to read the content of static and public variables.
The SCVD interpreter supports the scalar and complex data types. Complex data types such as struct and enum are defined using the element typedef. The element read accesses variables or arrays from the target system. The element readlist accesses linked lists or dynamic arrays from the target system.
Example:
The following example code is an excerpt from the FreeRTOS source code. The CMSIS-RTOS compliant FreeRTOS implementation is available as a Software Pack.
C Code:
...
static volatile BaseType_t xSchedulerRunning = pdFALSE;
static volatile UBaseType_t uxPendedTicks = ( UBaseType_t ) 0U;
static volatile TickType_t xTickCount = ( TickType_t ) 0U;
...
...
static TaskHandle_t xTimerTaskHandle = NULL;
static QueueHandle_t xTimerQueue = NULL;
...
.SCVD file XML elements:
<component_viewer schemaVersion="0.1" xmlns:xs="http://www.w3.org/2001/XMLSchema-instance" xs:noNamespaceSchemaLocation="Component_Viewer.xsd">
<component name="MyFirstComponent" version="0.0.1"/> <!-- name and version of the component -->
<objects>
<object name="FreeRTOS Object">
<var name="i" type="uint32_t" value="0"/>
<var name="j" type="uint32_t" value="0"/>
<var name="sp" type="uint32_t" value="0"/>
<read name="xSchedulerRunning" type="uint32_t" symbol="tasks.c/xSchedulerRunning"/>
<read name="uxPendedTicks" type="uint32_t" symbol="tasks.c/uxPendedTicks"/>
<read name="xTickCount" type="uint32_t" symbol="tasks.c/xTickCount"/>
<read name="xTimerTaskHandle" type="uint32_t" symbol="timers.c/xTimerTaskHandle"/>
<read name="xTimerQueue" type="uint32_t" symbol="timers.c/xTimerQueue"/>
</object>
</objects>
</component_viewer>