Вы можете должны быть обнаружить и сообщить о состоянии ошибки в вашем коде 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, можно использовать директиву %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
Предположим, что у вас есть 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®.
Этот раздел перечисляет и описывает сообщения об ошибке, сгенерированные целевым Языковым компилятором. Используйте эту ссылку на
Подтвердите, что об ошибке сообщили
Определите возможные причины для ошибки
Определите возможные способы зафиксировать ошибку
В %closefile
или %selectfile
или %flushfile
, аргумент должен быть переменной правильного файла, открытой с %openfile
.
Макросы не поддержаны. Необходимо переписать макросы как функции или встроить их в коде.
text
Код, содержащий директиву %error
, генерирует это сообщение. Это обычно указывает на некоторое условие, которое код не мог обработать и отображает текст после директивы %error
.
text
Код, содержащий директиву %exit
, вызывает это сообщение. Это обычно указывает на некоторое условие, которое код не мог обработать и отображает текст после директивы %exit
. Обратите внимание на то, что эта директива заставляет Компилятор Выходного языка останавливаться независимо от параметра командной строки -mnumber
.
Пользователь попытался использовать директиву %filescope
несколько раз в файле.
text
Директива %trace
производит это сообщение об ошибке и отображает текст после директивы %trace
. Проследите директивы, сообщаются только, когда опция -v
(многословный режим) появляется на командной строке. Обратите внимание на то, что директивы %trace
не рассматриваются ошибками и не заставляют Компилятор Выходного языка прекращать обрабатывать.
text
Директива %warning
производит это сообщение об ошибке и отображает текст после директивы %warning
. Обратите внимание на то, что директивы %warning
не рассматриваются ошибками и не заставляют Компилятор Выходного языка прекращать обрабатывать.
Файл шаблона блока был найден, но он не содержал директиву %implements
. Директива %implements
требуется так, чтобы ожидаемый язык и тип были реализованы этим файлом шаблона блока. Смотрите Объектно-ориентированное Средство для Генерации Целевого Кода для получения дополнительной информации.
Пользователь записал оператор %switch
с несколькими случаями %default
, как в следующем примере:
%switch expr %case 1 code... %break %default more code... %break %default %% error even more code... %break %endswitch
Чтобы использовать GENERATE
или встроенные функции GENERATE_TYPE
, Компилятор Выходного языка требует, чтобы вы сначала задали сгенерированный язык. Это заставляет конечный файл блочного уровня реализовывать тот же язык и тип, как задано в директиве %language
.
Встроенный 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 expr code... %else more code... %else %% error even mode code... %endif
identifier
должен быть строкойСледующие встроенные функции ожидают строку и сообщают об этой ошибке, если аргумент передал, не строка.
CAST | GENERATE_FILENAME |
EXISTS | GENERATE_FUNCTION_EXISTS |
FEVAL | GENERATE_TYPE |
FILE_EXISTS | GET_COMMAND _SWITCH |
FORMAT | IDNUM |
GENERATE | SYSNAME |
directive
должны быть записямиАргументы к %mergerecord
и %copyrecord
должны быть записями. Кроме того, первый аргумент к следующим встроенным функциям должен быть записью:
ISALIAS
REMOVEFIELD
FIELDNAMES
ISFIELD
GETFIELD
SETFIELD
Попытка была предпринята, чтобы вызвать 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
Встроенное было передано выражение неправильного типа.
Пользователю не разрешают не задать встроенное 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
были проигнорированы (Предупредив)Следующие встроенные функции сообщают об этом предупреждении, когда слишком много аргументов передаются им:
CAST | NUMTLCFILES |
EXISTS | OUTPUT_LINES |
FILE_EXISTS | SIZE |
FORMAT | STRING |
GENERATE_FILENAME | STRINGOF |
GENERATE_FUNCTION_EXISTS | SYSNAME |
IDNUM | TLCFILES |
ISFINITE | TYPE |
ISINF | WHITE_SPACE |
ISNAN | WILL_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
.
Это недопустимо, чтобы использовать 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
Операторы, которые появляются в операторе %switch
, но предшествуют операторам %case
, проигнорированы, как в следующем коде:
%switch expr %assign x = 2 %% this statement will be ignored %case 1 code %break %endswitch
Только дважды и символьные массивы могут быть преобразованы от MATLAB до Компилятора Выходного языка. Эта ошибка может произойти, если функция MATLAB не возвращает значение (см. %matlab
). Например,
%assign a = FEVAL("int8",3) %matlab disp(a)
Попытка была предпринята, чтобы получить несколько выходных параметров от версии MATLAB Компилятора Выходного языка.
Правая сторона присвоения строки с помощью [] оператор должна быть строкой длины 1. Можно заменить только отдельный символ с помощью этого обозначения.
Ячейка, содержащая данные о нестроке, была передана в качестве третьего аргумента Query
или ExecString
в режиме сервера.
В [] обозначение, чтобы заменить строку матрицы, строка должна быть вектором той же длины как существующие строки.
identifier
, открытый с %openfile, не был закрытВыходные файлы, открытые с %openfile
, должны быть закрыты с %closefile
.
является именем переменной, заданной в директиве identifier
%openfile
.
Эта сила также происходит, синтаксическая ошибка присутствует в секции кода между openfile
и closefile
, или при попытке присвоить вывод функции типа void
или Output
к переменной.
Вы не можете повторить область значений, область значений идентификатора, или повторить значение. Это предотвращает вещи как [1@2@3]
.
'-switch'
%setcommandswitch
не распознает заданный переключатель или не может изменить его (например, -r
не может быть изменен).
string
не является распознанным определяемым пользователем свойством этого указателяЗапрос, выполняемый на указателе режима сервера TLC, ищет неопределенное свойство.
Обозначенная строка содержит синтаксическую ошибку, для получения дополнительной информации о синтаксисе, см. Директивы компилятора Выходного языка.
Директива %break
может использоваться только в %foreach
, %for
, %roll
или операторе %switch
.
%case
или директива %default
могут появиться только в операторе %switch
.
Директива %continue
может использоваться только в %foreach
, %for
или операторе %roll
.
Аргумент %foreach
должен быть числовым типом. Например:
%foreach Index = [1 2 3 4] ... %endforeach
%foreach
не может принять вектор как вход.
Аргумент оператора %if
должен быть числовым типом. Например,
%if [ 1 2 3 ] ... %endif
%if
не может принять вектор как вход.
Можно использовать директиву %implements
, чтобы задать строку для языка, реализовываемого или указать, что это реализует несколько языков при помощи вектора строк. Вы не можете задать никакой другой тип аргумента к директиве %implements
.
type
, где type
ожидалсяТип, заданный в директиве %implements
, должен точно совпадать с типом, заданным в блоке или на директиве GENERATE_TYPE
. Если вы хотите указать, что блок принимает несколько входных типов, используйте директиву %implements *
, как в
%implements * "C" %% I accept any type and generate C code
language
)Язык или языки, заданные в директиве %implements
, должны точно совпадать с директивой %language
.
Оператор %return
может быть только в теле функции.
== и! = аргументы оператора должны быть тем же типом. Можно использовать встроенную функцию CAST()
, чтобы изменить их в тот же тип.
Когда вы открываете выходной файл, имя, заданное для файла, должно быть допустимой строкой.
Аргумент к %with
должен быть допустимым идентификатором осциллографа. Например,
%assign x = 1 %with x ... %endwith
В этом коде аргумент оператора %with
является номером и производит это сообщение об ошибке.
Когда вы используете [] оператор, чтобы индексировать, выражение слева от скобок должно быть вектором, матрицей, строкой, числовой константой, или повторным идентификатором осциллографа. Когда вы используете индексацию массива на скаляре, константа автоматически скалярная расширенный, и значение скаляра возвращено. Например,
%openfile x %assign y = x[0]
Этот пример вызывает эту ошибку, потому что x
является файлом и не допустим для индексации.
Аргумент к %addincludepath
должен быть строкой.
Аргумент к входной директиве управления файлом должен быть допустимой строкой с именем файла, данным в двойных кавычках.
Они Компилятор Выходного языка директивы 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
function_name
(...) создает, недопустимо в автономном tlcВы не можете вызвать MATLAB от автономного TLC.
Возвращаемые значения из MATLAB могут иметь самое большее две размерности.
Векторы, переданные MATLAB, могут быть числами или строками. См. Функцию FEVAL.
FEVAL
требует, чтобы функция вызвала. Эта ошибка появляется только в MATLAB.
Когда вы используете %roll
, итоговый аргумент (до заданных дополнительными пользователями аргументов) должен быть допустимой областью действия блока. См. %roll для описания этой команды.
Оператор ? :
должен иметь Булево выражение как свой первый операнд.
Когда вы вызываете GENERATE
или GENERATE_TYPE
, первый аргумент должен быть допустимым осциллографом. Смотрите ГЕНЕРИРОВАТЬ и Функции GENERATE_TYPE для получения дополнительной информации и примеры.
name
требует, по крайней мере, аргументов number
Пользователь передает слишком мало аргументов функции, как в следующем коде:
%function foo(a, b, c) %return a + b + c %endfunction %<foo(1, 2)> %% error
Когда вы вызываете встроенную функцию GENERATE
, первые два аргумента должны быть блоком и именем функции, чтобы вызвать.
Когда вы вызываете встроенную функцию GENERATE_TYPE
, первые три аргумента должны быть блоком, имя функции, чтобы вызвать, и тип.
Эти функции ожидают Real
или комплексное число как входной параметр.
Вы не можете изменить язык с помощью директивы %language
в файле шаблона блока.
old-language
до new-language
(Предупреждение)Реализовываемый язык не должен быть изменен в середине реки, потому что вызовы функции GENERATE
, которые появляются до директивы %language
, могут заставить функции generate
загружать для предшествующего языка. Только одна директива языка должна появиться в данном файле.
Когда вы используете оператор .
, левая сторона оператора .
должна быть допустимым идентификатором в осциллографе. Например:
%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
ожидает или числовой или действительный аргумент.
Когда вы используете %roll
, функция RollHeader()
, заданная в Roller.tlc
, должна возвратить значение строки. См. %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
ожидает вектор чисел. Функция обрабатывает каждый номер как значение ASCII допустимого символа.
xxx
/yyy
Функция SYSNAME
берет одну строку формы xxx
/yyy
, как это появляется в файле .rtw
и возвращает вектор двух строк, xxx
и yyy
. Если входной параметр не совпадает с этим форматом, SYSNAME
возвращает эту ошибку.
Когда вы используете %roll
, заданный порог списка должен быть одним номером. См. %roll для полного обсуждения построения %roll
.
feature
удерживается от использования и не будет поддерживаться в будущих версиях TLC. См. руководство TLC для альтернатив.%define
и директивы %generate
не рекомендуются, когда они заменяются.
Функция WILL_ROLL
требует обоих аргументов, процитированных в сообщении.
Глобальная таблица контекста заполнилась, в то время как режим сервера TLC используется.
Осциллограф, заданный к GENERATE
, должен включать параметр Type
, который указывает, какой файл шаблона должен использоваться, чтобы сгенерировать код для заданного осциллографа. Например:
%assign scope = block { Name "foo" } %<GENERATE( scope, "Output" )>
Этот пример производит сообщение об ошибке, потому что осциллограф не включает параметр Type
. Смотрите ГЕНЕРИРОВАТЬ и Функции GENERATE_TYPE для получения дополнительной информации и примеры.
Пользователь пытается изменить поле записи в блоке %with
, не квалифицируя левую сторону, как в этом примере:
%createrecord foo { field 1 } %with foo %assign field = 2 %% error %endwith
Вместо этого используйте
%createrecord foo { field 1 } %with foo %assign foo.field = 2 %endwith
number
. Вы, возможно, создали циклическую запись. Если это не случай затем сообщите об этой утечке MathWorks.Была утечка памяти при выполнении TLC. Наиболее распространенная причина этого имеет циклические записи.
identifier
в осциллографе scope-identifier
Данный идентификатор не был найден в заданном осциллографе. Например,
%assign scope = ascope { x 5 } %assign y = scope.y
В этом коде ссылка на scope.y
производит это сообщение об ошибке.
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
Строка должна быть закрыта до конца директивы расширения или конца строки.
Проблема командной строки произошла. Сообщение об ошибке содержит список доступных параметров.
feature
подвергается хиту производительности, см. руководство TLC для возможных обходных решений.%undef
и расширение (т.е. %<expr>
) функции могут ухудшить производительность.
type
не может быть сравненоЗначения заданного
не могут быть сравнены.type
specified_type
не могут быть расширеныЗаданный тип не может использоваться на директиве расширения. Файлы и осциллографы не могут быть расширены. Эта ошибка может также произойти, когда вы расширяете функцию без любых аргументов. Если вы используете
%<Function>
вызовите его с обязательными аргументами.
Значения типов, перечисленных в сообщении, не могут преобразованный в переменные MATLAB.
Можно задать опцию append
для буферного потока, только если переменная в настоящее время существует как строка. Не используйте опцию append
, если переменная не существует или не является строкой. Этот пример производит эту ошибку.
%assign x = 1 %openfile x , "a" %closefile x
Функции в библиотеке функции TLC могут сгенерировать много сообщений об ошибке, которые не документируются. Эти сообщения являются достаточно самодокументированными так, чтобы им не было нужно дополнительное объяснение. Однако, если вы сталкиваетесь с сообщением об ошибке, которое не предоставляет достаточно описания, чтобы разрешить вашу проблему, связывается с нашим штатом технической поддержки.