Вы можете должны быть обнаружить и сообщить о состоянии ошибки в вашем коде 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 %% erroridentifier используемый на %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дляКрен, или %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Крен, и %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
%endwithnumber символы. Вы, возможно, создали циклическую запись. Если это не случай затем сообщите об этой утечке 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. Для функций, которые не производят выход, значение по умолчанию без модификатора типа указывает, что функция не должна производить выход.
Многострочный комментарий (i.e., / % %/), не имеет терминатора строки, как в следующем коде:
/% 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 могут сгенерировать много сообщений об ошибке, которые не документируются. Эти сообщения являются достаточно самодокументированными так, чтобы им не было нужно дополнительное объяснение. Однако, если вы сталкиваетесь с сообщением об ошибке, которое не предоставляет достаточно описания, чтобы разрешить вашу проблему, связывается с нашим штатом технической поддержки.