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