Можно записать пользовательские драйверы устройства ввода-вывода, чтобы работать с приложениями Simulink® Desktop Real-Time™.
Не используйте Analog Input, Analog Output, Digital Input или драйверы Digital Output как начальные точки для создания драйверов отдельного устройства.
Можно использовать функции ANSI® C, которые не используют операционную систему в пользовательских блоках или драйверах ввода-вывода. Следующее включает частичный список поддерживаемых функций:
Консольный ввод-вывод — printf
printf
функция отправляет выход в Командное окно MATLAB®, когда это называется из приложения реального времени.
Преобразование данных — abs
, atof
, atoi
, atol
, itoa
, labs
, ltoa
, strtod
, strtol
, strtoul
, ultoa
Выделение памяти — calloc
, free
, malloc
Выделение памяти не является операцией, которая может быть сделана в режиме реального времени. Чтобы работать с приложением Simulink Desktop Real-Time, управление памятью должно произойти, прежде чем симуляция в реальном времени начинается. Симуляция переключается в реальное время после mdlStart
, таким образом, можно выделить память в mdlInitializeSizes
или mdlStart
. Вы не можете выделить память ни в какой функции после mdlStart
, такой как mdlOutputs
или mdlUpdate
.
Манипуляция с памятью — _memccpy
, memcpy
, memchr
, memcmp
, _memicmp
, memmove
, memset
Манипуляция с символьными строками — strcat
, strchr
strcmp
, strcpy
, strcspn
, _strdup
, _stricmp
strlen
, _strlwr
, strncat
strncmp
, strncpy
, _strnset
, strpbrk
, strrchr
, _strrev
, _strset
, strspn
, strstr
strtok
, strupr
Математический — acos
asin
atan
atan2
потолок
потому что
дубинка
, div
exp
, fabs
пол
, fmod
, frexp
, ldexp
, ldiv
журнал
log10
Max
min
, modf
, pow
rand
, sin
sinh
sqrt
, srand
tan
tanh
, uldiv
Тесты класса символов и преобразование — isalnum
, isalpha
, _isascii
, iscntrl
, isdigit
, isgraph
, islower
, isprint
, ispunct
isspace
, isupper
, isxdigit
, isxupper
, isxlower
toAscii
, tolower
, toupper
Поиск и сортировка — bsearch
, qsort
Фиктивные функции — exit
fprintf
Если вы создаете свои собственные блоки драйверов ввода-вывода, используйте только C функции тот Simulink Desktop Real-Time поддержки. Simulink Desktop Real-Time не делает функций поддержки, которые используют операционную систему. Эта категория включает функции от предоставленных поставщиками библиотек драйвера для операционной системы, которые также не поддержаны.
Следующий список включает многих, но не все, неподдерживаемых функций:
Файловый ввод-вывод — fopen
, freopen
fclose
fread
fwrite
, fputs
, fputc
fgets
, fgetc
, gets
, getc
, getchar
, puts
, putc
, putchar
, fflush
, setbuf
, setvbuf
Консольный ввод-вывод — fprintf
sprintf
, vfprintf
, vprintf
, vsprintf
fscanf
, scanf
sscanf
Управление процессами — spawn
выход
, abort
, atexit
Сигналы и исключения — signal
, longimp
, raise
Функции времени — clock
Время
, difftime
, asctime
, ctime
, difftime
, gmtime
, localtime
, mktime
, strftime
API-функции операционной системы — Никакие API-функции операционной системы, такие как функции Win64, не поддерживаются.
Ядро Simulink Desktop Real-Time прерывает прерывание от системных часов. Это затем повторно программирует системные часы, чтобы действовать на более высокой частоте для выполнения вашего приложения реального времени. На исходной частоте часов это отправляет прерывание в операционную систему, чтобы позволить программное обеспечение, которое использует API операционной системы, чтобы запуститься.
В результате программное обеспечение, которое использует API операционной системы, такой как функции Win64, не может быть выполнено как компонент вашего приложения реального времени. Программное обеспечение, которое вы используете, чтобы записать драйверы ввода-вывода, не должно выполнять вызовы к API операционной системы.
Драйверы операционной системы могут получить доступ к регистрам ввода-вывода только от ядра реального времени а не из программного обеспечения Simulink. Чтобы препятствовать тому, чтобы драйверы пытались получить доступ к регистрам ввода-вывода от S-функций Simulink, введите фрагменты кода как следующее:
#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