Express Logic Embedded RTOS Solutions Express Logic RTOS Embedded Solutions Partners ThreadX RTOS Real-Time Preemption Threshold TCP/IP White Papers
The Real Time Operating Systems Solutions Company - RTOS
Express Logic RTOS Embedded Solutions
ThreadX
FileX
NetX
PegX
USBX
ThreadX and Embedded RTOS Training
Files to Download
Files to Download

 

The ThreadX C-SPY Plugin

Introduction to the ThreadX Debugger Plugin for the IAR
Embedded Workbench C-SPY Debugger

The advanced ThreadX RTOS awareness plugin for C-SPY is delivered and installed as a part of the ARM® IAR Embedded Workbench IDE. The plugin facilitates rapid understanding of what is happening in the ThreadX application, including information about all application threads and any other application ThreadX object. In addition, the advanced ThreadX plugin for C-SPY provides thread-specific breakpoint and debug services.

Overview

To be able to use the plugin, you must do this: Start the ARM® IAR Embedded Workbench. and choose Project>Options. Select the C-SPY Debugger category and choose ThreadX from the RTOS support combo box. Click OK.

Installation

Introduction to the Plugin

The plugin introduces the following elements in the C-SPY user interface.

In the View menu, it installs a number of entries corresponding to the various types of ThreadX-specific windows that can be opened by the plugin.

In the Breakpoints dialog box, available by choosing Edit>Breakpoints, a new option is enabled for making standard breakpoints thread-specific.

It installs a new menu, named ThreadX, with entries for various RTOS-specific commands, in particular thread-related stepping commands.

It installs a new toolbar with buttons for commands from the ThreadX menu.

Windows

The RTOS plugin introduces seven new debugger windows. You can right-click in most of the windows to display a context menu where you can change display format (hexadecimal/decimal). If you select the Color changes command, all window updates are highlighted.

The Thread List Window

This is arguably the single most important window of the RTOS plugin.

The Thread List Window

This window shows a list of all threads created by the current application (by calls to tx_thread_create) and some items pertaining to their current state. The currently active thread is indicated by an arrow in the first column (and typically by a state of RUNNING in the State column). The order of the threads is that of the _tx_thread_created_ptr.

You can examine a particular thread by double-clicking on the corresponding row in the window. All debugger windows (Watch, Locals, Register, Call Stack, Source, Diassembly etc) will then show the state of the program from the point of view of the thread in question. A thread selected in this way is indicated in the Thread window by a different color (for the moment, a subdued blue color).

The last row of the Thread window is always NO TASK. Double-clicking on this row makes the debugger show the state of the program as it currently is (that is, as it would be shown without an RTOS plugin), in effect always following the active task.

Note that if a task has been selected by double-clicking, the debugger will show the state of that particular task until another task (or NO TASK) is selected, even if execution is performed by or in another task. For example, if task A is currently active (RUNNING) and you double-click on task B, which is READY, you will see information about the suspended task B. If you now perform a single-step by pressing F10, the active task (A) will perform a single-step, but since you are focused on task B, not much will actually visibly change.

Inspector Windows

The seven other windows display RTOS status information of various types. These windows are formatted but passive displays of various internal RTOS data structures.

Timers

Timers

Queues

Queues

Semaphores

Semaphores

Mutexes

Mutexes

Event Flag Groups

Event Flag Groups

Byte Pools

Byte Pools

It is possible to get a detailed description on a specific byte pool. Right-click on a row and select the Show Details command from the context menu. The Details window is displayed. You can double-click any other row to select another byte pool while the Details window is open.

Details Window

Details Window

Block Pools

Block Pools

Breakpoints

The presence of the RTOS plugin enables a task condition for all standard breakpoints, as shown below:

Breakpoints

Clicking the Task? button brings up the following dialog box:

Task Dialog Box

You can make a breakpoint thread-specific by clicking the check-box and selecting a task from the drop-down list. Note: The drop-down list only shows threads which have been created at the time. Note also: If the code at the breakpoint is only ever executed by one specific thread, there is no need to make the breakpoint thread- specific.

Stepping

If more than one task can execute the same code, there is a need both for task-specific breakpoints and for task-specific stepping. For example, consider some utility function, called by several different tasks. Stepping through such a function to verify its correctness can be quite confusing without task-specific stepping. Standard stepping usually works as follows (slightly simplified): When you invoke a step command, the debugger computes one or more locations where that step will end, sets corresponding temporary breakpoints and simply starts execution. When execution hits one of the breakpoints, they are all removed and the step is finished.

Now, during that brief (or not so brief) execution, basically anything can happen in an application with multiple tasks. In particular, a task switch may occur and another task may hit one of the breakpoints before the original task does. It may appear that you have performed a normal step, but now you are watching another task. The other task could have called the function with another argument or be in another iteration of a loop, so the values of local variables could be totally different.

Hence, there is a need for task-specific stepping. The step commands on the ThreadX menu and on the corresponding toolbar behave just like the normal stepping commands, but they will make sure that the step does not finish until the original task reaches the step destination. This is the ThreadX menu:

ThreadX Menu

And this is the ThreadX toolbar:

ThreadX Toolbar

Important note: In the standard debugger menu, there are no Instruction Step Over and Instruction Step commands. This is because the standard Step Over and Step Into commands are context sensitive, stepping by statement and function call when a source window is active, and stepping by instruction when the Disassembly window is active. The RTOS stepping commands are unfortunately not context sensitive; you must choose which kind of step to perform.
 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ThreadX Embedded RTOS Home Page ThreadX Embedded RTOS Inquiry ThreadX RTOS Embedded News