Matlab Coder генерирует ошибку смешанного типа поля в структурном массиве при загрузке файла MAT с помощью coder.load
Я работаю над проектом MATLAB Coder, где я хочу загрузить некоторые постоянные значения. Попробовав множество возможностей, но все безуспешно, я придумал директиву "coder.load", которая загружает переменные из файлов MAT и принимает их в качестве постоянных времени компиляции в сгенерированном C-коде.
Это ошибка, которую я получаю:
Найден неподдерживаемый класс для переменной с использованием функции 'coder.load'. Смешанные типы полей в структурных массивах не поддерживаются. Тип в ind_x.params(1).name отличается от типа в ind_x.params(2).name.
Но проблема в том, что поле "name" массива структуры "params" имеет одинаковый тип для каждого элемента массива. На самом деле, пробуя это в командном окне, я получаю такой же тип:
>> class(ind_x.params(1).name)
ans =
char
>> class(ind_x.params(2).name)
ans =
char
Существуют и другие поля массива структуры типа "double" и типа "bool", но тип не изменяется в разных элементах массива одного и того же поля, поэтому я не понимаю ошибку.
1 ответ
Хорошо, я думаю, что нашел ответ на свой вопрос. Проблема действительно заключалась в длине строки символов. Если одно из полей массива структуры имеет тип "char", то оно должно быть одинаковой длины для каждого элемента массива. То есть, если вы определите
ind_x.params(1).name = 'john';
ind_x.params(2).name = 'harry';
Если вы попытаетесь загрузить эту структуру с помощью coder.load()
так как length(ind_x.params(1).name)
отличается от length(ind_x.params(2).name)
, Обходным путем может быть определение максимальной длины и добавление завершающих пробелов в строку.
Это ограничение может исходить из определений констант в C, но то, что я нашел грязным, это вводящее в заблуждение сообщение об ошибке. В любом случае спасибо за помощь!
РЕДАКТИРОВАТЬ: я понял, что вышеупомянутое ограничение для массивов с постоянной структурой действует не только для типа "char", но для каждого типа! Вы не можете иметь поле, длина которого варьируется в разных элементах массива.