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

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

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

Чтобы сообщить о состоянии ошибки, обнаруженном в вашем коде TLC, используйте LibBlockReportError или LibBlockReportFatalError служебные функции. Вот пример использования 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дляКрен, или %switch оператор.

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

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

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

%continue директива может использоваться только в %foreachдля, или %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Крен, и %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 могут сгенерировать много сообщений об ошибке, которые не документируются. Эти сообщения являются достаточно самодокументированными так, чтобы им не было нужно дополнительное объяснение. Однако, если вы сталкиваетесь с сообщением об ошибке, которое не предоставляет достаточно описания, чтобы разрешить вашу проблему, связывается с нашим штатом технической поддержки.

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте