Возможно, вам потребуется обнаружить и сообщить об ошибках, условиях в коде 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
Просмотрите файлы в папке
(open) для получения дополнительных примеров использования matlabroot
/ rtw/c/tlcLibBlockReportError
.
Чтобы сгенерировать ошибки из файлов TLC, можно использовать %exit
директива. Кроме того, можно использовать одну из библиотечных функций, описанных ниже, которая вызывает %exit
для тебя. Два типа ошибок:
Ошибки при использовании | Это может быть вызвано неправильными моделями. |
Фатальные (внутренние) ошибки TLC-кодирования | Они не могут быть вызваны неправильными моделями. |
Ошибки использования являются ошибками, возникающими из-за неправильных моделей или атрибутов, определенных в модели. Например, предположим, что у вас есть блок S-Function и встроенный файл TLC для определенного устройства D/A. Если модель может содержать только одну копию этой S-функции, то для модели, которая содержит две копии этого блока S-Function, должна быть сгенерирована ошибка.
Использование функций библиотеки. Чтобы сгенерировать ошибки использования, связанные с определенным блоком, используйте функцию библиотеки
LibBlockReportError(block,"error string")
The 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")
для сообщений об ошибке, которые не являются конкретными блоками. Для примера, чтобы добавить код assert, вы могли бы использовать
%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
The %trace
директива выдает это сообщение об ошибке и отображает текст, следующий за %trace
директива. Директивы трассировки сообщаются только тогда, когда -v
опция (подробный режим) появится в командной строке. Обратите внимание, что %trace
директивы не рассматриваются как ошибки и не заставляют компилятор целевого языка останавливать обработку.
text
The %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
Была предпринята попытка обратиться к компилятору целевого языка из MATLAB, но некоторые переданные аргументы не были строками.
Выражение в %assert
оператор, рассчитанный как ложный.
identifier области видимости
разрешено только при использовании оператора + для добавления представителейНазначение возможностей должно быть scope = scope + variable
.
Функция не может быть определена дважды. Убедитесь, что у вас нет той же функции, определенной в отдельных файлах TLC.
Компилятор целевого языка не допускает деления на нули.
type
Компилятор целевого языка не может привести это выражение от текущего типа к указанному типу. Для примера Target Language Компилятора не может привести строку к числу, как в
%assign x = "1234" %assign y = CAST("Number", x );
dirname
) в O: filename
The -O
опция не задал допустимую папку.
builtin
ожидал выражения типа type
, получил тип type
Встроенный передан выражение неправильного типа.
Пользователь не имеет права не определять встроенную или переменную TLC. Для примера
%undef FORMAT %% error
your_string
в числоНевозможно преобразовать строку в число.
identifier
из файла RTWВы перезаписали значение, появившееся в .rtw
файл.
filename
Компилятору целевого языка не удалось открыть файл, указанный в командной строке.
error
Произошла ошибка при записи в текущий выходной поток; error
содержит системное сообщение об ошибке.
Это сообщение об ошибке является последней сообщаемой ошибкой. Это происходит, когда или
Количество сообщений об ошибках превышает порог сообщения об ошибке (5 по умолчанию).
Обработка завершена, и возникли ошибки.
Незаконно гнездить директивы расширения. Для примера,
%<foo(%<expr>)>
Вместо этого выполните следующее:
%assign tmp = %<expr> %<foo(tmp)>
Директива расширения не может охватывать несколько линии. Чтобы обойти это ограничение, используйте символ продолжения\line. Следующее неверно:
%<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
и 1024 символа для 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 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
. The
- имя переменной, заданное в identifier
%openfile
директива.
Примечание
Это также может произойти синтаксическая ошибка в секции кода между openfile
и closefile
, или если вы пытаетесь назначить выход функции типа void
или Output
в переменную.
Вы не можете повторить область значений, область значений идентификаторов или повторить значение. Это препятствует таким вещам, как [1@2@3]
.
'
%setcommandswitch
не распознает указанный коммутатор или не может его изменить (например -r
не может быть изменен).
string
не является распознанным пользовательским свойством этого указателяЗапрос, выполненный на указателе режима сервера TLC, ищет неопределенное свойство.
Указанная линия содержит синтаксическую ошибку, для получения дополнительной информации о синтаксисе смотрите Директивы компилятора целевого языка.
The %break
директива может использоваться только в %foreach
, %for
, %roll
, или %switch
оператор.
A %case
или %default
директива может появиться только в %switch
оператор.
The %continue
директива может использоваться только в %foreach
, %for
, или %roll
оператор.
Аргумент %foreach
должен быть числовым типом. Для примера:
%foreach Index = [1 2 3 4] ... %endforeach
%foreach
не может принять вектор как вход.
Аргумент %if
оператор должен быть числовым типом. Для примера,
%if [ 1 2 3 ] ... %endif
%if
не может принять вектор как вход.
Можно использовать %implements
директива, чтобы задать строку для реализуемого языка или указать, что она реализует несколько языков с помощью вектора строк. Вы не можете задать другой тип аргумента для %implements
директива.
где type
было ожидаемоТип, заданный в %implements
директива должна точно совпадать с типом, заданным в блоке или на GENERATE_TYPE
директива. Если вы хотите указать, что блок принимает несколько входных типов, используйте %implements *
директива, как в
%implements * "C" %% I accept any type and generate C code
)Язык или языки, указанные в %implements
директива должна точно совпадать с %language
директива.
A %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
директива отсутствует. Эта ошибка может возникнуть для следующих директивов Target Language Compiler с блочным диапазоном.
Начальная директива | Конечная директива | Описание |
---|---|---|
%if | %endif | Условное включение |
%for | %endfor | Перекручивание |
%foreach | %endforeach | Перекручивание |
%roll | %endroll | Контурная прокатка |
%with | %endwith | Директива Scoping |
%switch | %endswitch | Директива Switch |
%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 Function.
FEVAL
требуется функция для вызова. Эта ошибка появляется только в MATLAB.
Когда вы используете %roll
конечный аргумент (перед дополнительными аргументами) должен быть допустимыми возможностями блока. Описание этой команды смотрите в% roll.
The ? :
оператор должен иметь логическое выражение в качестве первого операнда.
Когда вы звоните GENERATE
или GENERATE_TYPE
первый аргумент должен быть допустимыми возможностями. Смотрите функции GENERATE и 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
оператор работает только с логическими аргументамиThe &&
и ||
операторы работают только с логическими значениями.
operator_name
оператор работает только с интегральными аргументамиThe &
, ^
, |
, <<
, >>
и %
операторы работают только с номерами.
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]
Этот пример приведет к этой ошибке. Помните, что в Target Language Compiler индексы массивов начинаются с 0 и переходят к количеству элементов минус 1.
STRINGOF
функция ожидает вектор чисел. Функция рассматривает каждое число как значение ASCII допустимого символа.
/ yyy
SYSNAME
функция принимает одну строку вида xxx
/ yyy
как это появляется в .rtw
Файл и возвраты вектор из двух строк, xxx
и yyy
. Если входной параметр не соответствует этому формату, SYSNAME
возвращает эту ошибку.
Когда вы используете %roll
заданный порог крена должен быть одним числом. Смотрите% roll для полного обсуждения %roll
конструировать.
feature
устаревает и не будет поддерживаться в будущих версиях TLC. Альтернативы см. в руководстве TLC.The %define
и %generate
директивы не рекомендуются, поскольку они заменяются.
WILL_ROLL
функция требует обоих аргументов, приведенных в сообщении.
Глобальная контекстная таблица заполнилась во время использования режима сервера TLC.
Возможности, заданная для GENERATE
должен включать Type
параметр, который указывает, какой файл шаблона должен использоваться для генерации кода для указанных возможностей. Для примера:
%assign scope = block { Name "foo" } %<GENERATE( scope, "Output" )>
Этот пример генерирует сообщение об ошибке, поскольку возможности не включает параметр Type
. Смотрите функции GENERATE и 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
символы. Возможно, вы создали циклическую запись. Если это не так, пожалуйста, сообщите об этой утечке в The MathWorks.Произошла утечка памяти при запуске TLC. Наиболее распространенной причиной этого является наличие циклических записей.
identifier
в рамках scope-identifier
возможностиУказанный идентификатор не найден в указанных возможностях. Для примера,
%assign scope = ascope { x 5 } %assign y = scope.y
В этом коде ссылка на scope.y
выдает это сообщение об ошибке.
Файл, включенный в %include
директива не найдена в пути. Либо переместите файл в место по текущему пути, либо используйте -I
опция командной строки или %addincludepath
директива указать папку, содержащую файл.
из GENERATE или GENERATE_TYPEВы указали GENERATE
но указанное имя файла не найдено в пути компилятора целевого языка. Вы можете
Добавьте файл в папку в пути.
Используйте %generatefile
директива для задания альтернативного имени файла для этого типа блока, находящегося в пути.
Добавьте папку, в которой этот файл отображается, в путь поиска файлов с помощью -I
опция командной строки или %addincludepath
директива.
Не удалось открыть указанный выходной файл. Указано недопустимое имя файла или файл доступен только для чтения.
identifier_name
Идентификатор, указанный в этом выражении, не определен.
type
в выражении CASTКогда вы вызываете CAST
встроенная функция, тип должен быть допустимым типом из таблицы Типы значений на целевом языке.
Вы запросили текущее состояние коммутатора, но указанный коммутатор не был распознан.
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 для возможных обходных путей.The %undef
и расширение (т.е. %<expr>
) функции могут снизить эффективность.
type
тип нельзя сравнитьЗначения заданного
невозможно сравнить.type
specified_type
тип не может быть развернутУказанный тип не может использоваться в директиве расширения. Невозможно развернуть файлы и возможности. Эта ошибка может также возникнуть, когда вы расширяете функцию без каких-либо аргументов. Если вы используете
%<Function>
вызовите его с необходимыми аргументами.
Значения типов, перечисленных в сообщении, не могут быть преобразованы в переменный MATLAB.
Можно задать append
опция для буферного потока, только если переменная в данный момент существует как строка. Не используйте append
опция, если переменная не существует или не является строкой. Этот пример приводит к этой ошибке.
%assign x = 1 %openfile x , "a" %closefile x
Функции в библиотеке функций TLC могут генерировать много сообщений об ошибке, которые не задокументированы. Эти сообщения являются достаточно самоописательными, так что они не нуждаются в дополнительном объяснении. Однако, если вы столкнулись с сообщением об ошибке, которое не содержит достаточного количества описания для решения вашей проблемы, обратитесь в службу технической поддержки.