Migration from a V7
Product to V8
The step from RXF C++ V7.xx to V8.xx is usually easy to take. But it is
important to first read and know
What’s new
in V8 (like dropped support for CMSIS 1 RTOS and a required
C++11 Compiler). Also you should first review the
restrictions.
The cleaner your UML model is, the easier the migration will be. If you
used a lot of overridden properties to influence code generation or
access RXF specifics in your user code, it will require more actions to
adapt your model to the new RXF.
The most important changes are related to the profiles that come with
the RXF:
- The profiles required to work with the RXF was renamed from
"RXF_Rpy_CPP_Profile" to "RXF" and it has a new location (there is no
copy in Rhapsody's Share or UserShare directory anymore, but it resides
with the in RXF\Profiles\Rhapsody (where you have copied or checked out
the RXF).
- There are no separate MISRA and WSTSubversion
profiles anymore, they are always integrated in RXF profile now.
Follow these
steps carefully to migration from RXF C++ V7.x to V8.x:- Open copy of the model that uses RXF V7
- Make sure it does not require any environments (especially RTOS
adapters) that are not available in V8.
- If there are components for RTOSes you don’t actually need and which
are not supported anymore, remove them from the model.
- Contact us,
if you need support for another environment that is not included in
the RXF V8 generic package.
- In the menu "File" select "Add profile to model" and select
"RXF\Profiles\Rhapsody\RXF.sbsx"
- Accept to replace the existing element by the element with a different
name, also for the following profiles.

- If the Target Debugger was used, do the same with
"RXF\Profiles\Rhapsody\RXFMonitor.sbsx"
- If "WSTTypesCpp" was used, do the same with
"RXF\Profiles\Rhapsody\RXFTypesCpp.sbsx"
-
If "WSTProfileCpp" was used, do the same with
"RXF\Profiles\Rhapsody\RXFStereotypesCpp.sbsx"
-
References to "WSTSubversion" and to "WSTMISRAC++" can be removed, as
they are now integrated into the RXF profile
- This will only be possible, after removing references
from your model to them. For MISRA, you might need to remove a
dependency from your model to the profile and for WSTSubversion make
sure it did not contain stereotypes you still have applied to your
model.
-
Reference to "WSTStyle" can be removed or the V7 settings file can be
copied into the project area to maintain it individually, as it is not
part of the V8 releases anymore. It just contained some property values
for a Willert recommended look and feel of diagrams in Rhapsody.
- If the selected environment is overridden locally, especially for
configurations, it needs to be un-overridden, as it shall be set
automatically via RXF stereotype on component level and has changed
from "WillertRXF" to "RXF".
- When looking for appropriate V8 properties and setting them, it is
recommended to use the RXF property perspective.

- For your components and configurations you need to migrate several V7 properties to the matching V8 properties (which are sometimes slightly renamed):

-
RTOS and target environment selection for the deployer
-
If container classes and string class are required
-
If main shall be deployed
-
The V8 deployer now requires the target IDE project to be specified in the
property "RXF::Deployer::IDEProject". It is recommended to specify it
relative to the Rhapsody model. The deployer will automatically detect
which IDE exporter shall be used based on the specified file.
If
you want the deployer to place the files into a directory without
adapting an IDE project file, you can just specify the directory in
that property. -
Configuration options like MAX_NULL_STEPS and MS_PER_TICK
-
Please note that the generic memory pools are not available in V8
anymore, you can use the initial instances approach instead for
application specific pools.
-
Event pool sizes need to be defined differently in V8. While V7 used
properties like WST_EVT_SMALL_BLOCK_SIZE with a default value of
"(sizeof(WST_EVT) + 4U)", in V8 you only define the size in bytes of
the event parameters as pool size, e.g.:
RXF::Configuration::EVENT_SMALL_PARAMETER_SIZE with a default value of
4U
-
If you use an RTOS, the default values for task stack and message queue
size etc.
need to be specified. They are not defined in an RXF specific subject
anymore, but the Rhapsody default properties for this are used:
Note: The Rhapsody property perspective
has a drawback: When initially the OORTX was selected as your V8 RTOS,
you first need to select the correct RTOS, apply and close the property
feature window and open it again to see the RTOS specific properties in
the RXF property perspective.
-
If you have active classes in your application model, make sure to
override active class specific properties like
CG::Class::ActiveThreadPriority with values that are also valid in V8.
If for example in V7 the priority was set to "PRIORITY_HIGH" (which was
defined in RXF V7) it need to be changed to "RXF::Priority::HIGH".
- Check for overridden RXF V7 properties elsewhere in your model, the RXF
V8 does not have or expect any properties in the RXF_Rpy_CPP metaclass
or in the CPP_CG::WillertRXF subject. Best practice is not to locally
override properties in your application model, but use your own profile
with a set of stereotypes that override properties. When you have such
a set of stereotypes, it is easier to go through them and adapt the
overridden properties to matching properties in V8. This means you need
to check what the purpose of the old overridden V7 property was and
find a matching V8 property you can set instead. The old properties
shall be un-overridden.
- If your application code has
dependencies to RXF V7 specifics, you need to adapt your code to the
new RXF V8 naming and interfaces.
- V7 came with a provided default error handler which could optionally be overridden in the application model via Rhapsody's
standard content mechanism (by changing a package to or creating a new "WST_ERR_Package").
V8 required the application model to implement the error handler, as
the important error handling is very application specific.
- If you used the V7 default error handler (endless loop) you can simply add a new "RXFErrorHandler" package and edit the contained operation.


- If your model already contains an "WST_ERR_Package", you can create a new error handler package "RXFErrorHandler"
like above, move the contents of the old error handling operation into
the new operation and delete the old "WST_ERR_Package".
- If
your application requires some of the following legacy interfaces, it
is best practise to port your application to work directly with the V8
interfaces. However it is possible to manually add and include the
related backward-compatibility header files that can be found in the
"RXF\Source\LegacySupportV7\True" folder. Using these headers is
deprecated.
- WST_CFG.h:
The
file includes the V8 file RXF_Config.h (so it maps the configuration
header include) and maps WST_MS_PER_TICK to RXF::MS_PER_TICK - WST_TMM.h:
The
file includes the V8 file RXF_Tick.h (so it maps the tick handling
include) and wraps RXF::Tick::getTicks() as WST_TMM::getTicks(). - WST_TMR.h:
The
file includes the V8 file RXF_Timer.h (so it maps the timer include)
and wraps RXF::Timer::timeToTicks() as WST_TMR::timeToTicks().
- Some RXF internal changes influence the ways you can work with generated classes in your applications code:
- Standard
types are not made available globally the the RXf V8 anymore. You can
use and include your own or our
("RXF\Profiles\Rhapsody\RXFTypesCpp.sbsx") types package.
- startBehavior() is not available for calling via reactive interfce anymore.
You can off course still call it for the specific reactive class. - Due to changed include structures some symbols might be undefined unless you explicitely add an include where needed.
- If your application still uses the symbol "NULL" you can manually map it to "nullptr" in your IDE or build environment.
- Copy
constructors should now be called explicitely, this can be solved by
setting the property CPP_CG::Operation::GenerateExplicitConstructor to
False.
- Please note that the property
WST_TIMEOUT_GUARANTEE_TIME is not available anymore in V8. The RXF
always behaves as if that property is overridden to "False". For
details see help on realtime behavior.
- Before deploying to the IDE
project:
-
Make sure your rhapsody component/configuration code generation
directory is empty and does not contain any V7 generated leftovers like
"WST_CFG.h"
-
Make sure you have a backup of your IDE project that was used for V7
deployments before deploying V8 content to it. But we assume you have
it even under version control / software configuration management and
might deploy to a branched version for V8.
-
Clean up the IDE project to be used for V8 from old V7 content: all
generated and deployed application model and RXF files shall be removed.
-
A clean command shall be done in your build environment / IDE.
- If you notice other issues please contact our support.