| <?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="2014-03-31 09:04: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-400002.5"></a>HelloWorld for C</h3> |
| <!--l. 3--><p class="noindent" > |
| </p> |
| <h4 class="subsectionHead"><span class="titlemark">2.5.1 </span> <a |
| id="x11-410002.5.1"></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><!--l. 11--><p class="noindent" > |
| </p><ol class="enumerate1" > |
| <li |
| class="enumerate" id="x11-41002x1">create a new model from scratch |
| </li> |
| <li |
| class="enumerate" id="x11-41004x2">add a very simple state machine to an actor |
| </li> |
| <li |
| class="enumerate" id="x11-41006x3">create a launch configuration for the C code generator |
| </li> |
| <li |
| class="enumerate" id="x11-41008x4">setup the C environment |
| </li> |
| <li |
| class="enumerate" id="x11-41010x5">generate the source code |
| </li> |
| <li |
| class="enumerate" id="x11-41012x6">run the model |
| </li> |
| <li |
| class="enumerate" id="x11-41014x7">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>. |
| </p><!--l. 23--><p class="noindent" > |
| </p> |
| <h4 class="subsectionHead"><span class="titlemark">2.5.2 </span> <a |
| id="x11-420002.5.2"></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><!--l. 28--><p class="noindent" > |
| </p><ol class="enumerate1" > |
| <li |
| class="enumerate" id="x11-42002x1">select the <span |
| class="ec-lmsso-10">C/C++ </span>perspective |
| </li> |
| <li |
| class="enumerate" id="x11-42004x2">select <span |
| class="ec-lmsso-10">File->New->C Project </span>from the main menue |
| |
| |
| </li> |
| <li |
| class="enumerate" id="x11-42006x3">name the project <span |
| class="ec-lmsso-10">HelloWorldC</span> |
| </li> |
| <li |
| class="enumerate" id="x11-42008x4">the project type is <span |
| class="ec-lmsso-10">Executable / Empty C Project</span> |
| </li> |
| <li |
| class="enumerate" id="x11-42010x5">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->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->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 <Ctrl>+<Space> 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 <Tab> 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-42011r1"></a><span |
| class="ec-lmss-8x-x-62">1</span></span><span |
| class="ec-lmssbx-10x-x-90">RoomModel</span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">HelloWorld_Model</span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">{</span><span |
| class="ec-lmtt-9"> </span><br /><span class="label"><a |
| id="x11-42012r2"></a><span |
| class="ec-lmss-8x-x-62">2</span></span><span |
| class="ec-lmtt-9"> </span><br /><span class="label"><a |
| id="x11-42013r3"></a><span |
| class="ec-lmss-8x-x-62">3</span></span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmssbx-10x-x-90">LogicalSystem</span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">LogSys1</span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">{</span><span |
| class="ec-lmtt-9"> </span><br /><span class="label"><a |
| id="x11-42014r4"></a><span |
| class="ec-lmss-8x-x-62">4</span></span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmssbx-10x-x-90">SubSystemRef</span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">subSysRef1</span><span |
| class="ec-lmtt-9">:</span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">SubSysClass1</span><span |
| class="ec-lmtt-9"> </span><br /><span class="label"><a |
| id="x11-42015r5"></a><span |
| class="ec-lmss-8x-x-62">5</span></span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">}</span><span |
| class="ec-lmtt-9"> </span><br /><span class="label"><a |
| id="x11-42016r6"></a><span |
| class="ec-lmss-8x-x-62">6</span></span><span |
| class="ec-lmtt-9"> </span><br /><span class="label"><a |
| id="x11-42017r7"></a><span |
| class="ec-lmss-8x-x-62">7</span></span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmssbx-10x-x-90">SubSystemClass</span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">SubSysClass1</span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">{</span><span |
| class="ec-lmtt-9"> </span><br /><span class="label"><a |
| id="x11-42018r8"></a><span |
| class="ec-lmss-8x-x-62">8</span></span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmssbx-10x-x-90">ActorRef</span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">actorRef1</span><span |
| class="ec-lmtt-9">:</span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">HelloWorldTop</span><span |
| class="ec-lmtt-9"> </span><br /><span class="label"><a |
| id="x11-42019r9"></a><span |
| class="ec-lmss-8x-x-62">9</span></span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmssbx-10x-x-90">LogicalThread</span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">defaultThread</span><span |
| class="ec-lmtt-9"> </span><br /><span class="label"><a |
| id="x11-42020r10"></a><span |
| class="ec-lmss-8x-x-62">10</span></span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">}</span><span |
| class="ec-lmtt-9"> </span><br /><span class="label"><a |
| id="x11-42021r11"></a><span |
| class="ec-lmss-8x-x-62">11</span></span><span |
| class="ec-lmtt-9"> </span><br /><span class="label"><a |
| id="x11-42022r12"></a><span |
| class="ec-lmss-8x-x-62">12</span></span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmssbx-10x-x-90">ActorClass</span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">HelloWorldTop</span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">{</span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">}</span><span |
| class="ec-lmtt-9"> </span><br /><span class="label"><a |
| id="x11-42023r13"></a><span |
| class="ec-lmss-8x-x-62">13</span></span><span |
| class="ec-lmtt-9"> </span><br /><span class="label"><a |
| id="x11-42024r14"></a><span |
| class="ec-lmss-8x-x-62">14</span></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 (<Ctrl>+<Space>) 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-42025r1"></a><span |
| class="ec-lmss-8x-x-62">1</span></span><span |
| class="ec-lmssbx-10x-x-90">PhysicalModel</span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">PhysicalModel1</span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">{</span><span |
| class="ec-lmtt-9"> </span><br /><span class="label"><a |
| id="x11-42026r2"></a><span |
| class="ec-lmss-8x-x-62">2</span></span><span |
| class="ec-lmtt-9"> </span><br /><span class="label"><a |
| id="x11-42027r3"></a><span |
| class="ec-lmss-8x-x-62">3</span></span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmssbx-10x-x-90">PhysicalSystem</span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">PhysSys1</span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">{</span><span |
| class="ec-lmtt-9"> </span><br /><span class="label"><a |
| id="x11-42028r4"></a><span |
| class="ec-lmss-8x-x-62">4</span></span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmssbx-10x-x-90">NodeRef</span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">nodeRef1</span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">:</span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">NodeClass1</span><span |
| class="ec-lmtt-9"> </span><br /><span class="label"><a |
| id="x11-42029r5"></a><span |
| class="ec-lmss-8x-x-62">5</span></span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">}</span><span |
| class="ec-lmtt-9"> </span><br /><span class="label"><a |
| id="x11-42030r6"></a><span |
| class="ec-lmss-8x-x-62">6</span></span><span |
| class="ec-lmtt-9"> </span><br /><span class="label"><a |
| id="x11-42031r7"></a><span |
| class="ec-lmss-8x-x-62">7</span></span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmssbx-10x-x-90">NodeClass</span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">NodeClass1</span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">{</span><span |
| class="ec-lmtt-9"> </span><br /><span class="label"><a |
| id="x11-42032r8"></a><span |
| class="ec-lmss-8x-x-62">8</span></span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmssbx-10x-x-90">runtime</span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">=</span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">RuntimeClass1</span><span |
| class="ec-lmtt-9"> </span><br /><span class="label"><a |
| id="x11-42033r9"></a><span |
| class="ec-lmss-8x-x-62">9</span></span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmssbx-10x-x-90">priomin</span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">=</span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">-10</span><span |
| class="ec-lmtt-9"> </span><br /><span class="label"><a |
| id="x11-42034r10"></a><span |
| class="ec-lmss-8x-x-62">10</span></span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmssbx-10x-x-90">priomax</span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">=</span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">10</span><span |
| class="ec-lmtt-9"> </span><br /><span class="label"><a |
| id="x11-42035r11"></a><span |
| class="ec-lmss-8x-x-62">11</span></span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmssbx-10x-x-90">DefaultThread</span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">PhysicalThread1</span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">{</span><span |
| class="ec-lmtt-9"> </span><br /><span class="label"><a |
| id="x11-42036r12"></a><span |
| class="ec-lmss-8x-x-62">12</span></span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmssbx-10x-x-90">execmode</span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">=</span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmssbx-10x-x-90">mixed</span><span |
| class="ec-lmtt-9"> </span><br /><span class="label"><a |
| id="x11-42037r13"></a><span |
| class="ec-lmss-8x-x-62">13</span></span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmssbx-10x-x-90">interval</span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">=</span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">100</span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmssbx-10x-x-90">ms</span><span |
| class="ec-lmtt-9"> </span><br /><span class="label"><a |
| id="x11-42038r14"></a><span |
| class="ec-lmss-8x-x-62">14</span></span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmssbx-10x-x-90">prio</span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">=</span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">0</span><span |
| class="ec-lmtt-9"> </span><br /><span class="label"><a |
| id="x11-42039r15"></a><span |
| class="ec-lmss-8x-x-62">15</span></span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmssbx-10x-x-90">stacksize</span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">=</span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">1024</span><span |
| class="ec-lmtt-9"> </span><br /><span class="label"><a |
| id="x11-42040r16"></a><span |
| class="ec-lmss-8x-x-62">16</span></span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmssbx-10x-x-90">msgblocksize</span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">=</span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">32</span><span |
| class="ec-lmtt-9"> </span><br /><span class="label"><a |
| id="x11-42041r17"></a><span |
| class="ec-lmss-8x-x-62">17</span></span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmssbx-10x-x-90">msgpoolsize</span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">=</span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">10</span><span |
| class="ec-lmtt-9"> </span><br /><span class="label"><a |
| id="x11-42042r18"></a><span |
| class="ec-lmss-8x-x-62">18</span></span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">}</span><span |
| class="ec-lmtt-9"> </span><br /><span class="label"><a |
| id="x11-42043r19"></a><span |
| class="ec-lmss-8x-x-62">19</span></span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">}</span><span |
| class="ec-lmtt-9"> </span><br /><span class="label"><a |
| id="x11-42044r20"></a><span |
| class="ec-lmss-8x-x-62">20</span></span><span |
| class="ec-lmtt-9"> </span><br /><span class="label"><a |
| id="x11-42045r21"></a><span |
| class="ec-lmss-8x-x-62">21</span></span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmssbx-10x-x-90">RuntimeClass</span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">RuntimeClass1</span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">{</span><span |
| class="ec-lmtt-9"> </span><br /><span class="label"><a |
| id="x11-42046r22"></a><span |
| class="ec-lmss-8x-x-62">22</span></span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmssbx-10x-x-90">model</span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">=</span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmssbx-10x-x-90">multiThreaded</span><span |
| class="ec-lmtt-9"> </span><br /><span class="label"><a |
| id="x11-42047r23"></a><span |
| class="ec-lmss-8x-x-62">23</span></span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">}</span><span |
| class="ec-lmtt-9"> </span><br /><span class="label"><a |
| id="x11-42048r24"></a><span |
| class="ec-lmss-8x-x-62">24</span></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 <Tab> between the |
| template variables): |
| </p> |
| <!--l. 114--> |
| <div class="lstlisting" id="listing-8"><span class="label"><a |
| id="x11-42049r1"></a><span |
| class="ec-lmss-8x-x-62">1</span></span><span |
| class="ec-lmssbx-10x-x-90">MappingModel</span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">MappingModel1</span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">{</span><span |
| class="ec-lmtt-9"> </span><br /><span class="label"><a |
| id="x11-42050r2"></a><span |
| class="ec-lmss-8x-x-62">2</span></span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmssbx-10x-x-90">import</span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">HelloWorld_Model</span><span |
| class="ec-lmtt-9">.*</span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmssbx-10x-x-90">from</span><span |
| class="ec-lmtt-9"> </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"> </span><br /><span class="label"><a |
| id="x11-42051r3"></a><span |
| class="ec-lmss-8x-x-62">3</span></span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmssbx-10x-x-90">import</span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">PhysicalModel1</span><span |
| class="ec-lmtt-9">.*</span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmssbx-10x-x-90">from</span><span |
| class="ec-lmtt-9"> </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"> </span><br /><span class="label"><a |
| id="x11-42052r4"></a><span |
| class="ec-lmss-8x-x-62">4</span></span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmssbx-10x-x-90">Mapping</span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">LogSys1</span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">-></span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">PhysSys1</span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">{</span><span |
| class="ec-lmtt-9"> </span><br /><span class="label"><a |
| id="x11-42053r5"></a><span |
| class="ec-lmss-8x-x-62">5</span></span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmssbx-10x-x-90">SubSystemMapping</span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">subSysRef1</span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">-></span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">nodeRef1</span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">{</span><span |
| class="ec-lmtt-9"> </span><br /><span class="label"><a |
| id="x11-42054r6"></a><span |
| class="ec-lmss-8x-x-62">6</span></span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmssbx-10x-x-90">ThreadMapping</span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">defaultThread</span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">-></span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">PhysicalThread1</span><span |
| class="ec-lmtt-9"> </span><br /><span class="label"><a |
| id="x11-42055r7"></a><span |
| class="ec-lmss-8x-x-62">7</span></span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">}</span><span |
| class="ec-lmtt-9"> </span><br /><span class="label"><a |
| id="x11-42056r8"></a><span |
| class="ec-lmss-8x-x-62">8</span></span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">}</span><span |
| class="ec-lmtt-9"> </span><br /><span class="label"><a |
| id="x11-42057r9"></a><span |
| class="ec-lmss-8x-x-62">9</span></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" |
| /> |
| </p><!--l. 20--><p class="noindent" > |
| </p> |
| <h4 class="subsectionHead"><span class="titlemark">2.5.3 </span> <a |
| id="x11-430002.5.3"></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">_________________________________________ |
| _________________________________________          <!--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 World"); |
| </div> |
| <!--l. 39--><p class="nopar" > |
| </p></div>   <div class="minipage">_________________________________________________________________          <!--l. 45--><p class="noindent" ><span |
| class="ec-lmssbx-10">action code for C</span> |
| </p> |
| <div class="verbatim" id="verbatim-6"> |
| printf("Hello 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"> |
| ______________________________________________ |
| ______________________________________________          <!--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-43001r1"></a><span |
| class="ec-lmss-8x-x-62">1</span></span><span |
| class="ec-lmssbx-10x-x-90">RoomModel</span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">HelloWorld_Model</span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">{</span><span |
| class="ec-lmtt-9"> </span><br /><span class="label"><a |
| id="x11-43002r2"></a><span |
| class="ec-lmss-8x-x-62">2</span></span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmssbx-10x-x-90">LogicalSystem</span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">LogSys1</span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">{</span><span |
| class="ec-lmtt-9"> </span><br /><span class="label"><a |
| id="x11-43003r3"></a><span |
| class="ec-lmss-8x-x-62">3</span></span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmssbx-10x-x-90">SubSystemRef</span><span |
| class="ec-lmtt-9"> </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"> </span><br /><span class="label"><a |
| id="x11-43004r4"></a><span |
| class="ec-lmss-8x-x-62">4</span></span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">}</span><span |
| class="ec-lmtt-9"> </span><br /><span class="label"><a |
| id="x11-43005r5"></a><span |
| class="ec-lmss-8x-x-62">5</span></span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmssbx-10x-x-90">SubSystemClass</span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">SubSysClass1</span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">{</span><span |
| class="ec-lmtt-9"> </span><br /><span class="label"><a |
| id="x11-43006r6"></a><span |
| class="ec-lmss-8x-x-62">6</span></span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmssbx-10x-x-90">ActorRef</span><span |
| class="ec-lmtt-9"> </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"> </span><br /><span class="label"><a |
| id="x11-43007r7"></a><span |
| class="ec-lmss-8x-x-62">7</span></span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmssbx-10x-x-90">LogicalThread</span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">defaultThread</span><span |
| class="ec-lmtt-9"> </span><br /><span class="label"><a |
| id="x11-43008r8"></a><span |
| class="ec-lmss-8x-x-62">8</span></span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">}</span><span |
| class="ec-lmtt-9"> </span><br /><span class="label"><a |
| id="x11-43009r9"></a><span |
| class="ec-lmss-8x-x-62">9</span></span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmssbx-10x-x-90">ActorClass</span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">HelloWorldTop</span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">{</span><span |
| class="ec-lmtt-9"> </span><br /><span class="label"><a |
| id="x11-43010r10"></a><span |
| class="ec-lmss-8x-x-62">10</span></span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmssbx-10x-x-90">Structure</span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">{</span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">}</span><span |
| class="ec-lmtt-9"> </span><br /><span class="label"><a |
| id="x11-43011r11"></a><span |
| class="ec-lmss-8x-x-62">11</span></span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmssbx-10x-x-90">Behavior</span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">{</span><span |
| class="ec-lmtt-9"> </span><br /><span class="label"><a |
| id="x11-43012r12"></a><span |
| class="ec-lmss-8x-x-62">12</span></span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmssbx-10x-x-90">StateMachine</span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">{</span><span |
| class="ec-lmtt-9"> </span><br /><span class="label"><a |
| id="x11-43013r13"></a><span |
| class="ec-lmss-8x-x-62">13</span></span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmssbx-10x-x-90">Transition</span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">init</span><span |
| class="ec-lmtt-9">:</span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmssbx-10x-x-90">initial</span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">-></span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">state0</span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">{</span><span |
| class="ec-lmtt-9"> </span><br /><span class="label"><a |
| id="x11-43014r14"></a><span |
| class="ec-lmss-8x-x-62">14</span></span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmssbx-10x-x-90">action</span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">{</span><span |
| class="ec-lmtt-9"> </span><br /><span class="label"><a |
| id="x11-43015r15"></a><span |
| class="ec-lmss-8x-x-62">15</span></span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </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"> </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"> </span><br /><span class="label"><a |
| id="x11-43016r16"></a><span |
| class="ec-lmss-8x-x-62">16</span></span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">}</span><span |
| class="ec-lmtt-9"> </span><br /><span class="label"><a |
| id="x11-43017r17"></a><span |
| class="ec-lmss-8x-x-62">17</span></span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">}</span><span |
| class="ec-lmtt-9"> </span><br /><span class="label"><a |
| id="x11-43018r18"></a><span |
| class="ec-lmss-8x-x-62">18</span></span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmssbx-10x-x-90">State</span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">state0</span><span |
| class="ec-lmtt-9"> </span><br /><span class="label"><a |
| id="x11-43019r19"></a><span |
| class="ec-lmss-8x-x-62">19</span></span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">}</span><span |
| class="ec-lmtt-9"> </span><br /><span class="label"><a |
| id="x11-43020r20"></a><span |
| class="ec-lmss-8x-x-62">20</span></span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">}</span><span |
| class="ec-lmtt-9"> </span><br /><span class="label"><a |
| id="x11-43021r21"></a><span |
| class="ec-lmss-8x-x-62">21</span></span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">}</span><span |
| class="ec-lmtt-9"> </span><br /><span class="label"><a |
| id="x11-43022r22"></a><span |
| class="ec-lmss-8x-x-62">22</span></span><span |
| class="ec-lmtt-9">}</span> |
| </div> |
| </div> <div class="minipage"> |
| ___________________________________________________          <!--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-43023r1"></a><span |
| class="ec-lmss-8x-x-62">1</span></span><span |
| class="ec-lmssbx-10x-x-90">RoomModel</span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">HelloWorld_Model</span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">{</span><span |
| class="ec-lmtt-9"> </span><br /><span class="label"><a |
| id="x11-43024r2"></a><span |
| class="ec-lmss-8x-x-62">2</span></span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmssbx-10x-x-90">LogicalSystem</span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">LogSys1</span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">{</span><span |
| class="ec-lmtt-9"> </span><br /><span class="label"><a |
| id="x11-43025r3"></a><span |
| class="ec-lmss-8x-x-62">3</span></span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmssbx-10x-x-90">SubSystemRef</span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">subSysRef1</span><span |
| class="ec-lmtt-9">:</span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">SubSysClass1</span><span |
| class="ec-lmtt-9"> </span><br /><span class="label"><a |
| id="x11-43026r4"></a><span |
| class="ec-lmss-8x-x-62">4</span></span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">}</span><span |
| class="ec-lmtt-9"> </span><br /><span class="label"><a |
| id="x11-43027r5"></a><span |
| class="ec-lmss-8x-x-62">5</span></span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmssbx-10x-x-90">SubSystemClass</span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">SubSysClass1</span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">{</span><span |
| class="ec-lmtt-9"> </span><br /><span class="label"><a |
| id="x11-43028r6"></a><span |
| class="ec-lmss-8x-x-62">6</span></span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmssbx-10x-x-90">ActorRef</span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">actorRef1</span><span |
| class="ec-lmtt-9">:</span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">HelloWorldTop</span><span |
| class="ec-lmtt-9"> </span><br /><span class="label"><a |
| id="x11-43029r7"></a><span |
| class="ec-lmss-8x-x-62">7</span></span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmssbx-10x-x-90">LogicalThread</span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">defaultThread</span><span |
| class="ec-lmtt-9"> </span><br /><span class="label"><a |
| id="x11-43030r8"></a><span |
| class="ec-lmss-8x-x-62">8</span></span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">}</span><span |
| class="ec-lmtt-9"> </span><br /><span class="label"><a |
| id="x11-43031r9"></a><span |
| class="ec-lmss-8x-x-62">9</span></span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmssbx-10x-x-90">ActorClass</span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">HelloWorldTop</span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">{</span><span |
| class="ec-lmtt-9"> </span><br /><span class="label"><a |
| id="x11-43032r10"></a><span |
| class="ec-lmss-8x-x-62">10</span></span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmssbx-10x-x-90">Structure</span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">{</span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">}</span><span |
| class="ec-lmtt-9"> </span><br /><span class="label"><a |
| id="x11-43033r11"></a><span |
| class="ec-lmss-8x-x-62">11</span></span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmssbx-10x-x-90">Behavior</span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">{</span><span |
| class="ec-lmtt-9"> </span><br /><span class="label"><a |
| id="x11-43034r12"></a><span |
| class="ec-lmss-8x-x-62">12</span></span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmssbx-10x-x-90">StateMachine</span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">{</span><span |
| class="ec-lmtt-9"> </span><br /><span class="label"><a |
| id="x11-43035r13"></a><span |
| class="ec-lmss-8x-x-62">13</span></span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmssbx-10x-x-90">Transition</span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">init</span><span |
| class="ec-lmtt-9">:</span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmssbx-10x-x-90">initial</span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">-></span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">state0</span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">{</span><span |
| class="ec-lmtt-9"> </span><br /><span class="label"><a |
| id="x11-43036r14"></a><span |
| class="ec-lmss-8x-x-62">14</span></span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmssbx-10x-x-90">action</span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">{</span><span |
| class="ec-lmtt-9"> </span><br /><span class="label"><a |
| id="x11-43037r15"></a><span |
| class="ec-lmss-8x-x-62">15</span></span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </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"> </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"> </span><br /><span class="label"><a |
| id="x11-43038r16"></a><span |
| class="ec-lmss-8x-x-62">16</span></span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">}</span><span |
| class="ec-lmtt-9"> </span><br /><span class="label"><a |
| id="x11-43039r17"></a><span |
| class="ec-lmss-8x-x-62">17</span></span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">}</span><span |
| class="ec-lmtt-9"> </span><br /><span class="label"><a |
| id="x11-43040r18"></a><span |
| class="ec-lmss-8x-x-62">18</span></span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmssbx-10x-x-90">State</span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">state0</span><span |
| class="ec-lmtt-9"> </span><br /><span class="label"><a |
| id="x11-43041r19"></a><span |
| class="ec-lmss-8x-x-62">19</span></span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">}</span><span |
| class="ec-lmtt-9"> </span><br /><span class="label"><a |
| id="x11-43042r20"></a><span |
| class="ec-lmss-8x-x-62">20</span></span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">}</span><span |
| class="ec-lmtt-9"> </span><br /><span class="label"><a |
| id="x11-43043r21"></a><span |
| class="ec-lmss-8x-x-62">21</span></span><span |
| class="ec-lmtt-9"> </span><span |
| class="ec-lmtt-9">}</span><span |
| class="ec-lmtt-9"> </span><br /><span class="label"><a |
| id="x11-43044r22"></a><span |
| class="ec-lmss-8x-x-62">22</span></span><span |
| class="ec-lmtt-9">}</span> |
| </div> |
| </div> |
| |
| |
| </div><hr class="endfigure" /> |
| <h4 class="subsectionHead"><span class="titlemark">2.5.4 </span> <a |
| id="x11-440002.5.4"></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" |
| /> |
| </p><!--l. 163--><p class="noindent" > |
| </p> |
| <h4 class="subsectionHead"><span class="titlemark">2.5.5 </span> <a |
| id="x11-450002.5.5"></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" |
| /> |
| </p><!--l. 174--><p class="noindent" > |
| </p> |
| <h4 class="subsectionHead"><span class="titlemark">2.5.6 </span> <a |
| id="x11-460002.5.6"></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 -> C/C++ Build -> Settings -> 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 -> C/C++ Build -> Settings -> 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" |
| /> |
| |
| |
| </p><!--l. 195--><p class="noindent" > |
| </p> |
| <h4 class="subsectionHead"><span class="titlemark">2.5.7 </span> <a |
| id="x11-470002.5.7"></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" |
| /> |
| </p><!--l. 1--><p class="noindent" > |
| </p> |
| <h4 class="subsectionHead"><span class="titlemark">2.5.8 </span> <a |
| id="x11-480002.5.8"></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. |
| </p><!--l. 205--><p class="noindent" > |
| </p> |
| <h4 class="subsectionHead"><span class="titlemark">2.5.9 </span> <a |
| id="x11-490002.5.9"></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> |