|On this page…|
You can write custom I/O device drivers to work with Real-Time Windows Target™ applications.
You can use ANSI® C functions that do not use the Windows® operating system in your custom blocks or I/O drivers. The following includes a partial list of supported functions:
Console I/O — printf
The printf function sends output to the MATLAB® Command Window when it is called from the real-time application.
Data conversion — abs, atof, atoi, atol, itoa, labs, ltoa, strtod, strtol, strtoul, ultoa
Memory allocation — calloc, free, malloc
Memory allocation is not an operation that can be done in real time. To work with a Real-Time Windows Target application, memory management must occur before real-time simulation begins. Simulation switches into real-time after mdlStart, so you can allocate memory in mdlInitializeSizes or mdlStart. You cannot allocate memory in any function after mdlStart, such as mdlOutputs or mdlUpdate.
Memory manipulation — _memccpy, memcpy, memchr, memcmp, _memicmp, memmove, memset
String manipulation — strcat, strchr, strcmp, strcpy, strcspn, _strdup, _stricmp, strlen, _strlwr, strncat, strncmp, strncpy, _strnset, strpbrk, strrchr, _strrev, _strset, strspn, strstr, strtok, strupr
Mathematical — acos, asin, atan, atan2, ceil, cos, cosh, div, exp, fabs, floor, fmod, frexp, ldexp, ldiv, log, log10, max, min, modf, pow, rand, sin, sinh, sqrt, srand, tan, tanh, uldiv
Character class tests and conversion — isalnum, isalpha, _isascii, iscntrl, isdigit, isgraph, islower, isprint, ispunct, isspace, isupper, isxdigit, isxupper, isxlower, _toascii, tolower, toupper
Searching and sorting — bsearch, qsort
Dummy functions — exit, fprintf
If you create your own custom I/O driver blocks, you should use only C functions supported by Real-Time Windows Target software. Functions that use the Windows operating system are not supported by Real-Time Windows Target. This includes functions from vendor-supplied driver libraries for Windows, which are also not supported.
The following list includes many, but not all, of the unsupported functions:
File I/O — fopen, freopen, fclose, fread, fwrite, fputs, fputc, fgets, fgetc, gets, getc, getchar, puts, putc, putchar, fflush, setbuf, setvbuf
Console I/O — fprintf, sprintf, vfprintf, vprintf, vsprintf, fscanf, scanf, sscanf
Process management — spawn, exit, abort, atexit
Signals and exceptions — signal, longimp, raise
Time functions — clock, time, difftime, asctime, ctime, difftime, gmtime, localtime, mktime, strftime
Win32 API functions — No Windows API functions are supported.
The Real-Time Windows Target 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 Windows operating system to allow Windows based applications or any software using the Win32 API to run.
As a result, software that uses the Win32 API 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 Win32 API.
Windows 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 RTWin kernel, do board I/O */ #else /* we are in Simulink, don't do board I/O */ #endif