Основы пользовательских драйверов ввода-вывода

Вы можете записать пользовательские драйверы устройств ввода-вывода для работы с Simulink®Приложения для Desktop Real-Time™.

Примечание

Не используйте Analog Input, Analog Output, Digital Input или Digital Output драйверы в качестве начальных точек для создания пользовательских драйверов устройств.

Поддерживаемые функции C

Вы можете использовать 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

Если вы создаете свои собственные пользовательские блоки драйверов ввода-вывода, используйте только функции 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 функции, не поддерживаются.

Несовместимость с вызовами API операционной системы

Ядро Simulink Desktop Real-Time перехватывает прерывание из системных часов. Затем он перепрограммирует системные часы, чтобы работать с более высокой частотой для запуска вашего приложения реального времени. На исходной тактовой частоте он отправляет прерывание в операционную систему, чтобы позволить запускать программное обеспечение, использующее API операционной системы.

В результате программное обеспечение, использующее API операционной системы, такое как Win64 функции, не может выполняться как компонент вашего приложения реального времени. Программное обеспечение, используемое для записи драйверов ввода-вывода, не должно выполнять вызовы API операционной системы.

Доступ к регистру ввода-вывода из ограничения S-функций

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