The main objective of the tool is to log the behaviour of an RTEMS application executing in a board or in a simulator. The data collected is then presented in a graphical mode , providing an easy way to observe the execution flow of the RTEMS system when running an RTEMS Application . This tool can help in the detection of eventual flaws as well as possible optimizations to the system by monitoring both temporal (e.g. which task is executing at a given point in time) and spatial changes (e.g. memory usage) in the system. The development of this tool arises from the fact that crucial systems (by example: space systems) present a high-level of criticality in consequence it is vital that the temporal behaviour of an RTEMS application is study in detail.
Some of the information that is monitored regards the:
-
Task execution flow;
-
System calls;
-
Software interrupts;
-
Hardware interrupts;
-
Memory usage;
-
CPU usage;
The RTEMS Timeline Tool was developed in such a way, that it can log all the moments that happen the following events (if they are selected to be monitored by the tool):
-
Schedulability analysis (Task execution flow);
-
RTEMS API calls (System calls);
-
Interrupt Generation (Hardware and Software interrupts);
-
Configuration Tables:
-
RTEMS Workspace address;
-
RTEMS Workspace size;
-
RTEMS Workspace free memory;
-
Heap size (given to libc);
-
-
Stack and Memory usage;
In particular, all the RTEMS API primitives can be monitored, including, for example:
-
rtems_semaphore_obtain;
-
rtems_semaphore_release;
-
rtems_semaphore_create;
-
rtems_semaphore_delete;
-
etc;
or even,
-
rtems_task_create;
-
rtems_task_delete;
-
rtems_task_suspend;
-
rtems_task_wake_after;
-
rtems_task_wake_when;
-
etc;
It is also possible to monitor the interrupt occurrence and internal scheduling events , such as:
- thread priority changes (due for example, to semaphore inherence/ceiling protocols);
- thread insertion in the ready queue;
- thread removal from the ready queue;
- thread context switch;
- thread begin;
- etc;
Other context dependent parameters, such as:
- thread maximum stack size;
- dynamic memory allocation;
can also be monitored.