Обработка ошибок TLC

Сообщение об ошибке

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

Чтобы сообщить о состоянии ошибки, обнаруженном в вашем коде TLC, используйте служебные функции LibBlockReportFatalError или LibBlockReportError. Вот пример использования LibBlockReportError в функции paramlib.tlc LibBlockParameter, чтобы сообщить об условии неправильного использования этой функции:

%if TYPE(param.Value) == "Matrix"
    %% exit if the parameter is a true matrix,
    %% i.e., has more than one row or columns.
    %if nRows > 1
      %assign errTxt = "Must access parameter %<param.Name> using "...
        "LibBlockMatrixParameter."
      %<LibBlockReportError([], errTxt)>
    %endif
  %endif

Просмотрите файлы в папке matlabroot/rtw/c/tlc (открытой) для большего количества примеров использования LibBlockReportError.

Генерация ошибок из файлов TLC

Ошибочный обзор генерации TLC

Чтобы сгенерировать ошибки из файлов TLC, можно использовать директиву %exit. Также можно использовать одну из библиотечных функций, описанных ниже этого, вызывает %exit для вас. Два типа ошибок

Ошибки использования

Они могут быть вызваны неправильными моделями.

Критический (внутренний) TLC кодирование ошибок

Они не могут быть вызваны неправильными моделями.

Ошибки использования

Ошибки использования являются ошибками, следующими из неправильных моделей или атрибутов, заданных на модели. Например, предположите, что у вас есть Блок s-function и встроенный файл TLC для определенного устройства D/A. Если модель может содержать только одну копию этой S-функции, то ошибка должна быть сгенерирована для модели, которая содержит две копии этого Блока s-function.

Используя Библиотечные функции.  Чтобы сгенерировать ошибки использования, связанные с определенным блоком, используйте библиотечную функцию

LibBlockReportError(block,"error string")

Аргумент block является записью блока, если это не ограничено по объему. Если блок в настоящее время ограничен по объему, то можно задать block как [].

Чтобы сгенерировать общие ошибки использования, которые не связаны с определенным блоком, использовать

LibReportError("error string")

Эти библиотечные функции снабжают префиксом строку Simulink Coder Error: к сообщению, которое вы предоставляете при создании отчетов об ошибке.

Для примера использования этих функций обратитесь к gensfun.tlc для блочных ошибок и commonsetup.tlc для распространенных ошибок. Существуют другие файлы, которые используют эти функции в исходных папках TLC в matlabroot/rtw/c/tlc (открытый.

Критический (внутренний) TLC кодирование ошибок

Предположим, что у вас есть S-функция, которая имеет локальную функцию, которая может принять только числовые числа. Вы можете хотеть добавить assert, требующий что входные параметры быть только числовыми числами. Они утверждают, может указать на критические ошибки кодирования, к которым у пользователя нет способа создать модель или задать атрибуты, которые могут вызвать ошибку произойти.

Используя Библиотечные функции.  Две доступных библиотечных функции

LibBlockReportFatalError(block,"fatal coding error message")

где block является незаконной записью блока (или [], если блок уже ограничен по объему), и

LibReportFatalError("fatal coding error message")

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

%if TYPE(argument) != "Number" 
  %<LibBlockReportFatalError(block,"unexpected argument type")>
%endif

Эти библиотечные функции снабжают префиксом строку Simulink Coder Fatal: к сообщению, которое вы обеспечиваете и отображаете стек вызовов при создании отчетов об ошибке.

Для примера использования этих функций обратитесь к gensfun.tlc для блочных ошибок и commonsetup.tlc для распространенных ошибок. Существуют другие файлы, которые используют эти функции в (открытой) папке matlabroot/rtw/c/tlc.

Используя %exit.  Можно вызвать %exit, чтобы сгенерировать сообщения о фатальной ошибке. Однако MathWorks предлагает, чтобы вы использовали одну из библиотечных функций, описанных выше.

При генерации сообщений о фатальной ошибке непосредственно с %exit, это - хорошая практика, чтобы дать трассировку стека с сообщением об ошибке. Это позволяет вам видеть цепочку вызовов функций, которые вызвали ошибку. Чтобы сгенерировать трассировку стека, сгенерируйте сообщение с помощью формата:

%setcommandswitch "-v1"
%exit Simulink Coder Fatal: error string

Форматирование сообщений об ошибке

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

%openfile message
My message text
with newlines
%closefile message

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

%<LibReportError(message)>

Библиотечные функции сообщения об ошибке обеспечивают префикс сообщения об ошибке, такой как Simulink Coder Error:.

Тестирование сообщений об ошибке

Это настоятельно рекомендуется, что вы тестируете свои сообщения об ошибке прежде, чем выпустить ваш новый код TLC. Чтобы протестировать ваши сообщения об ошибке, скопируйте соответствующие нормы в файл test.tlc и выполнение

tlc test.tlc

в подсказке MATLAB®.

Используя сообщения об ошибке TLC, чтобы диагностировать

Этот раздел перечисляет и описывает сообщения об ошибке, сгенерированные целевым Языковым компилятором. Используйте эту ссылку на

  • Подтвердите, что об ошибке сообщили

  • Определите возможные причины для ошибки

  • Определите возможные способы зафиксировать ошибку

%closefile или %selectfile или %flushfile аргумент должны быть допустимым открытым файлом

В %closefile или %selectfile или %flushfile, аргумент должен быть переменной правильного файла, открытой с %openfile.

%define, больше не поддержанные, используйте %function вместо этого

Макросы не поддержаны. Необходимо переписать макросы как функции или встроить их в коде.

Директива %error: text

Код, содержащий директиву %error, генерирует это сообщение. Это обычно указывает на некоторое условие, которое код не мог обработать и отображает текст после директивы %error.

Директива %exit: text

Код, содержащий директиву %exit, вызывает это сообщение. Это обычно указывает на некоторое условие, которое код не мог обработать и отображает текст после директивы %exit. Обратите внимание на то, что эта директива заставляет Компилятор Выходного языка останавливаться независимо от параметра командной строки -mnumber.

%filescope уже использовался в этом файле

Пользователь попытался использовать директиву %filescope несколько раз в файле.

Директива %trace: text

Директива %trace производит это сообщение об ошибке и отображает текст после директивы %trace. Проследите директивы, сообщаются только, когда опция -v (многословный режим) появляется на командной строке. Обратите внимание на то, что директивы %trace не рассматриваются ошибками и не заставляют Компилятор Выходного языка прекращать обрабатывать.

Директива %warning: text

Директива %warning производит это сообщение об ошибке и отображает текст после директивы %warning. Обратите внимание на то, что директивы %warning не рассматриваются ошибками и не заставляют Компилятор Выходного языка прекращать обрабатывать.

%implements директива должна появиться в файле шаблона блока и должна совпадать с %language и заданным типом

Файл шаблона блока был найден, но он не содержал директиву %implements. Директива %implements требуется так, чтобы ожидаемый язык и тип были реализованы этим файлом шаблона блока. Смотрите Объектно-ориентированное Средство для Генерации Целевого Кода для получения дополнительной информации.

%switch оператор может только иметь один %default

Пользователь записал оператор %switch с несколькими случаями %default , как в следующем примере:

%switch expr
  %case 1
    code...
    %break
  %default
    
more code...
    %break
  %default		  %% error
    even more code...
    %break
%endswitch

Выбор языка должен быть сделан с помощью %language директивы до использования, ГЕНЕРИРУЮТ или GENERATE_TYPE

Чтобы использовать GENERATE или встроенные функции GENERATE_TYPE, Компилятор Выходного языка требует, чтобы вы сначала задали сгенерированный язык. Это заставляет конечный файл блочного уровня реализовывать тот же язык и тип, как задано в директиве %language.

Неоднородный вектор был передан GENERATE_FORMATTED_VALUE

Встроенный GENERATE_FORMATTED_VALUE может обработать только векторы, которые имеют гомогенные элементы (то есть, векторы, в которых все элементы имеют тот же тип).

Противоречивая ссылка к identifier — должна использовать индекс массива, чтобы относиться к одному из нескольких осциллографов

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

Database file:
block
{
	Name				"Abc2"
	Parameter {
		Name			"foo"
		Value			2
	}
}
block
{
	Name				"Abc3"
	Parameter {
		Name			"foo"
		Value			3
	}
}
TLC file:
%<GETFIELD(block, "Name")>

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

%<GETFIELD(block[0], "Name")>

%if оператор может только иметь один %else

Пользователь записал оператор %if с несколькими блоками %else, как в следующем примере:

%if expr
  code...
%else
  more code...
%else          %% error
  even mode code...
%endif

Аргумент к identifier должен быть строкой

Следующие встроенные функции ожидают строку и сообщают об этой ошибке, если аргумент передал, не строка.

CASTGENERATE_FILENAME
EXISTSGENERATE_FUNCTION_EXISTS
FEVALGENERATE_TYPE
FILE_EXISTSGET_COMMAND _SWITCH
FORMATIDNUM
GENERATESYSNAME

Аргументы к directive должны быть записями

Аргументы к %mergerecord и %copyrecord должны быть записями. Кроме того, первый аргумент к следующим встроенным функциям должен быть записью:

  • ISALIAS

  • REMOVEFIELD

  • FIELDNAMES

  • ISFIELD

  • GETFIELD

  • SETFIELD

Аргументы к TLC из командной строки MATLAB должны быть строками

Попытка была предпринята, чтобы вызвать Target Language Compiler from MATLAB, но некоторые аргументы, которые были переданы, не были строками.

Утверждение перестало работать

Выражение в операторе %assert, оцененном ко лжи.

Присвоение, чтобы определить объем identifier только позволено при использовании + оператор, чтобы добавить участников

Присвоением осциллографа должен быть scope = scope + variable.

Попытайтесь задать функциональный идентификатор сверху существующей переменной или функции

Функция не может быть задана дважды. Убедитесь, что у вас нет той же функции, определяемой в отдельных файлах TLC.

Попытайтесь разделиться на нуль

Компилятор Выходного языка не позволяет деление на нуль.

Плохо бросьте - не могущий бросить это выражение к type

Компилятор Выходного языка не может бросить это выражение от своего текущего типа до заданного типа. Например, Компилятор Выходного языка не может бросить строку к номеру, как в

%assign x = "1234"
%assign y = CAST("Number", x );

Плохая директория (dirname) в O: filename

Опция -O не задавала допустимую папку.

builtin ожидал выражение типа type, получил один из типа type

Встроенное было передано выражение неправильного типа.

Не может %undef никакие встроенные функции или переменные

Пользователю не разрешают не задать встроенное TLC или переменное. Например,

%undef FORMAT  %% error

Не может преобразовать представляют в виде строки your_string к номеру

Не может преобразовать строку в номер.

Изменение значения identifier из файла RTW

Вы перезаписали значение, которое появилось в файле .rtw.

Ошибка, открывающая filename

Компилятор Выходного языка не мог открыть файл, заданный на командной строке.

Ошибка, пишущая, чтобы зарегистрировать error

Была ошибка при записи в поток текущей производительности; error содержит систему определенное сообщение об ошибке.

Ошибки произошли — прерывание

Это сообщение об ошибке является последней ошибкой, о которой сообщат. Это происходит когда также

  • Количество сообщений об ошибке превышает порог сообщения об ошибке (5 по умолчанию).

  • Обработка завершается, и ошибки произошли.

Направляющий % расширения <> не может быть вложен

Это недопустимо, чтобы вложить директивы расширения. Например,

%<foo(%<expr>)>

Вместо этого сделайте следующее:

%assign tmp = %<expr>
%<foo(tmp)>

Направляющий % расширения <> не может охватить несколько строк; используйте \в конце строки

Директива расширения не может охватить несколько строк. Чтобы работать вокруг этого ограничения, используйте \символ продолжения строки. Следующее является неправильным:

%<CompiledModel.System[Sysidx].Block[BlkIdx].Name + 
"Hello">

Вместо этого используйте:

%<CompiledModel.System[Sysidx].Block[BlkIdx].Name + \
"Hello">

Дополнительные аргументы к встроенной функции function-name были проигнорированы (Предупредив)

Следующие встроенные функции сообщают об этом предупреждении, когда слишком много аргументов передаются им:

CASTNUMTLCFILES
EXISTSOUTPUT_LINES
FILE_EXISTSSIZE
FORMATSTRING
GENERATE_FILENAMESTRINGOF
GENERATE_FUNCTION_EXISTSSYSNAME
IDNUMTLCFILES
ISFINITETYPE
ISINFWHITE_SPACE
ISNANWILL_ROLL

Имя файла слишком долго (директория =dirname, назовите =filename),

Заданный filename был слишком длинным. Пределы по умолчанию являются 256 символами для filename и 1 024 символами для dirname, но пределы могут быть больше, в зависимости от платформы.

format не является легальным значением формата

Заданный формат не был законен для директивы %realformat. Строками допустимого формата является "EXPONENTIAL" и "CONCISE".

Несоответствие аргумента функции; функциональный function_name ожидает аргументы number

При вызывании функции слишком многие или слишком мало аргументов были переданы ему.

Функция достигла конца и не возвращала значение

Функции, которые не объявляются как void или Output, должны возвратить значение. Если возвращаемое значение не желаемо, объявите функцию как void, в противном случае заставьте его возвратить значение.

Значения функции не позволены

Попытайтесь использовать функцию TLC в качестве переменной.

Идентификатор identifier умножается заданный. Проигнорированы вторые и последующие определения.

Пользователь пытается добавить то же поле в запись несколько раз, как в следующем коде.

%createrecord err { foo 1; rec { val 2 } }
%addtorecord err foo 2             %% error

Идентификатор identifier, используемый на %foreach операторе уже, был в осциллографе (Предупреждение)

Аргумент к оператору %foreach не может быть задан до ввода %foreach.

Недопустимое использование eval (т.е. % <...>)

Это недопустимо, чтобы использовать evals в файлах .rtw. Существуют также некоторые места, где evals не позволены в директивах. Например:

%function %<foo>(a, b, c) void  %% error
%endfunction

Индексы не могут быть отрицательными

Индекс, используемый в [] выражение, должен быть неотрицательным целым числом.

Индексы должны быть постоянными целыми числами

Индекс, используемый в [] выражение, должен быть целым числом.

Недопустимый указатель

Недопустимый указатель был передан режиму сервера Компилятора Выходного языка.

Недопустимая область значений идентификатора, ведущие строки string1 и string2 должна соответствовать

В области значений сигналов, например, u1:u10, идентификатор в первом аргументе не совпадал с идентификатором во втором.

Недопустимая область значений идентификатора, нижняя граница (bound) должна быть меньше, чем верхняя граница (bound)

В области значений сигналов, например, u1:u10, нижняя граница была выше, чем верхняя граница.

Недопустимый тип для унарного operator

Унарные операторы и + требуют числовых типов. Унарный оператор требует целочисленного типа. Унарный оператор ! требует числового типа.

Недопустимый тип type

Недопустимый тип был передан встроенной функции.

Это недопустимо, чтобы возвратить функцию в функцию

Значение функции не может быть возвращено от вызова функции.

Названное значение identifier уже существует в этом scope-identifier; используйте %assign, чтобы изменить значение

Вы не можете использовать оператор сложения блока +, чтобы добавить значение, которое уже является членом обозначенного блока. Используйте %assign, чтобы изменить значение существующего значения. Этот пример производит эту ошибку:

%assign x = BLK { a 1; b 2 }
%assign a = 3
%assign x = x + a

Используйте это вместо этого:

%assign x.a = 3

Никакой %case оператор (операторы) еще не замечен, оператор проигнорирован

Операторы, которые появляются в операторе %switch, но предшествуют операторам %case, проигнорированы, как в следующем коде:

%switch expr
%assign x = 2  %% this statement will be ignored
  %case 1
    code
    %break
%endswitch

Только дважды и символьные массивы могут быть преобразованы от MATLAB до TLC. Это может произойти, если функция MATLAB не возвращает значение (см. %matlab),

Только дважды и символьные массивы могут быть преобразованы от MATLAB до Компилятора Выходного языка. Эта ошибка может произойти, если функция MATLAB не возвращает значение (см. %matlab). Например,

%assign a = FEVAL("int8",3)
%matlab disp(a)

Только один вывод позволен от TLC

Попытка была предпринята, чтобы получить несколько выходных параметров от версии MATLAB Компилятора Выходного языка.

Только строки длины 1 могут быть присвоены с помощью [] обозначение

Правая сторона присвоения строки с помощью [] оператор должна быть строкой длины 1. Можно заменить только отдельный символ с помощью этого обозначения.

Только строки или ячейки строк могут использоваться в качестве аргумента, чтобы Запросить и ExecString

Ячейка, содержащая данные о нестроке, была передана в качестве третьего аргумента Query или ExecString в режиме сервера.

Только векторы той же длины как существующее векторное значение могут быть присвоены с помощью [] обозначение

В [] обозначение, чтобы заменить строку матрицы, строка должна быть вектором той же длины как существующие строки.

Выходной файл identifier, открытый с %openfile, не был закрыт

Выходные файлы, открытые с %openfile, должны быть закрыты с %closefile. identifier является именем переменной, заданной в директиве %openfile.

Примечание

Эта сила также происходит, синтаксическая ошибка присутствует в секции кода между openfile и closefile, или при попытке присвоить вывод функции типа void или Output к переменной.

Области значений, области значений идентификатора и повторные значения не могут быть повторены

Вы не можете повторить область значений, область значений идентификатора, или повторить значение. Это предотвращает вещи как [1@2@3].

Строка не может изменить установку для переключателя командной строки '-switch'

%setcommandswitch не распознает заданный переключатель или не может изменить его (например, -r не может быть изменен).

string не является распознанным определяемым пользователем свойством этого указателя

Запрос, выполняемый на указателе режима сервера TLC, ищет неопределенное свойство.

SyntaxError

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

%break директива может только появиться в %foreach, %for, %roll, или %switch оператор

Директива %break может использоваться только в %foreach, %for, %roll или операторе %switch.

%case и %default директивы могут только использоваться в %switch операторе

%case или директива %default могут появиться только в операторе %switch.

%continue директива может только появиться в %foreach, %for, или %roll оператор

Директива %continue может использоваться только в %foreach, %for или операторе %roll.

%foreach оператор ожидает постоянный числовой аргумент

Аргумент %foreach должен быть числовым типом. Например:

%foreach Index = [1 2 3 4]
...
%endforeach

%foreach не может принять вектор как вход.

%if оператор ожидает постоянный числовой аргумент

Аргумент оператора %if должен быть числовым типом. Например,

%if [ 1 2 3 ]
...
%endif

%if не может принять вектор как вход.

%implements директива ожидает вектор строки или строки как список языков

Можно использовать директиву %implements, чтобы задать строку для языка, реализовываемого или указать, что это реализует несколько языков при помощи вектора строк. Вы не можете задать никакой другой тип аргумента к директиве %implements.

%implements директива задает тип как type, где type ожидался

Тип, заданный в директиве %implements, должен точно совпадать с типом, заданным в блоке или на директиве GENERATE_TYPE. Если вы хотите указать, что блок принимает несколько входных типов, используйте директиву %implements *, как в

%implements * "C"   %% I accept any type and generate C code

%implements язык не совпадает с языком, в настоящее время сгенерированным (language)

Язык или языки, заданные в директиве %implements, должны точно совпадать с директивой %language.

%return оператор может только появиться в теле функции

Оператор %return может быть только в теле функции.

== и! = операторы могут только использоваться, чтобы сравнить значения того же типа

== и! = аргументы оператора должны быть тем же типом. Можно использовать встроенную функцию CAST(), чтобы изменить их в тот же тип.

Аргумент для %openfile должен быть допустимой строкой

Когда вы открываете выходной файл, имя, заданное для файла, должно быть допустимой строкой.

Аргумент для %with должен быть допустимым осциллографом

Аргумент к %with должен быть допустимым идентификатором осциллографа. Например,

%assign x = 1
%with x
...
%endwith

В этом коде аргумент оператора %with является номером и производит это сообщение об ошибке.

Аргумент для [] операция должен быть повторным символом осциллографа, вектором или матрицей

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

%openfile x
%assign y = x[0]

Этот пример вызывает эту ошибку, потому что x является файлом и не допустим для индексации.

Аргумент к %addincludepath должен быть допустимой строкой

Аргумент к %addincludepath должен быть строкой.

Аргумент к %include должен быть допустимой строкой

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

Начать директива должна быть в том же файле как соответствующая директива конца.

Они Компилятор Выходного языка директивы begin должны появиться в том же файле как их соответствующие директивы end: %function, %switch, %foreach, %roll и %for. Поместите построение полностью в одном исходном файле Компилятора Выходного языка.

Директива begin по этой строке не имеет никакого соответствия директива end

Для ограниченных по объему блоком директив производится эта ошибка, если соответствующая директива end отсутствует. Эта ошибка может произойти для следующих ограниченных по объему блоком Директив компилятора Выходного языка.

Начните директивуДиректива концаОписание
%if%endif

Условное включение

%for%endfor

Цикличное выполнение

%foreach%endforeach

Цикличное выполнение

%roll%endroll

Прокрутка цикла

%with%endwith

Определение объема директивы

%switch%endswitch

Директива переключателя

%function%endfunction

Директива объявления функции

{}

Создание записи

Об ошибке сообщают относительно строки, которая открывает осциллограф и не имеет соответствия с осциллографом end.

Примечание

Вложенные осциллографы должны быть закрыты перед их родительскими осциллографами. Отказ включать end для вложенного осциллографа часто вызывает эту ошибку, как в

%if Block.Name == "Sin 3" 
    %foreach idx = Block.Width %endif  
%% Error reported here that the %foreach was not terminated

Построение %matlab function_name (...) создает, недопустимо в автономном tlc

Вы не можете вызвать MATLAB от автономного TLC.

FEVAL () функция может принять только 2-мерные массивы из MATLAB, не размерности номера

Возвращаемые значения из MATLAB могут иметь самое большее две размерности.

FEVAL () функция может принять векторы чисел или представляет в виде строки только при вызове MATLAB

Векторы, переданные MATLAB, могут быть числами или строками. См. Функцию FEVAL.

FEVAL () функция требует, чтобы имя функции вызвало

FEVAL требует, чтобы функция вызвала. Эта ошибка появляется только в MATLAB.

Итоговый аргумент к %roll должен быть допустимой областью действия блока

Когда вы используете %roll, итоговый аргумент (до заданных дополнительными пользователями аргументов) должен быть допустимой областью действия блока. См. %roll для описания этой команды.

Первый аргумент a?: оператором должно быть Булево выражение

Оператор ? : должен иметь Булево выражение как свой первый операнд.

Первый аргумент, который СГЕНЕРИРУЕТ или GENERATE_TYPE, должен быть допустимым осциллографом

Когда вы вызываете GENERATE или GENERATE_TYPE, первый аргумент должен быть допустимым осциллографом. Смотрите ГЕНЕРИРОВАТЬ и Функции GENERATE_TYPE для получения дополнительной информации и примеры.

Функциональный name требует, по крайней мере, аргументов number

Пользователь передает слишком мало аргументов функции, как в следующем коде:

%function foo(a, b, c)
  %return a + b + c
%endfunction

%<foo(1, 2)>  %% error

СГЕНЕРИРОВАТЬ функция требует по крайней мере 2 аргументов

Когда вы вызываете встроенную функцию GENERATE, первые два аргумента должны быть блоком и именем функции, чтобы вызвать.

Функция GENERATE_TYPE требует по крайней мере 3 аргументов

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

ISINF (), ISNAN (), ISFINITE (), ДЕЙСТВИТЕЛЬНЫЙ (), и IMAG () функции ожидают действительный или комплексный ценный аргумент

Эти функции ожидают Real или комплексное число как входной параметр.

Реализовываемый язык не может быть изменен в файле шаблона блока

Вы не можете изменить язык с помощью директивы %language в файле шаблона блока.

Реализовываемый язык изменился от old-language до new-language (Предупреждение)

Реализовываемый язык не должен быть изменен в середине реки, потому что вызовы функции GENERATE, которые появляются до директивы %language, могут заставить функции generate загружать для предшествующего языка. Только одна директива языка должна появиться в данном файле.

Левая сторона a. оператора должна быть допустимым идентификатором осциллографа

Когда вы используете оператор ., левая сторона оператора . должна быть допустимым идентификатором в осциллографе. Например:

%assign x = 1
%assign y = x.y

В этом коде ссылка на x.y производит это сообщение об ошибке, потому что x не задан как осциллограф.

Левая сторона присвоения должна быть простым выражением, состоявшим из., [], и идентификаторы

Недопустимая левая сторона присвоения.

Количество столбцов, заданных (specified-columns), не совпадало с фактическим количеством столбцов в строках (actual-columns)

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

%assign mat = Matrix(2,1) [[1,2];[2,3]]

В этом случае количество столбцов в объявлении матрицы (1) не совпадало с количеством столбцов, замеченных в матрице (2). Или измените количество столбцов в матрице или измените матричное объявление.

Количество строк, заданных (specified-rows), не совпадало с фактическим количеством строк, замеченных в матрице (actual-rows)

Когда вы задаете матрицу Компилятора Выходного языка, количество строк должно совпадать с фактическим количеством строк в матрице. Например,

%assign mat = Matrix(1,2) [[1,2];[2,3]]

В этом случае количество строк в объявлении матрицы (1) не совпадало с количеством строк, замеченных в матрице (2). Или измените количество строк в матрице или измените матричное объявление.

Оператор operator_name только работает над булевыми аргументами

&& и операторы || работают только над булевыми значениями.

Оператор operator_name только работает над интегральными аргументами

&, ^, |, <<, >> и операторы % работают над числами только.

Оператор operator_name только работает над числовыми аргументами

Аргументы к следующим операторам оба должны быть или числовыми или действительными: <, <=, >, >=, -, *, /. Эта ошибка может также произойти, когда вы используете + в качестве унарного оператора. Кроме того, встроенная функция FORMAT ожидает или числовой или действительный аргумент.

Возвращаемое значение от функции RollHeader должно быть строкой

Когда вы используете %roll, функция RollHeader(), заданная в Roller.tlc, должна возвратить значение строки. См. %roll для полного обсуждения построения %roll.

Аргумент списка к %roll должен быть непустым вектором чисел или областей значений

Когда вы используете %roll, вектор roll не может быть пустым и должен содержать числа или области значений чисел. См. %roll для полного обсуждения построения %roll.

Второе значение в Области значений должно быть больше, чем первое значение

В области значений, например, 1:10, нижняя граница была выше, чем верхняя граница.

Заданным индексом (index) был вне области значений 0 - number-of-elements - 1

Эта ошибка происходит, когда вы индексируете в нескалярное вне конца переменной. Например:

%assign x = [1 2 3]
%assign y = x[3]

Этот пример вызвал бы эту ошибку. Помните в Компиляторе Выходного языка, индексы массива запускаются в 0 и переходят к числу элементов минус 1.

Встроенная функция STRINGOF ожидает вектор чисел в качестве его аргумента

Функция STRINGOF ожидает вектор чисел. Функция обрабатывает каждый номер как значение ASCII допустимого символа.

Встроенная функция SYSNAME ожидает входную строку формы xxx/yyy

Функция SYSNAME берет одну строку формы xxx/yyy, как это появляется в файле .rtw и возвращает вектор двух строк, xxx и yyy. Если входной параметр не совпадает с этим форматом, SYSNAME возвращает эту ошибку.

Порог на %roll операторе должен быть одним номером

Когда вы используете %roll, заданный порог списка должен быть одним номером. См. %roll для полного обсуждения построения %roll.

Использование feature удерживается от использования и не будет поддерживаться в будущих версиях TLC. См. руководство TLC для альтернатив.

%define и директивы %generate не рекомендуются, когда они заменяются.

WILL_ROLL, созданный в функции, ожидает вектор области значений и целочисленный порог

Функция WILL_ROLL требует обоих аргументов, процитированных в сообщении.

Нет никаких более свободных контекстов. Используйте tlc ('близко', УКАЗАТЕЛЬ) к свободному контекст

Глобальная таблица контекста заполнилась, в то время как режим сервера TLC используется.

Не было никакого типа, сопоставленного с данным блоком для, ГЕНЕРИРУЮТ

Осциллограф, заданный к GENERATE, должен включать параметр Type, который указывает, какой файл шаблона должен использоваться, чтобы сгенерировать код для заданного осциллографа. Например:

%assign scope = block { Name "foo" }
%<GENERATE( scope, "Output" )>

Этот пример производит сообщение об ошибке, потому что осциллограф не включает параметр Type. Смотрите ГЕНЕРИРОВАТЬ и Функции GENERATE_TYPE для получения дополнительной информации и примеры.

Это присвоение перезаписало бы пару значения идентификатора из файла RTW. Чтобы избежать этой ошибки или квалифицировать левую сторону, или выбирают другой идентификатор.

Пользователь пытается изменить поле записи в блоке %with, не квалифицируя левую сторону, как в этом примере:

  %createrecord foo { field 1 }
  %with foo
    %assign field = 2  %% error
  %endwith

Вместо этого используйте

%createrecord foo { field 1 }
  %with foo
    %assign foo.field = 2
  %endwith

TLC пропустил символы number. Вы, возможно, создали циклическую запись. Если это не случай затем сообщите об этой утечке MathWorks.

Была утечка памяти при выполнении TLC. Наиболее распространенная причина этого имеет циклические записи.

Не удалось найти identifier в осциллографе scope-identifier

Данный идентификатор не был найден в заданном осциллографе. Например,

%assign scope = ascope { x 5 }
%assign y = scope.y

В этом коде ссылка на scope.y производит это сообщение об ошибке.

Не удалось открыть %include файл filename

Файл, включенный в директиву %include, не был найден на пути. Или переместите файл в местоположение на текущем пути или используйте параметр командной строки -I или директиву %addincludepath, чтобы задать папку, которая содержит файл.

Не удалось открыть файл шаблона блока filename от ГЕНЕРИРУЮТ или GENERATE_TYPE

Вы задали GENERATE, но данное имя файла не было найдено на пути к Компилятору Выходного языка. Вы можете

  • Добавьте файл в папку на пути.

  • Используйте директиву %generatefile, чтобы задать альтернативное имя файла для этого типа блока, который находится на пути.

  • Добавьте папку, в которой этот файл появляется к пути поиска файлов с помощью параметра командной строки -I или директивы %addincludepath.

Не удалось открыть выходной файл filename

Заданный выходной файл не мог быть открыт. Или недопустимое имя файла было задано или файл, было только для чтения.

Неопределенный идентификатор identifier_name

Идентификатор, заданный в этом выражении, был не определен.

Неизвестный тип type в Выражении приведения типа

Когда вы вызываете встроенную функцию CAST, тип должен быть допустимым типом от Таблицы типов Значения Выходного языка.

Нераспознанный переключатель командной строки передал строке: switch

Вы запросили текущее состояние переключателя, но заданный переключатель не был распознан.

Нераспознанный направляющий directive-name замечен

Столкнулись с недопустимой директивой %. Допустимые директивы показывают ниже.

%addincludepath%addtorecord
%assert%assign
%break=%case
%closefile%continue
%copyrecord%createrecord
%default%define
%else%elseif
%endbody%endfor
%endforeach%endfunction
%endif%endroll
%endswitch%endwith
%error%exit
%filescope%for
%foreach%function
%generate%generatefile
%if%implements
%include%language
%matlab%mergerecord
%openfile%realformat
%return%roll
%selectfile%setcommandswitch
%switch%trace
%undef%warning
%with 

Нераспознанный тип output-type для функции

Функциональным модификатором типа не был Output или void. Для функций, которые не производят вывод, значение по умолчанию без модификатора типа указывает, что функция не должна производить вывод.

Неотключенный многострочный комментарий.

Многострочный комментарий (т.е. / % %/) не имеет терминатора строки, как в следующем коде:

/% my comment

%assign x = 2
%assign y = x * 7

Неотключенная строка

Строка должна быть закрыта до конца директивы расширения или конца строки.

Использование: tlc [опции] файл

Проблема командной строки произошла. Сообщение об ошибке содержит список доступных параметров.

Использование feature подвергается хиту производительности, см. руководство TLC для возможных обходных решений.

%undef и расширение (т.е. %<expr>) функции могут ухудшить производительность.

Значение типа type не может быть сравнено

Значения заданного type не могут быть сравнены.

Значения типа specified_type не могут быть расширены

Заданный тип не может использоваться на директиве расширения. Файлы и осциллографы не могут быть расширены. Эта ошибка может также произойти, когда вы расширяете функцию без любых аргументов. Если вы используете

%<Function>

вызовите его с обязательными аргументами.

Значения типа Специальное, Макрорасширение, Функция, Файл, Полный Идентификатор и Индекс не могут быть преобразованы в переменные MATLAB

Значения типов, перечисленных в сообщении, не могут преобразованный в переменные MATLAB.

При добавлении к буферному потоку переменная должна быть строкой

Можно задать опцию append для буферного потока, только если переменная в настоящее время существует как строка. Не используйте опцию append, если переменная не существует или не является строкой. Этот пример производит эту ошибку.

%assign x = 1
%openfile x , "a"
%closefile x

Сообщения об ошибке библиотеки функции TLC

Функции в библиотеке функции TLC могут сгенерировать много сообщений об ошибке, которые не документируются. Эти сообщения являются достаточно самодокументированными так, чтобы им не было нужно дополнительное объяснение. Однако, если вы сталкиваетесь с сообщением об ошибке, которое не предоставляет достаточно описания, чтобы разрешить вашу проблему, связывается с нашим штатом технической поддержки.

Похожие темы