EUROStrace is an additional EUROScope Plug-in dedicated to collecting and displaying target system specific events, as well as details about their nature. EUROS real-time operating system provides an event buffer used to collect data about both system events (e.g. task switch, calling system services) and user/application specific events. Each event is associated with one or more EUROS objects or application trace. These objects can be either kernel objects like tasks, semaphores or interrupt events representing N- or S- conditions in EUROS. All collected events data contain a time stamp with resolution depending on the underlying hardware.
At various places within EUROS, special instructions are added for additional processing. When executed, those instructions record the current timestamp and additional current values in an event table.
The EUROS version with trace support can among others record the following events:
- EUROS system calls
- Task switches
- User events
Through a configuration option offered by EUROScope the user chooses the type of events to be traced. The running speed of the system is slightly reduced by the trace mechanism because for the occurrence of each event, an entry in the internal trace table is recorded. The size of this table is defined during initialization of the application and is limited only by available memory. The size of a single trace entry is between 14 bytes (16 bit architecture) and 18 bytes (32 bit architecture).
When stopping the application, the content of the trace table is transferred to the PC and processed by the EUROScope. The figure below contains a typical diagram showing the timeline of all recorded events.
Using EUROStrace it's easy to find problems caused by the time-related behavior of the application. These often include:
- Deadlocks when waiting for system resources.
- High-priority tasks, threads or I/O operations that unexpectedly use up large amounts of CPU time and block out other tasks.
Since the time line has a high resolution (the smallest unit is a EUROS timer tick), it is possible to measure time intervals very precisely. For example, the time required by a thread to process an interrupt event can be easily determined.