Real-Time Workshop Release Notes    

Major Bug Fixes

Real-Time Workshop 5.1 includes several bug fixes made since Version 4.1. This section describes the particularly important Version 5.0 bug fixes. If you are upgrading from a release earlier than Release 12.1, then you should also see Bug Fixes of the Release 12.1 Release Notes.

ImportedExtern and ImportedExternPointer Storage Class Data No Longer Initialized

Real-Time Workshop now reverts to its previous behavior of not initializing data whose storage class is ImportedExtern or ImportedExternPointer. Such initializations are the external code's responsibility.

External Mode Properly Handles Systems with no Uploadable Blocks

Connecting to systems with no uploadable blocks in external mode used to fail and cause Simulink to act as though a simulation was running when none was. The only way to kill the model was to kill MATLAB. Connecting to these systems now will display a warning in the MATLAB command window and then run normally.

Nondefault Ports Now Usable for External Mode on Tornado Platform

In the prior release a bug prevented the use of any but the default port to connect to a Tornado (VxWorks) target via external mode. The problem has been fixed and that configuration now works as documented.

Initialize Block Outputs Even If No Block Output Has Storage Class Auto

Previously, block outputs were initialized only if at least one block output had storage class auto. Now even if there are no auto Block I/O entries, exported globals and custom signals will be initialized.

Code Is Generated Without Errors for Single Precision Datatype Block Outputs

In cases where a reused block outputs entry is the first single-precision datatype block output in the full list of block outputs in the model, Real-Time Workshop now operates without reporting errors. See the Simulink Release Notes for related single-precision block enhancements.

Duplicate #include Statements No Longer Generated

Real-Time Workshop now creates a unique list of C header files before emitting #include statements in the model.h file (formerly placed in model_common.h). For backwards compatibility, the old text buffering method for includes is still available for use, but can cause multiple includes in the generated code. We urge you to update your custom code formats to use the (S)LibAddToCommonIncludes() functions instead of LibCacheIncludes(), which has been deprecated.

Custom Storage Classes Ignored When Unlicensed for Embedded Coder

If a user loads a model that uses custom storage classes, and the user is not licensed for Embedded Coder, the custom storage class is ignored (storage class reverts to auto) and a warning is produced. Previously, this situation would have generated an error.

Erroneous Sample Time Warning Messages No Longer Issued

Erroneous warnings regarding sample times not being in the sample time table for models that contain a variable sample time block and a fixed step solver are no longer issued during model compilation.

Discrete Integrator Block with Rolled Reset No Longer Errors Out

Simulink Accelerator / Real-Time Workshop used to error out if they had a Discrete Integrator block configured in 'ForwardEuler', non-level external reset, and the reset signal was a 'rolled' signal (having a width greater than 5). This has beeen fixed.

Rate Limiter Block Code Generation Limitation Removed

Simulink Accelerator will now generate code for variable step solver models that contain a rate limiter block inside an atomic subsystem.

Multiport Switch with Expression Folding Limitation Removed

Simulink Accelerator and Real-Time Workshop no longer generate a Fatal Error for Multiport Switch when expression folding is enabled.

Pulse Generator Code Generation Failures Rectified

Several problems with code generation for the pulse generator block have been eliminated:

Note: The first two problems also affected the Simulink Accelerator.

Stateflow I/O with ImportedExternPointer Storage Class Now Handled Correctly

Stateflow input pointers for signals of ImportedExternPointer storage class are now correctly initialized, and no longer error out for charts producing output signals that are nonscalar and of ImportedExternPointer storage class.

Parameters for S-Function Target Lookup Blocks May Now Be Made Tunable

The S-Function target code will now compile for models having lookup and Lookup Table (2-D) blocks when parameters for those blocks are tunable.

PreLook-up Index Search Block Now Handles Discontiguous Wide Input

The PreLook-up Index Search block formerly only generated code for signals from the first roll region of discontiguous wide inputs, such as from a Max block. This has been fixed.

SimViewingDevice Subsystem No Longer Fails to Generate Code

Code generation no longer aborts for atomic subsystems configured with SimViewingDevice=on.

Accelerator Now Works with GCC Compiler on UNIX

The previous version of the Accelerator did not work when the user selected the gcc compiler with mex -setup. The Accelerator now supports using the gcc compiler on UNIX systems.

Expression Folding Behavior for Action Subsystems Stabilized

When a model contains an action subsystem (e.g., a for-loop or while-iterator subsystem) and expression folding is enabled, invalid or inefficient code sometimes was generated for the model. This problem has been fixed.

Dirty Flag No Longer Set During Code Generation

In previous releases a model would be marked as dirty during the code generation process and the status would be restored when the process was finished. With this release the model's dirty status does not change during code generation.

Subsystem Filenames Now Completely Checked for Illegal Characters

In previous releases it was possible to specify a subsystem filename that contained illegal (non-alphanumeric) characters, if the name was long enough and the invalid characters were toward the end of the string. In this release this bug has been fixed, and the entire character string is now validated.

Sine Wave and Pulse Generator Blocks No Longer Needlessly Use Absolute Time

Previously, code generated for the Sine Wave and Pulse Generator blocks accessed absolute time when the blocks were configured as sample based. This access is not necessary and its overhead has been removed from the generated code.

Generated Code for Action Subsystems Now Correctly Guards Execution of Fixed in Minor Time Step Blocks

All blocks contained in an action subsystem must have the same rate unless some are continuous and some are fixed in minor step (a.k.a. zoh continuous). If there are both continuous and fixed in minor step blocks then the generated code needs to guard the code for the fixed in minor time step blocks to protect it from being executed in minor time steps.

These guards were not being generated causing some models to have wrong answers and consistency failures. This problem has been fixed and the guards are now generated.

Report Error when Code Generation Requested for Models with Algebraic Loops

Real-Time Workshop does not support models containing algebraic loops. Version 4.1 contained a bug that enabled some models having algebraic loops to generate code which could compute incorrect answers. The models affected were those containing no algebraic loops in their root level but having algebraic loops in one or more subsystems. This bug has been fixed, and now building these models will always cause an error to be reported.

  Documentation Enhancements Platform Limitations for HP and IBM