Для работы с приложениями 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 в реальном времени управление памятью должно выполняться до начала моделирования в реальном времени. Моделирование переключается в режиме реального времени после 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 в реальном времени перехватывает прерывание от системных часов. Затем он перепрограммирует системные часы для работы на более высокой частоте для запуска приложения в реальном времени. На исходной тактовой частоте он посылает в операционную систему прерывание, позволяющее запускать программное обеспечение, использующее 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