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

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

Примечание

Не используйте Аналоговый вход, Аналоговый выход, Цифровой вход или драйверы Цифрового выхода как отправные точки для создания драйверов отдельного устройства.

Поддерживаемые функции 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