Tau3.4 -> Tau 3.5

New and Changed Functionality

Cmicro Tester

Known Limitations

Code Generator

newtype x literals green, blue; endnewtype x; newtype y literals blue, green; endnewtype y;

The both literals 'green' and 'blue' will then be created like this :
/* For newtype x */ #define green 0 #define blue 1 /* For newtype y */ #define blue 0 #define green 1

The C Compiler then usually complains that the macros 'blue' and 'green' are redefined with a different value. Some C compilers will continue in any case and produce an executable. Runtime errors are the consequence on this, because when 'green' and 'blue' are used together with the first newtype x, the literal values from the second newtype y are used by the C compiler. In order to avoid this problem, the users should manually add a prefix for each literal, like this:
literals x_green, x_blue; endnewtype x; newtype y literals y_blue, y_green; endnewtype y;

The 'green' and 'blue' example is not a good one, because it is possible to avoid the problem by using the inherit construct. The literals from the newtype x could be inherited into the newtype y. More problems will occur if several entity classes are mixed up from the C compiler, like if there would for example a signal called "green", which is also created as a #define. The user is strongly recommended to avoid naming conflicts in the .ifc file by manually adding prefixes.

Cmicro Generator and Library

/*----- * CALL procjoin * #SDTREF(SDL,<reference>) ------*/ z0530_procjoin(); XBETWEEN_SYMBOLS(4, 119, 2825) process p .... dcl stored_now duration; task StoredTimeValue := now + 10; nextstate S1; /* and then, an unspecified time later, the following transition is fired for example: */ input S; decision StoredTimeValue > now; .....

If the xmk_NOW C function is implemented in a way, so that an overrun in the system time can occur, then the behaviour of the system depends on whether an overrun happens or not. The background behind this is that the Cmicro Kernel cannot update SDL variables of the predefined sort time and duration, which it would have to do if an overrun in the system time occurs. Ordinary SDL timers are handled correctly because the Cmicro Kernel checks the system time against a possible overrun and corrects active timers in the background.

Cmicro Tester

Problems when an Application Is Created with Cmicro

ml_pred.c: In function `yAss_SDL_Object_Identifier': ml_pred.c:2109: parse error before `0' ml_pred.c:2109: parse error before `0'

The reason for the error above (and other behavior that is impossible to foresee) was that there was a signal named "SIn". This will be generated as a #define SIn 0. In the ml_pred.c file, there is a variable called SIn (in the macro yAss_SDL_Object_Identifier. The C preprocessor then replaces the variable name with the #define value of SIn, which ended up in the parse error above.

In order to avoid that, the user should never include codegenerated header or .ifc files in any part of the Cmicro Library itself or in the generated C code. The .ifc file should only be included in the SDL environment files (like env.c and/or mk_user.c).

"Unused Variable : <variablename>"

These warnings in generated C code are not that easy to remove because it is difficult to calculate this during codegeneration. These warnings should not produce real problems (except that it is sometimes impossible to read the large C compiler output). The following variables are sometimes referred:
warning: unused variable `yOutputSignal' warning: unused variable `yVarP' warning: unused variable `ySVarP'

The same warning as above is thrown from C compilers when signals without parameters are used.

This warning is accepted in the mk_outp.c module:
mk_outp.c:warning: unused variable `P_Parameter'

A similar warning (accepted also) is within mk_stim.c:
mk_stim.c:warning: `SystemTime' defined but not used

#define END_PAD(PrsNameWithPrefix) return (SDL_DASH_NEXTSTATE); a:=b and c and d;

If such a problem occurs, it is strongly recommended to avoid such statements for example with the following work around :
tmp:=b and c, a := tmp and d;

Use of ADTs from SDT in Cmicro

The packages and ADTs delivered with SDT are mainly to be used in CBasic/CAdvanced applications. Some of these ADTs may however also be useful for Cmicro applications. Some other cannot be used together with Cmicro as they contain references to C code from CBasic/CAdvanced. Below is a more detailled list of recommendations.

If something is missing in the list below (for some unknown reason), it should be considered as "Not possible together with Cmicro".

Combining Cadvanced / Cmicro C Code

Mixing C code from different C codegenerators is not possible as they use their own runtime model and runtime data structures. Trying to mix up the C code will soon or later lead to compilation errors. This restriction is true for any kind of combination of C code, for example includes sdth2sdl as well.

Real-time Operating System Support

The Tight Integrations delivered with the Tau CD are only applicable for Cadvanced but not for Cmicro.

There are tight integrations for Cmicro but these are not part of the product.

CORBA Integration (UNIX only)

Corrected Errors

Cmicro Generator and Library

Cmicro Tester and Cmicro Bodybuilder