threadx Snapshot
  • Industry Leader
  • Over 5.4 Billion Deployments
  • Small-footprint
  • Fast, deterministic execution
  • Simple, easy-to-use
  • Advanced technology
  • Multicore support (AMP & SMP)
  • Memory Protection via ThreadX Modules
  • Fastest Time-To-Market
  • Royalty Free
  • Full, highest-quality source code
  • Pre-certified by TUV and UL to IEC 61508 SIL 4, IEC 62304 Class C, ISO 26262 ASIL D, UL/IEC 60730, UL/IEC 60335, UL 1998, and EN 50128 SW-SIL 4
  • MISRA-C:2004 and MISRA C:2012 Compliant
  • Supports most popular architectures
    (see below)
  • Supports most popular tools
ThreadX Architecture Support
  • ARM
    • ARM7, ARM9, ARM11
    • Cortex-M, Cortex-R, Cortex-A
    • Cortex-Axx 64-bit
  • AndesCore
  • Analog Devices
    • Blackfin BF5xx, BF6xx, BF7xx
    • SHARC
  • Cadence
    • Xtensa
    • Diamond
  • CEVA
    • TeakLite-III
  • EnSilica
    • eSi-RISC
  • NXP
    • ARM (LPC, i.MX, Kinetis)
    • 68K
    • Coldfire
    • PowerPC
  • Imagination
    • MIPS32 4Kx, 24Kx, 34Kx, 1004K
    • microAptiv, interAptiv, proAptiv
    • M-Class
  • Intel
    • ARM (Cyclone SOC, Arria 10 SOC)
    • NIOSII
    • x86PM
  • Microchip
    • ARM (SAM)
    • AVR32
    • PIC24
    • PIC32
  • Renesas
    • ARM (Synergy, RZ)
    • H8/300H
    • RX
    • SH
    • V850
  • Silicon Labs
    • EFM32
  • ST
    • STM32
  • Synopsis
    • ARC 600, 700
    • ARC EM, ARC HS
  • Texas Instruments
    • ARM (Tiva-C, Sitara, OMAP)
    • C5xx
    • C6xx
  • Xilinx
    • ARM (Zynq)
    • MicroBlaze
    • PowerPC

IAR C-SPY

The ThreadX C-SPY Plugin

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

The advanced, best-of-class 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, execution profile information, performance metrics, and all ThreadX objects created by the application. In addition, the advanced ThreadX plugin for C-SPY provides thread-specific breakpoint and debug services.

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

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, select the Plugins tab and then check the ThreadX box. Click OK.

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

Introduction to the ThreadX 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.

Windows

The RTOS plugin introduces fourteen 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.

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

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 the color gree (and typically by a state of Running in the State column). The threads are ordered in the display in the same order they were created.

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, Disassembly, 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 larger black font.

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.

Inspector Windows

The thirteen other windows display RTOS information of various types. These windows are formatted, passive displays of various internal RTOS data structures and information.

Execution Profile

When enabled by the application in the ThreadX project settings (see Express Logic’s Execution Profile Kit for details), the C-SPY debugger presents the Execution Profile information collected by ThreadX during execution. To display the Execution Profile information, simply select ThreadX -> Execution Profile from the main menu and you will see information similar to the following:

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

Execution Profile information provides an overview of Idle, Interrupt and Overall Thread execution, as well as execution of each specific thread.

Thread Performance Metrics

When enabled by the application in the ThreadX project settings, tx_port, or tx_user.h (please refer to the ThreadX_User_Guide.pdf for details), the C-SPY debugger presents the Thread Performance Metrics collected by ThreadX. To display the Thread Performance Metrics, simply select ThreadX -> Thread Performance Metrics from the main menu and you will see information similar to the following:

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

Communication Performance Metrics

When enabled by the application in the ThreadX project settings, tx_port, or tx_user.h (please refer to the ThreadX_User_Guide.pdf for details), the C-SPY debugger presents the Communication Performance Metrics collected by ThreadX. To display the Communication Performance Metrics, simply select ThreadX -> Communication Performance Metrics from the main menu and you will see information similar to the following

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

Synchronization Performance Metrics

When enabled by the application in the ThreadX project settings, tx_port, or tx_user.h (please refer to the ThreadX_User_Guide.pdf for details), the C-SPY debugger presents the Synchronization Performance Metrics collected by ThreadX. To display the Synchronization Performance Metrics, simply select ThreadX -> Synchronization Performance Metrics from the main menu and you will see information similar to the following:

Timer Performance Metrics

When enabled by the application in the ThreadX project settings, tx_port, or tx_user.h (please refer to the ThreadX_User_Guide.pdf for details), the C-SPY debugger presents the Timer Performance Metrics collected by ThreadX. To display the Timer Performance Metrics, simply select ThreadX -> Timer Performance Metrics from the main menu and you will see information similar to the following:

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

Memory Performance Metrics

When enabled by the application in the ThreadX project settings, tx_port, or tx_user.h (please refer to the ThreadX_User_Guide.pdf for details), the C-SPY debugger presents the Memory Performance Metrics collected by ThreadX. To display the Memory Performance Metrics, simply select ThreadX -> Memory Performance Metrics from the main menu and you will see information similar to the following:

Timers

When selected via ThreadX -> Timers from the main menu, the C-SPY debugger presents information about the current status of all timers created by the application in a format similar to the following:

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

Queues

When selected via ThreadX -> Queues from the main menu, the C-SPY debugger presents information about the current status of all message queues created by the application in a format similar to the following:

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

Semaphores

When selected via ThreadX -> Semaphores from the main menu, the C-SPY debugger presents information about the current status of all semaphores created by the application in a format similar to the following:

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

Mutexes

When selected via ThreadX -> Mutexes from the main menu, the C-SPY debugger presents information about the current status of all mutexes created by the application in a format similar to the following:

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

Event Flag Groups

When selected via ThreadX -> Event Flag Groups from the main menu, the C-SPY debugger presents information about the current status of all event flag groups created by the application in a format similar to the following:

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

Byte Pools

When selected via ThreadX -> Byte Pools from the main menu, the C-SPY debugger presents information about the current status of all byte pools created by the application in a format similar to the following:

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

Block Pools

When selected via ThreadX -> Block Pools from the main menu, the C-SPY debugger presents information about the current status of all block pools created by the application in a format similar to the following:

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

Breakpoints

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

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

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

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

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.