Вы можете записать пользовательские драйверы устройств ввода-вывода для работы с 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