Возможно, в коде 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-функционального блока.
Использование библиотечных функций. Для генерации ошибок использования, связанных с определенным блоком, используйте функцию библиотеки
LibBlockReportError(block,"error string")
block аргумент - это запись блока, если она не имеет области действия. Если объем блока в настоящее время определен, можно указать block как [].
Для создания общих ошибок использования, не связанных с определенным блоком, используйте
LibReportError("error string")Эти библиотечные функции префиксируют строку Simulink Coder Error: в сообщение, предоставляемое при сообщении об ошибке.
Пример использования этих функций см. в разделе gensfun.tlc для ошибок блоков и commonsetup.tlc для распространенных ошибок. Есть другие файлы, которые используют эти функции в исходных папках TLC в (открыто.matlabroot/rtw/c/tlc
Предположим, у вас есть S-функция, которая имеет локальную функцию, которая может принимать только числовые числа. Можно добавить утверждение, требующее, чтобы входные данные были только числовыми числами. Эти утверждения могут указывать на неустранимые ошибки кодирования, для которых у пользователя нет способа построения модели или указания атрибутов, которые могут вызвать ошибку.
Использование библиотечных функций. Две доступные библиотечные функции:
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
Была предпринята попытка вызвать компилятор целевого языка из MATLAB, но некоторые из переданных аргументов не были строками.
Выражение в %assert оператор оценивается как false.
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)>
Директива расширения не может охватывать несколько строк. Чтобы обойти это ограничение, используйте символ продолжения\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 %% erroridentifier используется в инструкции% foreach и уже находится в области (предупреждение)Аргумент для %foreach оператор не может быть определен до ввода %foreach.
Использование evals в запрещено .rtw файлы. Есть также места, где оценки не допускаются в директивах. Например:
%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 заявление.
A %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 директива.
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 отсутствует директива. Эта ошибка может возникнуть для следующих директив компилятора целевого языка в области блоков.
| Начать директиву | Конечная директива | Описание |
|---|---|---|
%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 или GENERATE_TYPEВы указали GENERATE но данное имя файла не найдено в пути компилятора целевого языка. Можно
Добавьте файл в папку по пути.
Используйте %generatefile директива для указания альтернативного имени файла для этого типа блока, который находится в пути.
Добавить папку, в которой этот файл отображается, в путь поиска с помощью -I параметр командной строки или %addincludepath директива.
filenameНе удалось открыть указанный выходной файл. Указано недопустимое имя файла или файл доступен только для чтения.
identifier_nameИдентификатор, указанный в этом выражении, не определен.
type в выражении CASTПри вызове 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 могут генерировать множество сообщений об ошибках, которые не задокументированы. Эти сообщения являются достаточно самоописательными, чтобы они не нуждались в дополнительном объяснении. Однако в случае появления сообщения об ошибке, в котором содержится недостаточно описания для устранения проблемы, обратитесь в службу технической поддержки.