Можно записать пользовательские драйверы устройства ввода-вывода, чтобы работать с 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
, 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
Тесты класса символов и преобразование — 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
, exit
, abort
, atexit
Сигналы и исключения — signal
, longimp
, raise
Функции времени clock
, time
, 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