Можно записать пользовательские драйверы устройства ввода-вывода, чтобы работать с приложениями Simulink® Desktop Real-Time™.
Не используйте Аналоговый вход, Аналоговый выход, Цифровой вход или драйверы Цифрового выхода как отправные точки для создания драйверов отдельного устройства.
Можно использовать функции 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