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", но для каждого типа! Вы не можете иметь поле, длина которого варьируется в разных элементах массива.

Другие вопросы по тегам