Traces is a Research group on Architectures and Compilers for Embedded Systems

Tools

PapaBench

Description

PapaBench is a real-time embedded benchmark derivated from the software of a GNU-license UAV, called Paparazzi. Formerly driving a bi-processor AVR architecture, the application C sources have been adapted to compile under several other platforms.

The structure of the full application is described in AADL providing also the map between AADL threads and the C functions. The AADL description comes with different flavors managing the kindness of the interrupts threads or the preemption properties of the threads.

To download PapaBench, just select version below :

Contact: casse@irit.fr



FAQ

PapaBench crashes when it is compiled and runned on my workstation. Why ?

This is an absolutely right effect. PapaBench has been extracted from a real application embedded in a UAV. As is, it is written to run on a AtMegaXXX (AVR processed based) platform with real sensors and actuators (depending upon the embedding small model plane).

The problem comes from the fact that your workstation (possibly x86 or other) does not handle interrupts in the same way as the original architecture and does not provides the required input (and possibly read them from invalid memory addresses).

PapaBench is only provided to be used in static analysis or to be simulated in an environment emulating behaviour of interrupts and of sensor input.

Is there any way to execute PapaBench out of the original platform ?

The original Paparazzi system may be compiled to run on any platform (even though it has been designed to run on an AVR-based AtMegaXXX SOC). Yet, running it requires the original execution environment to be simulated.

The original Paparazzi package provides a way to simulate the software on your native machine using a recorded scenario to simulate input. Yet, the code performing access to the sensors / actuator and installing interrupts is replaced by code compatible with the simulation. The result program is very distant from the original code and should not fit the needs of static analyses or program simulation.

A best solution is to run PapaBench on a simulator which provides the ability to simulate the inputs and outputs from a given scenario. This may require to move the input/ouput address space to another memory place: to do it, just fix the __SFR_OFFSET constant in avr/include/avr/sfr_defs.h.