exponenta event banner

Условные обозначения функций компилятора целевого языка

Примеры использования этих функций можно найти в разделе matlabroot/toolbox/simulink/blocks/tlc_c и matlabroot/toolbox/simulink/simdemos/simfeatures/tlc_c. Соответствующий исходный код S-функции MEX находится в matlabroot/simulink/src или matlabroot/toolbox/simulink/simdemos/simfeatures/src. Файловые S-функции MATLAB ® и исполняемые файлы MEX (например ,sfunction.mex*) расположены в matlabroot/toolbox/simulink/blocks или matlabroot/toolbox/simulink/simdemos/simfeatures. Если щелкнуть одно из предыдущих имен папок, то эта папка изменится в MATLAB и отобразится содержимое папки в браузере «Текущая папка MATLAB».

Аргументы общей функции

Несколько функций принимают схожие или идентичные аргументы. Для упрощения справочных страниц некоторые из этих аргументов подробно описаны здесь, а не на справочных страницах.

АргументОписание

portIdx

Относится к индексу входного или выходного порта, начиная с 0. Например, первый входной порт S-функции равен 0.

ucv

Управляющая переменная пользователя. Это расширенная функция, которая переопределяет lcv и sigIdx параметры. При использовании в встроенной S-функции ее обычно следует указывать как "".

lcv

Переменная управления контуром. Это, как правило, генерируется %roll директива через второй %roll аргумент (например, lcv=RollThreshold) и должен быть передан непосредственно библиотечной функции. Он содержит либо "", указывая, что ток проходит через %roll встраивается, или это имя переменной управления контуром, такой как "i", указывая, что ток проходит через %roll помещается в петлю. За пределами %roll директива, обычно указывается как "".

sigIdxилиidx

Индекс сигнала. Иногда называется индексом сигнального элемента. При непосредственном доступе к определенным элементам входного или выходного сигнала вызов различных подпрограмм библиотеки должен иметь ucv="", lcv="", и sigIdx равно требуемому целочисленному индексу сигнала, начиная с 0. Для сложных сигналов, sigIdx может быть перегруженным целочисленным индексом, определяющим как доступ к действительной или мнимой части, так и к какому элементу. При доступе к этим элементам внутри %roll, используйте sigIdx генерируемой системой %roll директива.

Большинство функций, которые принимают sigIdx аргумент принимает его в перегруженной форме, где sigIdx может быть

  • Целое число, например, 3. Если ссылочный сигнал является сложным, то это относится к идентификатору для сложного контейнера. Если ссылочный сигнал не является сложным, то это относится к идентификатору.

  • Один id-num, обычно формы (см. Перегрузка sigIdx)

    1. "%<tRealPart>%<idx>" (например, "re3"). Действительная часть сигнального элемента. Обычно "%<tRealPart>%<sigIdx>" когда sigIdx генерируется системой %roll директива.

    2. "%<tImagPart>%<idx>" (например, "im3"). Мнимая часть сигнального элемента или "" если сигнал не является сложным. Обычно "%<tImagPart>%<sigIdx>" когда sigIdx генерируется системой %roll директива.

Используйте idx имя при ссылке на состояние или рабочий вектор.

Функции, принимающие три аргумента ucv, lcv, sigIdx (или idx) вызываются по-разному в зависимости от того, используются ли они в пределах %roll директива. Если они используются в пределах %roll директива, ucv обычно указывается как "" и, lcv и sigIdx те же, что указаны в %roll директива. Если они не используются в течение %roll директива, ucv и lcv обычно указываются как "", и sigIdx указывает индекс для доступа.

paramIdx

Индекс параметра. Иногда называется индексом элемента параметра. Обработка этого параметра очень похожа на sigIdx выше: это может быть #, re#, или im#.

stateIdx

Индекс состояния. Иногда упоминается как индекс элемента вектора состояния. Он должен вычисляться как целое число, в котором первый элемент начинается с 0.

Перегрузка sigIdx

Индекс сигнала (sigIdx иногда пишется как idx) может быть перегружена при передаче большинству библиотечных функций. Предположим, что вас интересует элемент 3 сигнала, и ucv="", lcv="". В следующей таблице показаны

  • Значения sigIdx

  • Является ли используемый сигнал сложным

  • Какую функцию использует sigIdx прибыль

  • Пример возвращаемой переменной

  • Тип данных возвращаемой переменной

Заметим, что «контейнер» в следующей таблице относится к объекту, который инкапсулирует как действительную, так и мнимую части числа, например, creal_T, определено в tmwtypes.h.

sigIdxКомплексФункция возвращаетПримерДанные
Напечатать
"re3"

Да

Реальная часть элемента 3

u0[2].re

real_T

"im3"

Да

Мнимая часть элемента 3

u0[2].im

real_T

"3"

Да

Комплексный контейнер элемента 3

u0[2]

creal_T

3

Да

Комплексный контейнер элемента 3

u0[2]

creal_T

"re3"

Нет

Элемент 3

u0[2]

real_T

"im3"

Нет

""

Н/Д

Н/Д

"3"

Нет

Элемент 3

u0[2]

real_T

3

Нет

Элемент 3

u0[2]

real_T

Теперь предположим следующее:

  1. Вас интересует элемент 3 сигнала.

  2. (ucv = "i" И lcv == "") ИЛИ (ucv = "" И lcv = "i").

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

sigIdxКомплексФункция возвращает
"re3"

Да

Реальная часть элемента i

"im3"

Да

Мнимая часть элемента iя

"3"

Да

Сложный контейнер элемента i

3

Да

Сложный контейнер элемента i

"re3"

Нет

Элемент i

"im3"

Нет

""

"3"

Нет

Элемент i

3

Нет

Элемент i

Примечания

  • Векторный индекс добавляется только для широких сигналов.

  • Если ucv не является пустой строкой (""), то ucv используется вместо sigIdx в вышеприведенных примерах и обоих lcv и sigIdx игнорируются.

  • Если ucv пуст, но lcv не пуст, тогда функция возвращает "&y%<portIdx>[%<lcv>]" и sigIdx игнорируется.

  • Предполагается, что ролик объявил и инициализировал переменные, доступные внутри ролика. Переменные, доступные внутри ролика, должны быть указаны с помощью rollVars в качестве аргумента для %roll директива.

Связанные темы