![]() |
![]() |
![]() |
![]() |
![]() |
SDL Restrictions
General
The Cmicro SDL to C Compiler handles SDL concepts according to the definition of SDL-92. In addition to the restrictions of all the SDL to C Compilers, the following additional restrictions are introduced for the Cmicro SDL to C Compiler:
- Inheritance of procedures
- Procedures with states
- Remote Procedure Calls
- Nested procedure call data scope
- Export / Import
- View / Reveal
- Enabling condition / Continuous signal
- Service and priority input and output
- Channel substructure
- Declaring an infinite number of process instances (x, ) or ( , )
- FPARS when creating a process
- Omission of parameters in a signal input
- Output via all
- Timers duration values cannot be real
- Timers with more than one parameter
- Timers with another parameter than sort integer
- The any expression
- Only the list of ADT and packages that are explained in the subsection Exceptions for SDL Predefined Types and the subsection Exceptions for Implementations of Operators are handled correctly with Cmicro.
The following restrictions are additional regarding the packages that are delivered together with the SDL Suite.
sdth2sdl
It is impossible to read in header files created with Cadvanced and use them in Cmicro and the other way around. The reason is that it is impossible to mix up C code between Cadvanced/Cbasic and Cmicro.
Combining Cadvanced / Cmicro C Code
Mixing C code from different C Code Generators is not possible as the different code generators use their own run-time model and run-time data structures. Trying to mix up the C code will lead to compilation errors.
Light and Tight Target Integrations
The light and tight target integrations delivered with the SDL Suite are only available for Cadvanced but not applicable to Cmicro. There are light and tight target integrations for Cmicro but these are not part of the product.
Restrictions in Combination with SDL Target Tester
Scope Rules / Qualifiers
If the SDL Target Tester is to be used, then the scope rules of SDL are handled in a restrictive fashion. No information is generated for the system, block, block substructure, channel and signalroute. After applying the Cmicro SDL to C Compiler, all the structuring information is lost.
This means that it is impossible to address two different processes with the same name in different blocks. In order to avoid problems, give all processes, signals and timers in the system a different (unique) name.
Predefined Sorts
The predefined sort charstring and all the predefined sort that are based on the implementation of charstring (like predefined sorts from ASN.1) cannot be handled, if the SDL Target Tester is to be used. All predefined sorts which are generated into pointers in C cannot be used. In order to get a detailed description, please see in The SDL Target Tester.
Analyzer Restrictions
The restrictions in the SDL Analyzer, which also affects the Cmicro SDL to C Compiler, are summarized in The SDL Analyzer.
Declaration of signals
There is a restriction in the Cmicro code generator which causes a compilation error. The error is related to declaration of signals under the three following conditions:
- The signal must be declared inside a block. If the signal is declared on system or package level, this restriction will not occur.
- The signal must have parameters that are deallocated by the receiving process. For signals containing simple types or no parameters, this restriction will not occur.
- When generating code "Full separation" must be switched on. If no separation is used, this restriction will not occur.
If all three conditions are met there will be a compilation error from compilation of the <system>.c file. The function cm_Free_Signal requires all signal declarations to be able to free the parameters for the signals. When signals are declared on block level the header file for such blocks are not included in the compilation of the <system>.c file.
If these three conditions apply you must include the needed header files manually on system level, this can for example be done by adding a text symbol on system level:
/*#CODE#HEADING#include "x.h"#include "y.h"*/
http://www.ibm.com/rational |
![]() |
![]() |
![]() |
![]() |