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

Можно найти примеры с помощью этих функций в 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 (например, sfunctionMEX) расположены в 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 директива, это обычно задается как "".

sigIdxoridx

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

Да

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

"3"

Да

Объедините контейнер элемента i

3

Да

Объедините контейнер элемента i

"re3"

Нет

Элемент i

"im3"

Нет

""

"3"

Нет

Элемент i

3

Нет

Элемент i

Примечания

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

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

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

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

Похожие темы