Соглашения функции компилятора выходного языка

Можно найти примеры с помощью этих функций в 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

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

lcv

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

sigIdx oridx

Индекс сигнала. Иногда называемый индексом элемента сигнала. Когда доступ к определенным элементам ввода или вывода сигнализирует непосредственно, вызов различных библиотечных подпрограмм должен иметь 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 = "" AND lcv = "i").

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

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

Да

Действительная часть элемента i

"im3"

Да

Мнимая часть элемента i 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.

Похожие темы