<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta />
    <article-meta>
      <title-group>
        <article-title>Towards one Model Interpreter for Both Design and Deployment</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Valentin Besnard</string-name>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Matthias Brun</string-name>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Philippe Dhaussyy</string-name>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Fre´de´ric Jouault</string-name>
        </contrib>
        <contrib contrib-type="author">
          <string-name>David Olivierz</string-name>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Ciprian Teodorovy TRAME team</string-name>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Angers</string-name>
        </contrib>
        <contrib contrib-type="author">
          <string-name>France</string-name>
        </contrib>
        <contrib contrib-type="author">
          <string-name>firstname.lastname@eseo.fr yLab-STICC UMR CNRS</string-name>
        </contrib>
        <contrib contrib-type="author">
          <string-name>ENSTA Bretagne</string-name>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Brest</string-name>
        </contrib>
        <contrib contrib-type="author">
          <string-name>France</string-name>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Rennes</string-name>
        </contrib>
        <contrib contrib-type="author">
          <string-name>France</string-name>
        </contrib>
        <contrib contrib-type="author">
          <string-name>david.olivier@davidson.fr</string-name>
        </contrib>
      </contrib-group>
      <abstract>
        <p>-Executable modeling of complex embedded systems more complex the interpretation of diagnosis results. On the is essential for bug discovery and safety validation at early design other hand, it is relatively difficult to prove the equivalence stages. A relatively large number of tools enable early design between all these models because each one is defined in terms dmioadgneloisnistoaanfdormvaalildsaettitoinng.bHyo wtreavnesrf,otrhmisintrganasnfodrmaantaiolynziinngdutchees of a different language with different semantics. In summary, a semantic gap rendering diagnosis more difficult. Moreover, on we notice that the root cause of these problems is the use the way to deployment, executable models are transformed into of multiple definitions of the language semantics defined by low level executable code. Existence of this second transformation transformations towards different formalisms. similarly renders diagnosis of the deployed system more difficult, oafndcrailtsiocailncsryesatesmessv:aalidnaotniontrcivoisatls oeqfuthiveaalepnpcreoarcehlaitniotnheneceodnstetxot To solve these issues, we propose an approach based on be established between the formally analyzed model and the a single semantics definition that overcomes the equivalence executable code. In this paper, we introduce a first step towards issue and guarantees the absence of semantic gap. Transaddressing these problems with a bare-metal UML interpreter, formations that modify the semantics should be avoided to which uniquely defines the executable semantics for both design preserve the uniqueness of this definition. In fact, our solution oaunrd dinetpelropyrmeteenrt.oTfofefrascialitdaitaegtnhoesdisiaignnteorsfisacaendthvraoluidgahtiownhpicrhoctehses consists of using a unified semantics for both design and semantics is shared with diagnosis tools. The tools rely on this deployment. This unique definition has been implemented in interface to interact with (observe and control) the executing a bare-metal interpreter of models. To ensure executability of model either locally on a PC during early design phases or these models, the selected semantics should be complete and remotely on the target embedded system after deployment. We without inconsistencies. For this interpreter, we have chosen itlolutswtroateemobuerdadpepdrotaacrhgeotsn (aatr9a1ilswamay7slevaenldcrsotsmsi3n2g),sytostewmhipcohrtwede tUML [2, 3], a textual notation for a subset of UML, that connect a remote high-level simulator for interactive execution fits these requirements. This interpreter enables to execute control and exhaustive state-space exploration. software applications at a higher level of abstraction. While Index Terms-UML, Model Interpretation, Model Verification, this approach solves semantic issues, a lack of diagnosis tools Embedded Systems. appears. To fix this problem, our idea is to share the unified semantics of the language with diagnosis tools (e.g., simulator, I. INTRODUCTION debugger). A generic communication interface enables the connection of these tools to the interpreter to observe and control model execution.</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>The new generation of embedded systems and CPS (Cyber</title>
      <p>
        Physical Systems) provides more powerful features to meet
emerging needs in numerous fields (e.g., automotive, avionics,
robotics, smart cities). With the development of IoT (Internet
of Things), they now tend to be connected and to collaborate
with other systems on networks. This increasing complexity
creates more difficulties for engineers to check and ensure
safety, or simply to avoid bugs. Not only are behaviors of these
systems more uncertain but they are also more vulnerable to
cyber attacks, due to their network connections. To prevent
the introduction of bugs during development of such systems,
there is a need to execute, simulate, and verify models.
In the industrial world, the common approach [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ] consists
of two transformations: one that converts the design model
into various models (e.g., formal models) used by diagnosis
tools during the design phase, and another one that generates
deployable code from the user model.
      </p>
      <p>This common approach has two main issues. On the one
hand, the semantic gap created by transformations renders</p>
    </sec>
    <sec id="sec-2">
      <title>Experimentations performed on a railway level crossing sys</title>
      <p>tem show that our approach is on the way towards feasibility.
Our UML execution engine can be deployed on a PC (to be
used during the design phase) as well as on two embedded
targets: at91sam7s and stm32. To control the interpreter, a
communication link has been developed to connect different
diagnosis tools. For the moment, we have a simulator that
enables users to observe and control the execution of the
model. We illustrate this feature by computing the exhaustive
state-space of the level crossing model.</p>
    </sec>
    <sec id="sec-3">
      <title>The paper is organized as follows. Section II presents our</title>
      <p>approach and our main contribution: a bare-metal UML model
interpreter. In Section III, we show results of our
experimentations on the level crossing example. Finally, related works
are discussed in Section IV and we conclude in Section V.</p>
    </sec>
    <sec id="sec-4">
      <title>II. DESIGN OF A BARE-METAL UML INTERPRETER</title>
      <sec id="sec-4-1">
        <title>A. Approach Overview</title>
      </sec>
    </sec>
    <sec id="sec-5">
      <title>Our approach introduces an interpreter of UML models</title>
      <p>implemented in C language, which has the specificity to use
a single definition of the semantics for both the design phase
and the execution. To perceive the innovative aspect of this
technique, it is important to understand the common approach
used by engineers to develop software systems (Figure 1).
First of all, engineers model the system using the semantics
definition of dedicated modeling languages (e.g., UML, fUML,
SysML). At this stage, many diagrams are typically produced
to describe the system under multiple points of view. Some of
them are dedicated to system execution while others are used
for alternative purposes (e.g., testing, engineers understanding
of the system). Diagrams required for execution are
transformed into code using manual or automatic code generation.
This transformation may change the semantics definition of the
model and creates a semantic gap between the design model
and the code. Hence, it is more difficult to identify an element
of the design model in code and conversely. In parallel of this
first activity, the design model is also transformed into other
formalisms to be used by diagnosis tools for different purposes
(e.g., simulation, exploration, formal verification). With this
second transformation, a new issue appears. It is now more
difficult to prove the equivalence between these models used
for diagnosis and validation, and the deployed code.</p>
      <p>
        Our approach (Figure 2) consists of modeling a system
using the tUML language, that offers a clear and complete
definition of a model without inconsistencies [
        <xref ref-type="bibr" rid="ref2 ref3">2, 3</xref>
        ]. With tUML,
three views of the system are needed to define an executable
model: class diagram, state machines, and composite structure
diagram. Then, this model is serialized to C to be loaded into
the interpreter. The serialization is applied only to elements
needed for the execution (i.e., runtime data and runtime code)
to adapt the syntax of the model without changing the
semantics. This operation is a direct transliteration of each element
of the model into C language as struct initializers, nothing
more. Afterwards, this executable model can be executed by
the model interpreter. One thing we still need to establish is
the determinism of the interpreter execution (i.e., the absence
of undefined behaviors [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ]). This could be validated with static
or dynamic analysis of the interpreter code.
      </p>
      <p>This interpreter solves the three main drawbacks of the
common approach. Firstly, the problem of equivalence between
the design model and the code has been overcome thanks to
the single definition of the semantics. Secondly, the semantic
gap has been removed because no transformation, which
alters or changes the semantics, is used. Thirdly, this unique
definition facilitates the understanding of diagnosis results in
terms of design model concepts. This solution has also other
advantages. It may contribute to save time during the design
phase by modeling only needed points of view of the system.
Like code generation, the coding step requires no effort and
the risk to introduce bugs is reduced. In our approach, this
goal will be addressed by simulating and deploying the model
directly on the interpreter embedded on the target.</p>
      <p>
        Nevertheless, the execution of a DSL like tUML, introduced
in [
        <xref ref-type="bibr" rid="ref2 ref3">2, 3</xref>
        ], creates another issue. Indeed, a lack of diagnosis
tools (e.g., simulator, model-checker, debugger, or profiler)
can be noticed for some specific languages. Rather than
implementing an ad-hoc toolbox for each DSL, a solution
(Figure 2) is to link the interpreter with existing tools [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ]. Our
model interpreter has been designed to be controlled remotely
through a simple and generic API. This feature enables control
of model interpretation either step by step or in a
back-intime way [
        <xref ref-type="bibr" rid="ref6 ref7 ref8">6–8</xref>
        ]. This interface is exactly what is needed
to connect a model-checker, like LTSmin [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ] or tools from
ENSTA Bretagne [
        <xref ref-type="bibr" rid="ref10 ref11">10, 11</xref>
        ], for formal properties verification.
      </p>
      <sec id="sec-5-1">
        <title>B. Interpreter Design</title>
      </sec>
    </sec>
    <sec id="sec-6">
      <title>The model interpreter introduced in this paper has been</title>
      <p>implemented in C, a low level and general purpose language
perfectly suited for embedded systems. The goal of this
interpreter is to define a unique semantics definition that will
be used for both design and deployment, and to execute models
according to this semantics.</p>
      <p>
        We will now give an overview of the interpreter architecture
(Figure 3) rather than a detailed description that exceeds the
scope of this article. The Interpreter class is composed of a
collection of ActiveObjects and of the user model conformant
to the tUML semantics. tUML basically corresponds to a
subset of the class, state machines, and composite structure
diagrams from UML. This last diagram defines a composite
class, called SUS (for System Under Study), which goal is
to specify the part played by each ActiveObject as well as
links between them. Every ActiveObject has a state machine
that defines its behavior, the current state of its state machine,
and the list of all fireable transitions from its current state.
It can compute fireable transitions, and fire a transition to
make its current state evolve. An ActiveObject also owns an
EventPool to store occurrences of events that it receives. The
EventPool is currently designed as a bits field, which offers
some advantages (e.g., a bounded representation of events)
and defines a particular execution semantics. This specific
semantics can be modified by using other data structures (e.g.,
FIFO) to implement different features (e.g., storage of multiple
occurrences of a given event, preservation of events reception
order). The EventPool has three principal operations: one to
signal an event, one to consume an event, and the last one
to check if an event has occurred. An ActiveObject also has
a Store where values of its attributes are stored. The Store
has only two operations: one to assign a value to an attribute,
and another to get the value of an attribute. To have a generic
representation of attributes, we used a generic pointer, which
points to the suitable value of the attribute, and an integer to
store the size of its data type. Furthermore, an ActiveObject
needs to evaluate guards on transitions of its state machine.
The class GuardEval has been designed for this purpose.
Currently this class involves Flex and Bison to parse guard
expressions, but future works will improve that evaluation
using offline preprocessing to reduce the memory footprint
and enhance execution performances. The last class is the
EffectBehavior that executes effects associated to transitions
when one of them is fired. Two kinds of effects are available
yet with the simplified version of the ABCD language [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ] used
here. It is possible to send events to another ActiveObject or
to assign a value to an attribute.
      </p>
      <p>This interpreter has been designed to be portable on
different targets. At the moment, this interpreter can be executed
on a PC but is also supported on two embedded targets:
at91sam7s and stm32. Other targets could be easily added
because we designed the interpreter to be linked with
targetspecific libraries of the chosen target at build time. This
specificity helps to fit embedded systems requirements, which
involve limited computation and memory resources.</p>
      <sec id="sec-6-1">
        <title>C. Communication Interface</title>
      </sec>
    </sec>
    <sec id="sec-7">
      <title>To solve the problem of the lack of diagnosis tools with</title>
      <p>DSLs, we take into account the possibility to connect the
interpreter with existing tools (e.g., simulator, debugger,
profiler, model-checker). Our idea is to provide a generic API to
be able to control remotely the execution of the interpreter.
This simple interface is composed of four requests. Get
configuration: collects the current configuration (memory
state) of the interpreter. A configuration is composed of the
current state, the EventPool and values of attributes, of each
ActiveObject. Set configuration: loads a configuration as
the current memory state of the interpreter. Get fireable
transitions: gets transitions from ActiveObject instances that
have their trigger and their guard satisfied in the current state.
A fireable transition is identified by its id and the ActiveObject
to which it belongs. Fire a transition: fires a fireable
transition of an ActiveObject. When firing, the event of the
trigger is consumed, the current state is updated, and effects
attached to this transition are processed.</p>
      <p>
        With only four requests, this simple interface offers several
possibilities. Indeed, the model interpreted can be executed
step by step. A specific execution path can be chosen with
the ”Get fireable transitions” request. This feature enables to
check a property or find a bug in a specific path. However, the
most powerful functionality is the ability to make back-in-time
execution [
        <xref ref-type="bibr" rid="ref6 ref7 ref8">6–8</xref>
        ]. The ”Set configuration” request can place or
replace the interpreter in any configuration. This feature can
be useful for debugging if we want to come back on previous
configurations but also for the exploration of the state-space.
      </p>
      <p>This generic API gives the possibility to use several kinds
of tools in an easy way. Indeed, to connect an existing tool,
you just need to add a TCP client and to implement the
communication interface. In our point of view, it is better to
use existing tools than implementing ad-hoc tools. One reason
is that existing tools have been tested, used and approved for
many years. Engineers are familiar with these tools and no
formation will be required to teach them how to use them.</p>
    </sec>
    <sec id="sec-8">
      <title>Our interpreter can support multiple kinds of connections</title>
      <p>
        even if only TCP connection for PC, and RS232 connection
for at91sam7s and stm32 have been developed for the moment.
With a strategy pattern [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ], only the code of the chosen
connection is compiled and loaded in the target, which contributes
to reduce memory footprint. A new kind of connection can
be easily added by implementing the connection interface.
The interpreter should only know how to open, read, write
and close the connection. It is important for us to offer this
functionality because embedded boards have sometimes few,
and specific kinds of serial ports available. Furthermore, to
avoid implementing a serial communication within an existing
tool, we have created a little application that converts TCP data
frames into serial data frames. With this converter, only a TCP
client plugin needs to be implemented into a tool so that it can
control the interpreter over any serial connection.
      </p>
    </sec>
    <sec id="sec-9">
      <title>III. A UML MODEL ON AN EMBEDDED TARGET</title>
      <sec id="sec-9-1">
        <title>A. Case Study</title>
        <p>To illustrate our approach we use a level crossing system,
presented in Figure 4. A level crossing is a system built at
the intersection of a railroad and a road. It is responsible for
ensuring the safety of all road users during the passage of the
train. In this case study, a UML model of a level crossing
has been designed (Figure 5 and Figure 6). The Controller
controls the activation of the RoadSign (e.g, lights, alarm)
and the closure of the Gate according to signals received
from TrackCircuits. TrackCircuits are sensors able to detect
the Train on the railroad. Each one sends a signal when the
Train is detected and another one when the detection ends. The
level crossing counts three TrackCircuits: one for the entrance,
one for the approach, and one for the exit of the level crossing.</p>
        <p>
          All these objects are active, so their behaviors are described
by state machines. A state machine is composed of states
linked together with directed transitions. Transitions can be
fired to change the state of an ActiveObject. A transition
is fireable if the event associated with its trigger has been
received by this state machine and if its guard is satisfied.
When a transition is fired, its effect is processed. The language
used to parse guards defined as OpaqueExpressions and effects
defined as OpaqueBehaviors is a simplified version of ABCD
[
          <xref ref-type="bibr" rid="ref3">3</xref>
          ]. The current version of the interpreter supports simple
boolean expressions for guards as well as the sending of events
and assignment of variables for effects. This is sufficient to
execute a model and make ActiveObjects interact together.
        </p>
        <p>We will now describe behaviors of ActiveObjects (Figure 6)
to better understand these interactions. The Train state machine
triggers sequentially the detection of the entrance TrackCircuit
(tcEntrance), of the approach TrackCircuit (tcApproach) and
of the exit TrackCircuit (tcExit). This linear state machine
considers the passage of a single train on the level crossing.
TrackCircuits state machines have only two states Detection
and NoDetection that transmit signals to the controller at the
beginning and at the end of train detection. State machines
for tcApproach and tcExit are similar to the state machine
of tcEntrance presented on Figure 6. The Controller state
machine has the most important role in the system. When
the train is detected by tcEntrance, it is in charge of sending
a signal to switch on lights of the roadSign. Then, it sends a
signal to close the gate when the train begins to be detected
by tcApproach. At the end of the detection, we consider that
the train is passing until the detection of tcExit, which sends a
signal to open the gate. Finally, a signal is send to switch off
lights of the roadSign when the train quits the detection zone
of tcExit, and the controller returns in its idle state. The state
machine of the RoadSign can alternate between Inactive and
Active states thanks to switchOn and switchOff signal events.
In the same way, the state machine of the Gate is driven by
open and close events to go in the Opened or Closed state.</p>
        <p>This example model is not connected with its real
environment because the link of the interpreter with inputs and
outputs of the embedded board have not been implemented
yet. However, the level crossing of our case study has sensors
(TrackCircuits) and actuators (RoadSign and Gate) that have
been integrated to the design model. This enables to simulate
the level crossing example as if it was executing on the real
system, which uses inputs and outputs of the board. In fact,
only the controller will need to be deployed on the real system
because other entities are active elements of the environment.</p>
      </sec>
      <sec id="sec-9-2">
        <title>B. Deployment and Results</title>
        <p>The level crossing case study has been deployed on our
interpreter of UML models. This experimentation has been
made on a PC with a Linux operating system, and on both
at91sam7s and stm32 targets without operating systems
(baremetal). The level crossing model has been designed using
tUML before being serialized into Eclipse UML, and finally
into C. It has been successfully executed on the interpreter
by firing the first fireable transition on active objects in
turns. Without any optimizations, the memory footprint of the
binary executable file containing the model, the interpreter,
and specific libraries of the board for the stm32 is only 131
ko, which is sufficiently small to be embedded.</p>
        <p>We have also connected two diagnosis tools to control
remotely the execution of the level crossing model. A
simulator has been developed to explore some execution paths
of this model. It can be connected to the interpreter using
either a TCP connection or a serial connection. Indeed, a
serial port communication using a UART peripheral of the
PC was developed to communicate directly with the embedded
interpreter for debug purpose but this functionality has become
useless with the communication converter. The simple user
interface (Figure 7) provides four buttons to apply each request
of the API and directly control the model execution. This
gives the possibility to the user to get information on the
execution and to make the model evolve by firing transitions.
To observe the model execution, the simulator has also the
ability to decode the configuration and to display its content
in an understandable way for humans.</p>
        <p>Another diagnosis tool has also been connected to the model
interpreter for state-space exploration. For this purpose, the
communication unit developed in the simulator has been
integrated into this state-space explorer. This tool has computed
the state-space of the level crossing model using a breadth first
search algorithm connected with the interpreter via the TCP
diagnosis interface. This results in a state-space constituted of
1,825 different configurations linked to one another with 5,793
transitions (This state-space exploration has been performed
with 3 events preloaded in the EventPool of the controller:
entranceBegin, exitBegin, and exitEnd.). The associated
statespace graph shown in Figure 8 gives an overview of the extent
of this model exploration.</p>
        <p>To sum up, these experimentations show the ability of our
interpreter to be remotely controlled by diagnosis tools for
simulation and exploration purposes.</p>
      </sec>
    </sec>
    <sec id="sec-10">
      <title>IV. RELATED WORK</title>
      <p>
        Some generic tools are able to build an interpreter, and
execute models designed with a given DSL. GEMOC studio
is an Eclipse plugin that integrates a language workbench,
and a modeling workbench to define a DSML as well as
design models conforming to this language. This environment
can be used to build a model interpreter, and other diagnosis
tools (e.g., a graphical model animator, a trace manager) [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ].
Another example is the K framework [
        <xref ref-type="bibr" rid="ref14">14</xref>
        ], an executable
semantics framework based on rewriting rules. It can be
used to define programming languages or create tools. The
possibility to target a large number of languages is a significant
advantage of these frameworks. However, this also induces a
lack of performance because the implementation is not
specifically adapted to the application. Contrary to these tools, our
interpreter has been designed in a classical way but with the
goal to fit requirements of embedded systems. Our approach
takes also into account that the interpreter has to be connected
to existing diagnosis tools rather than generated new ones
for each DSML. Some alternative methods (e.g., [
        <xref ref-type="bibr" rid="ref1 ref15 ref16 ref17">1, 15–17</xref>
        ])
focus on a semantics definition based on state machines. The
transformation of these diagrams into intermediate formalisms
like EHA enables the direct execution of these state machines.
These tools are mainly used for simulation [
        <xref ref-type="bibr" rid="ref18">18</xref>
        ], exploration
[
        <xref ref-type="bibr" rid="ref19">19</xref>
        ] and model-checking [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ] purposes. However, they do
not defined a generic interface of communication like our
interpreter and it is not possible to control their execution on an
embedded target. The key point of our approach is the use of a
single semantics definition, which fixes the equivalence issue
between design model and code. This could also be achieved
[
        <xref ref-type="bibr" rid="ref10 ref11">10, 11</xref>
        ] to verify formal properties directly on models
exusing verified compilers or interpreters (e.g., the CompCert
ecuted by the interpreter on embedded boards. We are also
C compiler [
        <xref ref-type="bibr" rid="ref20">20</xref>
        ], and Jitk [
        <xref ref-type="bibr" rid="ref21">21</xref>
        ]). The formal language Coq
interested in interfacing other diagnosis tools for several
enables to check and certify formal properties of programming
purposes: monitoring, debugging, and profiling.
languages. Correctness of generated or interpreted code is
formally proven. It ensures this way the equivalence of the
design model with the code. However, this kind of tools is not
widely used yet due to its complexity.
      </p>
      <p>
        Another essential problem for the execution of models is
the lack of tools after deployment. This issue has not been
completely addressed yet. For UML, some simulators and
interpreters begin to appear without being widely used at the
moment. For other DSLs, only generic frameworks or the use
of a design pattern dedicated for monitoring [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ] are able to
generate this kind of tools. We differentiate our interpreter by
the use of a generic interface to connect it with existing tools.
      </p>
      <p>
        Numerous related works have also been achieved on real
time virtual machines (VMs) [
        <xref ref-type="bibr" rid="ref22 ref23 ref24 ref25">22–25</xref>
        ]. Several concepts used
by researchers on this topic have been applied to DSL
execution engines. All these VMs interpret bytecode, so one
important difference is that our model interpreter provides a
higher level of abstraction. Some of these VMs have been
implemented using specific languages (e.g., Este´rel [
        <xref ref-type="bibr" rid="ref26">26</xref>
        ]). In
comparison with our interpreter, UML is more adapted to
model systems. Furthermore, UML is widely used during the
design phase of systems in the industrial world. Using the
same language for the design phase and the code is better
because no semantic gap is created. Virtual machines for
sensor networks (e.g., Mate´ [
        <xref ref-type="bibr" rid="ref27">27</xref>
        ], and Mote runner [
        <xref ref-type="bibr" rid="ref28">28</xref>
        ]) have
similarities with our work even if our approach is more focused
on industrial applications with both sensors and actuators.
Nevertheless, VMs for sensors networks face several issues
especially on communication speed and execution that we will
also need to solve for making our interpreter scalable.
      </p>
    </sec>
    <sec id="sec-11">
      <title>V. CONCLUSION</title>
      <p>In this paper, we have introduced an interpreter of UML
models with the specificity to use a single semantics definition
for both the design phase and the deployment. This approach
eliminates the problem of the equivalence between models,
and the semantic gap created by model transformations. The
use of tUML enables to define complete executable models
that can be directly executed on the interpreter by serializing
the model into C language. A first step to solve the lack of
diagnosis toolboxes for DSLs has been made with the
implementation of a generic communication interface that enables
the use of existing tools. This enables to control remotely the
execution of the interpreter step by step or in a back-in-time
way. We illustrate this functionality by implementing a simple
simulator that communicates with the interpreter running on
an embedded board. This simulator can be used to simulate
a model and to explore some execution paths. We have also
confirmed that we can explore a full state-space.</p>
    </sec>
    <sec id="sec-12">
      <title>Future work will focus on linking this engine with the</title>
      <p>
        LTSmin [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ] model-checker and tools from ENSTA Bretagne
      </p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [1]
          <string-name>
            <given-names>G.</given-names>
            <surname>Pinte</surname>
          </string-name>
          <article-title>´r and I. Majzik, “</article-title>
          <source>Program Code Generation based on UML Statechart Models,” Periodica Polytechnica</source>
          , vol.
          <volume>47</volume>
          , no.
          <issue>3-4</issue>
          , pp.
          <fpage>187</fpage>
          -
          <lpage>204</lpage>
          ,
          <year>2003</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [2]
          <string-name>
            <given-names>F.</given-names>
            <surname>Jouault</surname>
          </string-name>
          and
          <string-name>
            <given-names>J.</given-names>
            <surname>Delatour</surname>
          </string-name>
          , “
          <article-title>Towards Fixing Sketchy UML Models by Leveraging Textual Notations: Application to Real-Time Embedded Systems,”</article-title>
          <source>in OCL</source>
          <year>2014</year>
          ,
          <string-name>
            <given-names>A. D.</given-names>
            <surname>Brucker</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            <surname>Dania</surname>
          </string-name>
          , G. Georg, and M. Gogolla, Eds., vol.
          <volume>1285</volume>
          ,
          <string-name>
            <surname>Valencia</surname>
          </string-name>
          , Spain, Sep.
          <year>2014</year>
          , pp.
          <fpage>73</fpage>
          -
          <lpage>82</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [3]
          <string-name>
            <given-names>F.</given-names>
            <surname>Jouault</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            <surname>Teodorov</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Delatour</surname>
          </string-name>
          ,
          <string-name>
            <given-names>L. Le</given-names>
            <surname>Roux</surname>
          </string-name>
          , and
          <string-name>
            <given-names>P.</given-names>
            <surname>Dhaussy</surname>
          </string-name>
          , “
          <article-title>Transformation de mode`les UML vers Fiacre, via les langages interme´diaires tUML et</article-title>
          ABCD,”
          <article-title>Ge´nie logiciel</article-title>
          , vol.
          <volume>109</volume>
          , p.
          <fpage>xx</fpage>
          ,
          <source>Jun</source>
          .
          <year>2014</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [4]
          <string-name>
            <given-names>J.</given-names>
            <surname>Regher</surname>
          </string-name>
          , “
          <article-title>A guide to undefined behaviours in c</article-title>
          and c++,”
          <year>2010</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [5]
          <string-name>
            <given-names>Z.</given-names>
            <surname>Drey</surname>
          </string-name>
          and
          <string-name>
            <given-names>C.</given-names>
            <surname>Teodorov</surname>
          </string-name>
          , “
          <article-title>Object-oriented design pattern for dsl program monitoring</article-title>
          ,”
          <source>in Proceedings of SLE 2016</source>
          . New York, NY, USA: ACM,
          <year>2016</year>
          , pp.
          <fpage>70</fpage>
          -
          <lpage>83</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [6]
          <string-name>
            <given-names>E.</given-names>
            <surname>Bousse</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Corley</surname>
          </string-name>
          ,
          <string-name>
            <given-names>B.</given-names>
            <surname>Combemale</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Gray</surname>
          </string-name>
          , and
          <string-name>
            <given-names>B.</given-names>
            <surname>Baudry</surname>
          </string-name>
          , “
          <article-title>Supporting efficient and advanced omniscient debugging for xdsmls,”</article-title>
          <source>in Proceedings of SLE</source>
          <year>2015</year>
          , New York, USA,
          <year>2015</year>
          , pp.
          <fpage>137</fpage>
          -
          <lpage>148</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [7]
          <string-name>
            <given-names>J.</given-names>
            <surname>Corley</surname>
          </string-name>
          ,
          <string-name>
            <given-names>B. P.</given-names>
            <surname>Eddy</surname>
          </string-name>
          , E. Syriani, and
          <string-name>
            <given-names>J.</given-names>
            <surname>Gray</surname>
          </string-name>
          , “
          <article-title>Efficient and scalable omniscient debugging for model transformations</article-title>
          ,
          <source>” Software Quality Journal</source>
          , vol.
          <volume>25</volume>
          , no.
          <issue>1</issue>
          , pp.
          <fpage>7</fpage>
          -
          <lpage>48</lpage>
          ,
          <year>Mar 2017</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [8]
          <string-name>
            <given-names>S. V.</given-names>
            <surname>Mierlo</surname>
          </string-name>
          ,
          <string-name>
            <given-names>Y. V.</given-names>
            <surname>Tendeloo</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Mustafiz</surname>
          </string-name>
          , and
          <string-name>
            <given-names>B.</given-names>
            <surname>Barroca</surname>
          </string-name>
          , “
          <article-title>Debugging parallel devs</article-title>
          ,”
          <year>2014</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          [9]
          <string-name>
            <given-names>G.</given-names>
            <surname>Kant</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Laarman</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Meijer</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Pol</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Blom</surname>
          </string-name>
          , and T. Dijk, “
          <article-title>Ltsmin: High-performance language-independent model checking</article-title>
          ,”
          <source>in Proceedings of the 21st International Conference on Tools and Algorithms for the Construction and Analysis of Systems - Volume</source>
          <volume>9035</volume>
          . New York, NY, USA: Springer-Verlag New York, Inc.,
          <year>2015</year>
          , pp.
          <fpage>692</fpage>
          -
          <lpage>707</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          [10]
          <string-name>
            <given-names>C.</given-names>
            <surname>Teodorov</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P.</given-names>
            <surname>Dhaussy</surname>
          </string-name>
          , and
          <string-name>
            <given-names>L.</given-names>
            <surname>Le</surname>
          </string-name>
          <string-name>
            <surname>Roux</surname>
          </string-name>
          , “
          <article-title>Environment-driven reachability for timed systems</article-title>
          ,”
          <source>International Journal on Software Tools for Technology Transfer</source>
          , vol.
          <volume>19</volume>
          , no.
          <issue>2</issue>
          , pp.
          <fpage>229</fpage>
          -
          <lpage>245</lpage>
          ,
          <year>Apr 2017</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          [11]
          <string-name>
            <given-names>C.</given-names>
            <surname>Teodorov</surname>
          </string-name>
          ,
          <string-name>
            <given-names>L. Le</given-names>
            <surname>Roux</surname>
          </string-name>
          ,
          <string-name>
            <given-names>Z.</given-names>
            <surname>Drey</surname>
          </string-name>
          , and
          <string-name>
            <given-names>P.</given-names>
            <surname>Dhaussy</surname>
          </string-name>
          , “
          <article-title>Past-free[ze] reachability analysis: reaching further with dag-directed exhaustive statespace analysis</article-title>
          ,
          <source>” Software Testing, Verification and Reliability</source>
          , vol.
          <volume>26</volume>
          , no.
          <issue>7</issue>
          , pp.
          <fpage>516</fpage>
          -
          <lpage>542</lpage>
          ,
          <year>2016</year>
          , stvr.
          <volume>1611</volume>
          .
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          [12]
          <string-name>
            <given-names>E.</given-names>
            <surname>Gamma</surname>
          </string-name>
          ,
          <article-title>Design patterns: elements of reusable object-oriented software</article-title>
          .
          <source>Pearson Education India</source>
          ,
          <year>1995</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          [13]
          <string-name>
            <given-names>B.</given-names>
            <surname>Combemale</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Deantoni</surname>
          </string-name>
          ,
          <string-name>
            <given-names>O.</given-names>
            <surname>Barais</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Blouin</surname>
          </string-name>
          ,
          <string-name>
            <given-names>E.</given-names>
            <surname>Bousse</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            <surname>Brun</surname>
          </string-name>
          ,
          <string-name>
            <given-names>T.</given-names>
            <surname>Degueule</surname>
          </string-name>
          , and
          <string-name>
            <given-names>D.</given-names>
            <surname>Vojtisek</surname>
          </string-name>
          , “
          <article-title>A Solution to the TTC'15 Model Execution Case Using the GEMOC Studio,” in 8th Transformation Tool Contest</article-title>
          . l'Aquila, Italy: CEUR,
          <year>2015</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          [14]
          <string-name>
            <given-names>G.</given-names>
            <surname>Ros</surname>
          </string-name>
          <article-title>¸u and</article-title>
          <string-name>
            <surname>T. F. S</surname>
          </string-name>
          <article-title>¸ erba˘nu¸ta˘, “An overview of the K semantic framework</article-title>
          ,
          <source>” Journal of Logic and Algebraic Programming</source>
          , vol.
          <volume>79</volume>
          , no.
          <issue>6</issue>
          , pp.
          <fpage>397</fpage>
          -
          <lpage>434</lpage>
          ,
          <year>2010</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          [15]
          <string-name>
            <given-names>T.</given-names>
            <surname>Schattkowsky</surname>
          </string-name>
          and
          <string-name>
            <given-names>W.</given-names>
            <surname>Muller</surname>
          </string-name>
          , “
          <article-title>Transformation of uml state machines for direct execution</article-title>
          ,”
          <source>in Proceedings of the 2005 IEEE Symposium on Visual Languages and Human-Centric Computing</source>
          . Washington, DC, USA: IEEE Computer Society,
          <year>2005</year>
          , pp.
          <fpage>117</fpage>
          -
          <lpage>124</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          [16]
          <string-name>
            <given-names>G.</given-names>
            <surname>Pinte</surname>
          </string-name>
          <article-title>´r and I. Majzik, “</article-title>
          <source>Automatic Code Generation Based on Formally Analyzed UML Statechart Models,” in Proceedings of the FORMS-2003</source>
          Conference,
          <string-name>
            <given-names>G.</given-names>
            <surname>Tarnai</surname>
          </string-name>
          and E. Schnieder, Eds. Budapest, Hungary: L H´armattan, May
          <volume>15</volume>
          -16
          <year>2003</year>
          , pp.
          <fpage>45</fpage>
          -
          <lpage>52</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          [17]
          <string-name>
            <given-names>E.</given-names>
            <surname>Cariou</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            <surname>Ballagny</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Feugas</surname>
          </string-name>
          , and
          <string-name>
            <given-names>F.</given-names>
            <surname>Barbier</surname>
          </string-name>
          , “
          <article-title>Contracts for model execution verification</article-title>
          ,”
          <source>in Proceedings of the 7th European Conference on Modelling Foundations and Applications</source>
          . Berlin, Heidelberg: Springer-Verlag,
          <year>2011</year>
          , pp.
          <fpage>3</fpage>
          -
          <lpage>18</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          [18]
          <string-name>
            <given-names>A.</given-names>
            <surname>Kirshin</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Dotan</surname>
          </string-name>
          ,
          <article-title>and</article-title>
          <string-name>
            <given-names>A.</given-names>
            <surname>Hartman</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A UML</given-names>
            <surname>Simulator</surname>
          </string-name>
          <article-title>Based on a Generic Model Execution Engine</article-title>
          . Springer Berlin Heidelberg,
          <year>2007</year>
          , pp.
          <fpage>324</fpage>
          -
          <lpage>326</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref19">
        <mixed-citation>
          [19]
          <string-name>
            <given-names>D.</given-names>
            <surname>Riehle</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Fraleigh</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Bucka-Lassen</surname>
          </string-name>
          ,
          <article-title>and</article-title>
          <string-name>
            <given-names>N.</given-names>
            <surname>Omorogbe</surname>
          </string-name>
          , “
          <article-title>The architecture of a uml virtual machine,”</article-title>
          <source>in Proceedings of OOPSLA '01</source>
          . New York, NY, USA: ACM,
          <year>2001</year>
          , pp.
          <fpage>327</fpage>
          -
          <lpage>341</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref20">
        <mixed-citation>
          [20]
          <string-name>
            <given-names>X.</given-names>
            <surname>Leroy</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A. W.</given-names>
            <surname>Appel</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Blazy</surname>
          </string-name>
          , and G. Stewart, “
          <article-title>The CompCert Memory Model</article-title>
          , Version 2,
          <string-name>
            <surname>”</surname>
            <given-names>INRIA</given-names>
          </string-name>
          ,
          <source>Research Report 7987, Jun</source>
          .
          <year>2012</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref21">
        <mixed-citation>
          [21]
          <string-name>
            <given-names>X.</given-names>
            <surname>Wang</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Lazar</surname>
          </string-name>
          ,
          <string-name>
            <given-names>N.</given-names>
            <surname>Zeldovich</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Chlipala</surname>
          </string-name>
          , and
          <string-name>
            <given-names>Z.</given-names>
            <surname>Tatlock</surname>
          </string-name>
          , “
          <article-title>Jitk: A trustworthy in-kernel interpreter infrastructure</article-title>
          ,”
          <source>in Proceedings of the 11th USENIX Conference on Operating Systems Design and Implementation</source>
          . Berkeley, CA, USA: USENIX Association,
          <year>2014</year>
          , pp.
          <fpage>33</fpage>
          -
          <lpage>47</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref22">
        <mixed-citation>
          [22]
          <string-name>
            <given-names>J.</given-names>
            <surname>Auerbach</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D. F.</given-names>
            <surname>Bacon</surname>
          </string-name>
          ,
          <string-name>
            <given-names>B.</given-names>
            <surname>Blainey</surname>
          </string-name>
          , P. Cheng, M. Dawson,
          <string-name>
            <given-names>M.</given-names>
            <surname>Fulton</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Grove</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Hart</surname>
          </string-name>
          , and
          <string-name>
            <given-names>M.</given-names>
            <surname>Stoodley</surname>
          </string-name>
          , “
          <article-title>Design and implementation of a comprehensive real-time java virtual machine,”</article-title>
          <source>in Proceedings of the 7th ACM &amp;Amp; IEEE International Conference on Embedded Software</source>
          . New York, NY, USA: ACM,
          <year>2007</year>
          , pp.
          <fpage>249</fpage>
          -
          <lpage>258</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref23">
        <mixed-citation>
          [23]
          <string-name>
            <given-names>A.</given-names>
            <surname>Armbruster</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Baker</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Cunei</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            <surname>Flack</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Holmes</surname>
          </string-name>
          ,
          <string-name>
            <given-names>F.</given-names>
            <surname>Pizlo</surname>
          </string-name>
          , E. Pla,
          <string-name>
            <given-names>M.</given-names>
            <surname>Prochazka</surname>
          </string-name>
          , and
          <string-name>
            <given-names>J.</given-names>
            <surname>Vitek</surname>
          </string-name>
          , “
          <article-title>A real-time java virtual machine with applications in avionics,”</article-title>
          <source>ACM Trans. Embed. Comput. Syst.</source>
          , vol.
          <volume>7</volume>
          , no.
          <issue>1</issue>
          , pp.
          <volume>5</volume>
          :
          <fpage>1</fpage>
          -
          <lpage>5</lpage>
          :
          <fpage>49</fpage>
          ,
          <string-name>
            <surname>Dec</surname>
          </string-name>
          .
          <year>2007</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref24">
        <mixed-citation>
          [24]
          <string-name>
            <given-names>J.</given-names>
            <surname>Baker</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Cunei</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            <surname>Flack</surname>
          </string-name>
          ,
          <string-name>
            <given-names>F.</given-names>
            <surname>Pizlo</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Prochazka</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Vitek</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Armbruster</surname>
          </string-name>
          , E. Pla, and
          <string-name>
            <given-names>D.</given-names>
            <surname>Holmes</surname>
          </string-name>
          , “
          <article-title>A real-time java virtual machine for avionics -</article-title>
          an
          <source>experience report,” in Proceedings of the 12th IEEE Real-Time and Embedded Technology and Applications Symposium</source>
          . Washington, DC, USA: IEEE Computer Society,
          <year>2006</year>
          , pp.
          <fpage>384</fpage>
          -
          <lpage>396</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref25">
        <mixed-citation>
          [25]
          <string-name>
            <given-names>D.</given-names>
            <surname>Simon</surname>
          </string-name>
          and
          <string-name>
            <given-names>C.</given-names>
            <surname>Cifuentes</surname>
          </string-name>
          , “
          <article-title>The squawk virtual machine: JavaTMon the bare metal,” in Companion to the ACM SIGPLAN OOPSLA '05 Conference</article-title>
          . New York, NY, USA: ACM,
          <year>2005</year>
          , pp.
          <fpage>150</fpage>
          -
          <lpage>151</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref26">
        <mixed-citation>
          [26]
          <string-name>
            <given-names>B.</given-names>
            <surname>Plummer</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Khajanchi</surname>
          </string-name>
          , and
          <string-name>
            <given-names>S. A.</given-names>
            <surname>Edwards</surname>
          </string-name>
          , “
          <article-title>An esterel virtual machine for embedded systems</article-title>
          ,” in
          <source>Proceedings SLAP '06</source>
          , vol.
          <volume>126</volume>
          , Vienna, Austria,
          <year>2006</year>
          , pp.
          <fpage>912</fpage>
          -
          <lpage>917</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref27">
        <mixed-citation>
          [27]
          <string-name>
            <given-names>P.</given-names>
            <surname>Levis</surname>
          </string-name>
          and
          <string-name>
            <given-names>D.</given-names>
            <surname>Culler</surname>
          </string-name>
          , “Mate´
          <article-title>: A tiny virtual machine for sensor networks,” SIGPLAN Not.</article-title>
          , vol.
          <volume>37</volume>
          , no.
          <issue>10</issue>
          , pp.
          <fpage>85</fpage>
          -
          <lpage>95</lpage>
          , Oct.
          <year>2002</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref28">
        <mixed-citation>
          [28]
          <string-name>
            <given-names>A.</given-names>
            <surname>Caracas</surname>
          </string-name>
          ,
          <string-name>
            <given-names>T.</given-names>
            <surname>Kramp</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Baentsch</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Oestreicher</surname>
          </string-name>
          ,
          <string-name>
            <given-names>T.</given-names>
            <surname>Eirich</surname>
          </string-name>
          ,
          <string-name>
            <surname>and I. Romanov</surname>
          </string-name>
          , “
          <article-title>Mote runner: A multi-language virtual machine for small embedded devices</article-title>
          ,”
          <source>in Proceedings of the 2009 Third International Conference on Sensor Technologies and Applications</source>
          . Washington, DC, USA: IEEE Computer Society,
          <year>2009</year>
          , pp.
          <fpage>117</fpage>
          -
          <lpage>125</lpage>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>