blob: c8ecaec77e38e7add3d69452c306d796850c54ed [file] [log] [blame]
<?xml version="1.0" encoding="iso-8859-1" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!--http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd-->
<html xmlns="http://www.w3.org/1999/xhtml"
>
<head><title>HelloWorld for C</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<meta name="generator" content="TeX4ht (http://www.cse.ohio-state.edu/~gurari/TeX4ht/)" />
<meta name="originator" content="TeX4ht (http://www.cse.ohio-state.edu/~gurari/TeX4ht/)" />
<!-- xhtml,3,next,html -->
<meta name="src" content="etrice-doc.tex" />
<meta name="date" content="2015-07-03 15:56:00" />
<link rel="stylesheet" type="text/css" href="etrice-doc.css" />
</head><body
>
<!--l. 1--><div class="crosslinks"><p class="noindent">[<a
href="etrice-docse8.html" >next</a>] [<a
href="etrice-docse6.html" >prev</a>] [<a
href="etrice-docse6.html#tailetrice-docse6.html" >prev-tail</a>] [<a
href="#tailetrice-docse7.html">tail</a>] [<a
href="etrice-docch2.html#etrice-docse7.html" >up</a>] </p></div>
<h3 class="sectionHead"><span class="titlemark">2.5 </span> <a
id="x11-370005"></a>HelloWorld for C</h3>
<a
id="x11-37001r52"></a>
<h4 class="subsectionHead"><span class="titlemark">2.5.1 </span> <a
id="x11-380001"></a>Scope</h4>
<!--l. 5--><p class="noindent" >In this tutorial you will build your first very simple eTrice model. The goal is to learn the work flow of eTrice and to
understand a few basic features of ROOM. There are some more steps to do in C compared to Java. You will perform the
following steps:
</p><!--l. 9--><p class="noindent" >You will perform the following steps:
</p><ol class="enumerate1" >
<li
class="enumerate" id="x11-38002x1">create a new model from scratch
</li>
<li
class="enumerate" id="x11-38004x2">add a very simple state machine to an actor
</li>
<li
class="enumerate" id="x11-38006x3">create a launch configuration for the C code generator
</li>
<li
class="enumerate" id="x11-38008x4">setup the C environment
</li>
<li
class="enumerate" id="x11-38010x5">generate the source code
</li>
<li
class="enumerate" id="x11-38012x6">run the model
</li>
<li
class="enumerate" id="x11-38014x7">open the message sequence chart</li></ol>
<!--l. 21--><p class="noindent" >Make sure that you have set up the workspace as described in <span
class="ec-lmsso-10">Setting up the Workspace for C</span>.
<a
id="x11-38015r54"></a>
</p>
<h4 class="subsectionHead"><span class="titlemark">2.5.2 </span> <a
id="x11-390002"></a>Create a new model from scratch</h4>
<!--l. 25--><p class="noindent" >Before you can create a new C-model, you have to create a new C project as described in <span
class="ec-lmsso-10">Setting up the Workspace for C</span>
<span
class="ec-lmsso-10">Projects</span>.
</p><ol class="enumerate1" >
<li
class="enumerate" id="x11-39002x1">select the <span
class="ec-lmsso-10">C/C++ </span>perspective
</li>
<li
class="enumerate" id="x11-39004x2">select <span
class="ec-lmsso-10">File-&#x003E;New-&#x003E;C Project </span>from the main menue
</li>
<li
class="enumerate" id="x11-39006x3">name the project <span
class="ec-lmsso-10">HelloWorldC</span>
</li>
<li
class="enumerate" id="x11-39008x4">the project type is <span
class="ec-lmsso-10">Executable / Empty C Project</span>
</li>
<li
class="enumerate" id="x11-39010x5">select the Toolchain for your platform (e.g. <span
class="ec-lmsso-10">MinGW GCC</span>)</li></ol>
<!--l. 36--><p class="noindent" >Your project explorer should look like this:
</p><!--l. 38--><p class="noindent" ><img
src="images/016-HelloWorldC01.png" alt="PIC"
/>
</p><!--l. 40--><p class="noindent" >The next step is to add the model folder: Right click on the new project. Select <span
class="ec-lmsso-10">New-&#x003E;Folder </span>and name it
<span
class="ec-lmsso-10">model</span>.
</p><!--l. 43--><p class="noindent" ><img
src="images/016-HelloWorldC02.png" alt="PIC"
/>
</p><!--l. 45--><p class="noindent" >Add the model file to the folder. Right click on the new folder. Select <span
class="ec-lmsso-10">New-&#x003E;file </span>and name it <span
class="ec-lmsso-10">HelloWorldC.room</span>.
</p><!--l. 48--><p class="noindent" ><img
src="images/016-HelloWorldC03.png" alt="PIC"
/>
</p><!--l. 50--><p class="noindent" >Since the file extension <span
class="ec-lmsso-10">.room </span>is recognized as an Xtext based format, the tool will ask you to add the Xtext nature. Answer
with <span
class="ec-lmsso-10">Yes</span>.
</p><!--l. 52--><p class="noindent" ><img
src="images/016-HelloWorldC04.png" alt="PIC"
/>
</p><!--l. 54--><p class="noindent" >Open the <span
class="ec-lmsso-10">HelloWorld.room </span>file and invoke the content assist with &#x003C;Ctrl&#x003E;+&#x003C;Space&#x003E; and select <span
class="ec-lmsso-10">RoomModel - model</span>
<span
class="ec-lmsso-10">skeleton</span>.
</p><!--l. 56--><p class="noindent" ><img
src="images/016-HelloWorldC041.png" alt="PIC"
/>
</p><!--l. 58--><p class="noindent" >Edit the template parameters by typing the new names and jumping with &#x003C;Tab&#x003E; from name to name.
</p><!--l. 60--><p class="noindent" >The resulting model code should look like this:
</p>
<!--l. 62-->
<div class="lstlisting" id="listing-6"><span class="label"><a
id="x11-39011r1"></a></span><span
class="ec-lmssbx-10x-x-90">RoomModel</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">HelloWorld_Model</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">{</span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x11-39012r2"></a></span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x11-39013r3"></a></span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmssbx-10x-x-90">LogicalSystem</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">LogSys1</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">{</span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x11-39014r4"></a></span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmssbx-10x-x-90">SubSystemRef</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">subSysRef1</span><span
class="ec-lmtt-9">:</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">SubSysClass1</span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x11-39015r5"></a></span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">}</span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x11-39016r6"></a></span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x11-39017r7"></a></span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmssbx-10x-x-90">SubSystemClass</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">SubSysClass1</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">{</span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x11-39018r8"></a></span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmssbx-10x-x-90">ActorRef</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">actorRef1</span><span
class="ec-lmtt-9">:</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">HelloWorldTop</span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x11-39019r9"></a></span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmssbx-10x-x-90">LogicalThread</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">defaultThread</span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x11-39020r10"></a></span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">}</span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x11-39021r11"></a></span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x11-39022r12"></a></span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmssbx-10x-x-90">ActorClass</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">HelloWorldTop</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">{</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">}</span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x11-39023r13"></a></span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x11-39024r14"></a></span><span
class="ec-lmtt-9">}</span>
</div>
<!--l. 79--><p class="noindent" >Now create the file model/HelloWorldC.etphys for the physical model and insert (&#x003C;Ctrl&#x003E;+&#x003C;Space&#x003E;) the code template
<span
class="ec-lmsso-10">PhysicalModel - model skeleton </span>without changes.
</p><!--l. 81--><p class="noindent" >Listing for HelloWorldC.etphys :
</p>
<!--l. 83-->
<div class="lstlisting" id="listing-7"><span class="label"><a
id="x11-39025r1"></a></span><span
class="ec-lmssbx-10x-x-90">PhysicalModel</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">PhysicalModel1</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">{</span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x11-39026r2"></a></span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x11-39027r3"></a></span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmssbx-10x-x-90">PhysicalSystem</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">PhysSys1</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">{</span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x11-39028r4"></a></span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmssbx-10x-x-90">NodeRef</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">nodeRef1</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">:</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">NodeClass1</span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x11-39029r5"></a></span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">}</span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x11-39030r6"></a></span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x11-39031r7"></a></span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmssbx-10x-x-90">NodeClass</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">NodeClass1</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">{</span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x11-39032r8"></a></span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmssbx-10x-x-90">runtime</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">=</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">RuntimeClass1</span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x11-39033r9"></a></span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmssbx-10x-x-90">priomin</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">=</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">-10</span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x11-39034r10"></a></span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmssbx-10x-x-90">priomax</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">=</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">10</span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x11-39035r11"></a></span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmssbx-10x-x-90">DefaultThread</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">PhysicalThread1</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">{</span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x11-39036r12"></a></span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmssbx-10x-x-90">execmode</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">=</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmssbx-10x-x-90">mixed</span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x11-39037r13"></a></span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmssbx-10x-x-90">interval</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">=</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">100</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmssbx-10x-x-90">ms</span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x11-39038r14"></a></span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmssbx-10x-x-90">prio</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">=</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">0</span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x11-39039r15"></a></span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmssbx-10x-x-90">stacksize</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">=</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">1024</span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x11-39040r16"></a></span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmssbx-10x-x-90">msgblocksize</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">=</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">32</span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x11-39041r17"></a></span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmssbx-10x-x-90">msgpoolsize</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">=</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">10</span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x11-39042r18"></a></span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">}</span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x11-39043r19"></a></span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">}</span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x11-39044r20"></a></span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x11-39045r21"></a></span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmssbx-10x-x-90">RuntimeClass</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">RuntimeClass1</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">{</span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x11-39046r22"></a></span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmssbx-10x-x-90">model</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">=</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmssbx-10x-x-90">multiThreaded</span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x11-39047r23"></a></span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">}</span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x11-39048r24"></a></span><span
class="ec-lmtt-9">}</span>
</div>
<!--l. 110--><p class="noindent" >The physical model defines the setup of your nodes with their attributes like threads and mode of execution. In this case we
define one node with one thread.
</p><!--l. 112--><p class="noindent" >The mapping model we will create now defines the mapping (deployment) of the logical elements in the .room model to the
physical elements int the .etphys model. Now create the file model/HelloWorldC.etmap for the mapping model and insert
(Ctrl+Space) the code template <span
class="ec-lmsso-10">MappingModel - model skeleton </span>with some changes (jump with &#x003C;Tab&#x003E; between the
template variables):
</p>
<!--l. 114-->
<div class="lstlisting" id="listing-8"><span class="label"><a
id="x11-39049r1"></a></span><span
class="ec-lmssbx-10x-x-90">MappingModel</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">MappingModel1</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">{</span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x11-39050r2"></a></span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmssbx-10x-x-90">import</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">HelloWorld_Model</span><span
class="ec-lmtt-9">.*</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmssbx-10x-x-90">from</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">"</span><span
class="ec-lmtt-9">HelloWorldC</span><span
class="ec-lmtt-9">.</span><span
class="ec-lmtt-9">room</span><span
class="ec-lmtt-9">"</span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x11-39051r3"></a></span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmssbx-10x-x-90">import</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">PhysicalModel1</span><span
class="ec-lmtt-9">.*</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmssbx-10x-x-90">from</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">"</span><span
class="ec-lmtt-9">HelloWorldC</span><span
class="ec-lmtt-9">.</span><span
class="ec-lmtt-9">etphys</span><span
class="ec-lmtt-9">"</span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x11-39052r4"></a></span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmssbx-10x-x-90">Mapping</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">LogSys1</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">-&#x003E;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">PhysSys1</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">{</span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x11-39053r5"></a></span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmssbx-10x-x-90">SubSystemMapping</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">subSysRef1</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">-&#x003E;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">nodeRef1</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">{</span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x11-39054r6"></a></span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmssbx-10x-x-90">ThreadMapping</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">defaultThread</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">-&#x003E;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">PhysicalThread1</span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x11-39055r7"></a></span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">}</span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x11-39056r8"></a></span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">}</span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x11-39057r9"></a></span><span
class="ec-lmtt-9">}</span>
</div>
<!--l. 126--><p class="noindent" >Now the workspace should look like this:
</p><!--l. 128--><p class="noindent" ><img
src="images/016-HelloWorldC05.png" alt="PIC"
/>
</p><!--l. 1--><p class="noindent" >The ROOM model describes distributed systems on a logical level. In the current version not all elements will be used. But as
prerequisite for further versions the following elements can be defined: </p>
<ul class="itemize1">
<li class="itemize">the <span
class="ec-lmsso-10">LogicalSystem </span>(currently optional)
</li>
<li class="itemize">at least one <span
class="ec-lmsso-10">SubSystemClass </span>(mandatory)
</li>
<li class="itemize">at least one <span
class="ec-lmsso-10">ActorClass </span>(mandatory)</li></ul>
<!--l. 9--><p class="noindent" >The <span
class="ec-lmsso-10">LogicalSystem </span>represents the complete distributed system and contains at least one <span
class="ec-lmsso-10">SubSystemRef</span>. The
<span
class="ec-lmsso-10">SubSystemClass </span>represents an address space (e.g. a Linux process or an image for a micro controller) and
contains at least one <span
class="ec-lmsso-10">ActorRef</span>. The <span
class="ec-lmsso-10">ActorClass </span>is the building block for building the hierachical structure of an
application. A good way to start is to define a top level actor that can be used as structural root within the
subsystem.
</p><!--l. 14--><p class="noindent" >The outline view of the textual ROOM editor shows the main modeling elements in a navigation tree. You can jump to an
element in the textual editor by double clicking the element in the outline view (provided the outline is linked with the
editor).
</p><!--l. 18--><p class="noindent" ><img
src="images/015-HelloWorld02.png" alt="PIC"
/>
<a
id="x11-39058r55"></a>
</p>
<h4 class="subsectionHead"><span class="titlemark">2.5.3 </span> <a
id="x11-400003"></a>Create a state machine</h4>
<!--l. 22--><p class="noindent" >We will implement the Hello World code on the initial transition of the <span
class="ec-lmsso-10">HelloWorldTop </span>actor. Therefore open the state
machine editor by right clicking the <span
class="ec-lmsso-10">HelloWorldTop </span>actor in the outline view and select <span
class="ec-lmsso-10">Edit Behavior</span>.
</p><!--l. 25--><p class="noindent" ><img
src="images/015-HelloWorld03.png" alt="PIC"
/>
</p><!--l. 27--><p class="noindent" >The state machine editor will be opened. Drag and drop an <span
class="ec-lmsso-10">Initial Point </span>from the tool box to the diagram into the top level
state. Drag and drop a <span
class="ec-lmsso-10">State </span>from the tool box to the diagram. Confirm the dialog with <span
class="ec-lmsso-10">ok</span>. Select the <span
class="ec-lmsso-10">Transition </span>in the tool
box and draw the transition from the <span
class="ec-lmsso-10">Initial Point </span>to the State. In the transition property dialog fill in the action code. Be
aware of the different action code in Java and C.
</p>
<hr class="figure" /><div class="figure"
>
<div class="minipage">_________________________________________
_________________________________________&#x00A0; &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0; &#x00A0; <!--l. 36--><p class="noindent" ><span
class="ec-lmssbx-10">action code for Java</span>
</p>
<div class="verbatim" id="verbatim-5">
System.out.println("Hello&#x00A0;World");
</div>
<!--l. 39--><p class="nopar" >
</p></div> &#x00A0; <div class="minipage">_________________________________________________________________&#x00A0; &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0; &#x00A0; <!--l. 45--><p class="noindent" ><span
class="ec-lmssbx-10">action code for C</span>
</p>
<div class="verbatim" id="verbatim-6">
printf("Hello&#x00A0;World\n");
</div>
<!--l. 48--><p class="nopar" >
</p></div>
</div><hr class="endfigure" />
<!--l. 54--><p class="noindent" >The result should look like this:
</p><!--l. 56--><p class="noindent" ><img
src="images/015-HelloWorld04.png" alt="PIC"
/>
</p><!--l. 58--><p class="noindent" >Save the diagram and inspect the model (HelloWorld.room) file. Note that the textual representation was changed after
saving the diagram.
</p>
<hr class="figure" /><div class="figure"
>
<div class="minipage">
______________________________________________
______________________________________________&#x00A0; &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0; &#x00A0; <!--l. 64--><p class="noindent" ><span
class="ec-lmssbx-10">room model for Java </span><br
class="newline" /></p><!--l. 66-->
<div class="lstlisting" id="listing-9"><span class="label"><a
id="x11-40001r1"></a></span><span
class="ec-lmssbx-10x-x-90">RoomModel</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">HelloWorld_Model</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">{</span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x11-40002r2"></a></span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmssbx-10x-x-90">LogicalSystem</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">LogSys1</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">{</span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x11-40003r3"></a></span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmssbx-10x-x-90">SubSystemRef</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">subSysRef1</span><span
class="ec-lmtt-9">:</span><span
class="ec-lmtt-9">SubSysClass1</span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x11-40004r4"></a></span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">}</span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x11-40005r5"></a></span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmssbx-10x-x-90">SubSystemClass</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">SubSysClass1</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">{</span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x11-40006r6"></a></span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmssbx-10x-x-90">ActorRef</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">actorRef1</span><span
class="ec-lmtt-9">:</span><span
class="ec-lmtt-9">HelloWorldTop</span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x11-40007r7"></a></span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmssbx-10x-x-90">LogicalThread</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">defaultThread</span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x11-40008r8"></a></span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">}</span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x11-40009r9"></a></span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmssbx-10x-x-90">ActorClass</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">HelloWorldTop</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">{</span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x11-40010r10"></a></span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmssbx-10x-x-90">Structure</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">{</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">}</span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x11-40011r11"></a></span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmssbx-10x-x-90">Behavior</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">{</span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x11-40012r12"></a></span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmssbx-10x-x-90">StateMachine</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">{</span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x11-40013r13"></a></span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmssbx-10x-x-90">Transition</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">init</span><span
class="ec-lmtt-9">:</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmssbx-10x-x-90">initial</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">-&#x003E;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">state0</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">{</span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x11-40014r14"></a></span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmssbx-10x-x-90">action</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">{</span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x11-40015r15"></a></span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">"</span><span
class="ec-lmtt-9">System</span><span
class="ec-lmtt-9">.</span><span
class="ec-lmtt-9">out</span><span
class="ec-lmtt-9">.</span><span
class="ec-lmtt-9">println</span><span
class="ec-lmtt-9">(\"</span><span
class="ec-lmtt-9">Hello</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">World</span><span
class="ec-lmtt-9">\")</span><span
class="ec-lmtt-9">;</span><span
class="ec-lmtt-9">"</span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x11-40016r16"></a></span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">}</span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x11-40017r17"></a></span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">}</span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x11-40018r18"></a></span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmssbx-10x-x-90">State</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">state0</span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x11-40019r19"></a></span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">}</span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x11-40020r20"></a></span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">}</span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x11-40021r21"></a></span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">}</span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x11-40022r22"></a></span><span
class="ec-lmtt-9">}</span>
</div>
</div> <div class="minipage">
___________________________________________________&#x00A0; &#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0; &#x00A0; <!--l. 95--><p class="noindent" ><span
class="ec-lmssbx-10">room model for C </span><br
class="newline" /></p><!--l. 97-->
<div class="lstlisting" id="listing-10"><span class="label"><a
id="x11-40023r1"></a></span><span
class="ec-lmssbx-10x-x-90">RoomModel</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">HelloWorld_Model</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">{</span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x11-40024r2"></a></span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmssbx-10x-x-90">LogicalSystem</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">LogSys1</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">{</span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x11-40025r3"></a></span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmssbx-10x-x-90">SubSystemRef</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">subSysRef1</span><span
class="ec-lmtt-9">:</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">SubSysClass1</span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x11-40026r4"></a></span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">}</span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x11-40027r5"></a></span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmssbx-10x-x-90">SubSystemClass</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">SubSysClass1</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">{</span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x11-40028r6"></a></span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmssbx-10x-x-90">ActorRef</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">actorRef1</span><span
class="ec-lmtt-9">:</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">HelloWorldTop</span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x11-40029r7"></a></span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmssbx-10x-x-90">LogicalThread</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">defaultThread</span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x11-40030r8"></a></span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">}</span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x11-40031r9"></a></span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmssbx-10x-x-90">ActorClass</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">HelloWorldTop</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">{</span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x11-40032r10"></a></span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmssbx-10x-x-90">Structure</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">{</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">}</span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x11-40033r11"></a></span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmssbx-10x-x-90">Behavior</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">{</span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x11-40034r12"></a></span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmssbx-10x-x-90">StateMachine</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">{</span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x11-40035r13"></a></span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmssbx-10x-x-90">Transition</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">init</span><span
class="ec-lmtt-9">:</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmssbx-10x-x-90">initial</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">-&#x003E;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">state0</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">{</span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x11-40036r14"></a></span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmssbx-10x-x-90">action</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">{</span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x11-40037r15"></a></span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">"</span><span
class="ec-lmtt-9">printf</span><span
class="ec-lmtt-9">(\"</span><span
class="ec-lmtt-9">Hello</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">World</span><span
class="ec-lmtt-9">\\</span><span
class="ec-lmtt-9">n</span><span
class="ec-lmtt-9">\")</span><span
class="ec-lmtt-9">;</span><span
class="ec-lmtt-9">"</span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x11-40038r16"></a></span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">}</span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x11-40039r17"></a></span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">}</span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x11-40040r18"></a></span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmssbx-10x-x-90">State</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">state0</span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x11-40041r19"></a></span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">}</span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x11-40042r20"></a></span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">}</span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x11-40043r21"></a></span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">}</span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x11-40044r22"></a></span><span
class="ec-lmtt-9">}</span>
</div>
</div>
</div><hr class="endfigure" />
<a
id="x11-40045r56"></a>
<h4 class="subsectionHead"><span class="titlemark">2.5.4 </span> <a
id="x11-410004"></a>Create a launch configuration to start the C code generator</h4>
<!--l. 134--><p class="noindent" >Unlike in Java (where the new wizard already created a launch configuration) a launch configuration for the C code generator
must be created manually.
</p><!--l. 137--><p class="noindent" >From the main menu <span
class="ec-lmsso-10">Run </span>or the context menu <span
class="ec-lmsso-10">Run As </span>in the <span
class="ec-lmsso-10">Project Explorer </span>select <span
class="ec-lmsso-10">Run Configurations</span>
.
</p><!--l. 139--><p class="noindent" ><img
src="images/016-HelloWorldC06.png" alt="PIC"
/>
</p><!--l. 141--><p class="noindent" >Within the dialog select <span
class="ec-lmsso-10">e</span><span
class="ec-lmsso-10">Trice</span> <span
class="ec-lmsso-10">C Generator </span>and click the <span
class="ec-lmsso-10">New </span>button to create a new launch configuration.
</p><!--l. 144--><p class="noindent" ><img
src="images/016-HelloWorldC07.png" alt="PIC"
/>
</p><!--l. 146--><p class="noindent" >A new configuration should be created. Name it <span
class="ec-lmsso-10">gen_HelloWorld </span>and add the mapping model <span
class="ec-lmsso-10">HelloWorld.etmap </span>model via
one of the <span
class="ec-lmsso-10">add </span>buttons.
</p><!--l. 149--><p class="noindent" ><img
src="images/016-HelloWorldC08.png" alt="PIC"
/>
</p><!--l. 151--><p class="noindent" >The mapping model is the root model for the code generator.
</p><!--l. 153--><p class="noindent" >To save your launch configuration, select <span
class="ec-lmsso-10">Shared file </span>in the tab <span
class="ec-lmsso-10">Common </span>and add the <span
class="ec-lmsso-10">HelloWorldC </span>project via the <span
class="ec-lmsso-10">Browse</span>
button.
</p><!--l. 156--><p class="noindent" ><img
src="images/016-HelloWorldC10.png" alt="PIC"
/>
</p><!--l. 158--><p class="noindent" >Apply your changes. The new configuration should now exist in your workspace.
</p><!--l. 160--><p class="noindent" ><img
src="images/016-HelloWorldC11.png" alt="PIC"
/>
<a
id="x11-41001r57"></a>
</p>
<h4 class="subsectionHead"><span class="titlemark">2.5.5 </span> <a
id="x11-420005"></a>Generate the code</h4>
<!--l. 165--><p class="noindent" >Now you can generate the code. Right click on the launch configuration and run it as <span
class="ec-lmsso-10">gen_HelloWorldC</span>.
</p><!--l. 168--><p class="noindent" ><img
src="images/016-HelloWorldC12.png" alt="PIC"
/>
</p><!--l. 170--><p class="noindent" >The code should be generated and placed in the src-gen folder.
</p><!--l. 172--><p class="noindent" ><img
src="images/016-HelloWorldC13.png" alt="PIC"
/>
<a
id="x11-42001r58"></a>
</p>
<h4 class="subsectionHead"><span class="titlemark">2.5.6 </span> <a
id="x11-430006"></a>Setup the C build</h4>
<!--l. 176--><p class="noindent" >Before you can build the application you must setup the include and library paths for the runtime system.
</p><!--l. 178--><p class="noindent" >Right click the project and select <span
class="ec-lmsso-10">Properties -&#x003E; C/C++ Build -&#x003E; Settings -&#x003E; Includes</span>. Add the include path for the current
project <span
class="ec-lmsso-10">src-gen </span>and the runtime source folders <span
class="ec-lmsso-10">common</span>, <span
class="ec-lmsso-10">config </span>and the chosen platform (<span
class="ec-lmsso-10">MT_WIN_MinGW </span>or
<span
class="ec-lmsso-10">MT_POSIX_GENERIC_GCC</span>).
</p><!--l. 181--><p class="noindent" ><img
src="images/016-HelloWorldC14.png" alt="PIC"
/>
</p><!--l. 183--><p class="noindent" >Add the runtime library: <span
class="ec-lmsso-10">Properties -&#x003E; C/C++ Build -&#x003E; Settings -&#x003E; Libraries </span>and the runtime library which is appropriate for
your environment (e.g. <span
class="ec-lmtt-10">rt </span>for Linux).
</p><!--l. 186--><p class="noindent" ><img
src="images/016-HelloWorldC15.png" alt="PIC"
/>
</p><!--l. 188--><p class="noindent" >The name of the library is <span
class="ec-lmsso-10">org.eclipse.etrice.runtime.c </span>but the actual file name for the library is <span
class="ec-lmsso-10">liborg.eclipse.etrice.runtime.c.a</span>
.
</p><!--l. 190--><p class="noindent" ><span
class="ec-lmssbx-10">Caution: </span>Exclude the folder <span
class="ec-lmsso-10">src-gen-info </span>from the build (this is done in the properties of this folder). This folder is used to
store temporary files for the incremental code generation and must not be compiled in order to avoid multiple definition of
symbols.
</p><!--l. 193--><p class="noindent" ><img
src="images/016-HelloWorldC151.png" alt="PIC"
/>
<a
id="x11-43001r59"></a>
</p>
<h4 class="subsectionHead"><span class="titlemark">2.5.7 </span> <a
id="x11-440007"></a>Build and run the model</h4>
<!--l. 197--><p class="noindent" >Now you can build the application. Click the build button (hammer symbol) to build the application. Run the application in
the folder <span
class="ec-lmsso-10">Binary </span>as <span
class="ec-lmsso-10">Local C/C++ Application</span>. The output in the Console View should contain the message <span
class="ec-lmsso-10">Hello</span>
<span
class="ec-lmsso-10">World</span>.
</p><!--l. 201--><p class="noindent" ><img
src="images/016-HelloWorldC16.png" alt="PIC"
/>
<a
id="x11-44001r60"></a>
</p>
<h4 class="subsectionHead"><span class="titlemark">2.5.8 </span> <a
id="x11-450008"></a>Open the Message Sequence Chart</h4>
<!--l. 3--><p class="noindent" >For debugging and learning purposes, the application produced a Message Sequence Chart and wrote it to a file. Open the file
<span
class="ec-lmsso-10">subSysRef1_Async.seq </span>or <span
class="ec-lmsso-10">msc.seq </span>in the folder <span
class="ec-lmsso-10">HelloWorld/tmp/log/ </span>using the tool Trace2UML. Create the path if not
already there.
</p><!--l. 5--><p class="noindent" >Trace2UML is an open source MSC viewer and can be obtained here: </p>
<ul class="itemize1">
<li class="itemize"><a
href="http://trace2uml.tigris.org/" >Trace2UML project home and download of windows version</a>
</li>
<li class="itemize"><a
href="http://apt.astade.de/" >download of the Linux package of the Astade UML tool which contains Trace2UML</a></li></ul>
<!--l. 10--><p class="noindent" >After opening the file, you should see something like this:
</p><!--l. 12--><p class="noindent" ><img
src="images/015-HelloWorld09.png" alt="PIC"
/>
</p><!--l. 15--><p class="noindent" >The Actor with the instance path <span
class="ec-lmsso-10">/LogSys1/subSysRef1/actorRef1 </span>is in the state <span
class="ec-lmsso-10">state0</span>. This is the simplest possible MSC.
The MSCs for further tutorials will contain more information.
<a
id="x11-45001r61"></a>
</p>
<h4 class="subsectionHead"><span class="titlemark">2.5.9 </span> <a
id="x11-460009"></a>Summary</h4>
<!--l. 207--><p class="noindent" >You are now familiar with all necessary steps to create, build and run an eTrice C model from scratch. You are able to create
a launch configuration to start the code generator and to perform all necessary settings to compile and link the
application.
</p><!--l. 211--><p class="noindent" >The next tutorial provides an exercise to get more familiar with these working steps.
</p>
<!--l. 1--><div class="crosslinks"><p class="noindent">[<a
href="etrice-docse8.html" >next</a>] [<a
href="etrice-docse6.html" >prev</a>] [<a
href="etrice-docse6.html#tailetrice-docse6.html" >prev-tail</a>] [<a
href="etrice-docse7.html" >front</a>] [<a
href="etrice-docch2.html#etrice-docse7.html" >up</a>] </p></div>
<!--l. 1--><p class="noindent" ><a
id="tailetrice-docse7.html"></a></p>
</body></html>