As an example for the bytecode compilation the following listing shows the
thermostat example given in Listing~\ref{lst:exmtask} compiled to bytecode.
-The left column indicates the position in the program memory.
+The left column indicates the position in the program memory. The \CI{endif}
+label is resolved to an address outside of the program space. This is not a
+problem since this is included in the stopping condition of the interpreter.
+When the program counter exceeds the length of the program, the task
+terminates.
\begin{lstlisting}[caption={Thermostat bytecode},language=c]
- 1-2 : BCAnalogRead (Analog A0)
- 3-6 : BCPush (Int 50)
- 7 : BCGre
- 8-9 : BCJmpF 17 //Jump to else
-10-12: BCPush (Bool 1)
-13-14: BCDigitalWrite (Digital D0)
-15-16: BCJmp 21 //Jump to endif
-17-19: BCPush (Bool 0) //Else label
-20 : BCDigitalWrite (Digital D0)
-21 : //Endif label
+ 0-1 : BCAnalogRead (Analog A0)
+ 2-5 : BCPush (Int 50)
+ 6 : BCGre
+ 7-8 : BCJmpF 17 //Jump to else
+ 9-11: BCPush (Bool 1)
+12-13: BCDigitalWrite (Digital D0)
+14-15: BCJmp 21 //Jump to endif
+16-18: BCPush (Bool 0) //Else label
+19 : BCDigitalWrite (Digital D0)
+20 : //Endif label
\end{lstlisting}
The factorial function can be expressed as an \gls{mTask}-\gls{Task} and uses