You can write custom I/O device drivers to work with Simulink® Desktop Real-Time™ applications.
Note: Do not use Analog Input, Analog Output, Digital Input, or Digital Output drivers as starting points for creating custom device drivers.
You can use ANSI® C functions that do not use the operating system in your custom blocks or I/O drivers. The following includes a partial list of supported functions:
Console I/O —
printf function sends output
to the MATLAB® Command Window when it is called from the real-time
Data conversion —
Memory allocation —
Memory allocation is not an operation that can be done in real
time. To work with a Simulink Desktop Real-Time application, memory
management must occur before real-time simulation begins. Simulation
switches into real-time after
mdlStart, so you
can allocate memory in
You cannot allocate memory in any
mdlStart, such as
Memory manipulation —
String manipulation —
Character class tests and conversion —
Searching and sorting —
Dummy functions —
If you create your own custom I/O driver blocks, you should use only C functions supported by Simulink Desktop Real-Time software. Functions that use the operating system are not supported by Simulink Desktop Real-Time. This includes functions from vendor-supplied driver libraries for the operating system, which are also not supported.
The following list includes many, but not all, of the unsupported functions:
File I/O —
Console I/O —
Process management —
Signals and exceptions —
Time functions —
Operating system API functions — No operating system API functions , such as Win64 functions, are supported .
The Simulink Desktop Real-Time kernel intercepts the interrupt from the system clock. It then reprograms the system clock to operate at a higher frequency for running your real-time application. At the original clock frequency, it sends an interrupt to the operating system to allow standard applications or any software that uses the operating system API to run.
As a result, software that uses the operating system API, such as Win64 functions, cannot be executed as a component of your real-time application. Software you use to write I/O drivers must not make calls to the operating system API.
Operating system drivers can access I/O registers only from the real-time kernel and not from the Simulink software. To prevent drivers from attempting to access I/O registers from Simulink S-functions, enter code fragments like the following:
#ifndef MATLAB_MEX_FILE /* we are in real-time kernel, do board I/O */ #else /* we are in Simulink, don't do board I/O */ #endif