Real Time Kernel Awareness

Inspecting Kernel Data Structures

189

Microcontrollers Debugger Manual

Inspecting Kernel Data Structures

To allow the debugger to display the data structures of the operating system, the
corresponding symbol information has to be available. This is the case when using SOOM
System/REM. When another kernel is used its source code must to be available and must
be compiled. However, if only the object code is available, the needed symbol information
can be generated in the following way:
The kernel data structures of interest must be described using ANSI-C language, as
shown in Listing 5.2.
Listing 5.2 Kernel Data Structure Description
typedef struct PD {
int status;
struct PD *next;
long regs[6];
} PD;
This is an example of the definition of a simple task descriptor.
Variables can be collected in a structure and must be assigned to a segment (for
example, OS_DATA shown in Listing 5.3).
Listing 5.3 OS_DATA Structure
#pragma DATA_SEG OS_DATA
struct {
PD *readyList; /* list of tasks ready to be executed */
char filler[6]; /* unimportant variables */
int processes; /* total number of tasks */
PD processes[10]; /* the 10 possible tasks */
} OS_DATA;
Define this structure so that it fits the same layout as the operating system. It might be
necessary to introduce filler variables to get the correct alignment.
The linker must place this segment to the correct address by using the PRM file shown in
Listing 5.4:
Listing 5.4 Linker PRM File
NAMES ... rtk.o+ ... END
SECTIONS
...
RTK_SEC = NO_INIT 0x1040 TO 0x1F80;
...