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