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

Можно записать пользовательские драйверы устройства ввода-вывода, чтобы работать с 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