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

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

Общие аргументы функции

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

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

portIdx

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

ucv

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

lcv

Контурная переменная управления. Это обычно генерируется %roll директива через вторую %roll аргумент (например lcv=RollThreshold) и должна быть передана непосредственно в функцию библиотеки. Он содержит либо "", что указывает на то, что ток проходит через %roll inlined, или это имя переменной управления циклом, такой как "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 директива.

Похожие темы