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