2016-04-28 9 views
1

Я работаю над проектом MATLAB Coder, где хочу загрузить некоторые постоянные значения. После многих попыток, все безуспешно, я придумал директиву «coder.load», которая загружает переменные из файлов MAT и принимает их как константы времени компиляции в сгенерированном C-коде.Matlab Coder вызывает ошибку смешанного поля в структурном массиве при загрузке файла MAT с помощью coder.load

Это ошибка, я получаю:

Найдено неподдерживаемый класс для переменной с помощью функции «coder.load». Типы смешанных полей в массивах массивов не поддерживаются. Тип в 'ind_x.params (1) .name' отличается от типа в 'ind_x.params (2) .name'.

Но проблема в том, что поле «имя» массива структуры «params» имеет одинаковый тип для каждого элемента массива. Действительно, пытаясь его на окно командной строки дает мне тот же тип:

>> class(ind_x.params(1).name) 
ans = 
char 
>> class(ind_x.params(2).name) 
ans = 
char 

Есть другие поля массива структуры, которые типа «двойной» и один типа «BOOL», но тип doesen 't изменять внутри разных элементов массива одного и того же поля, поэтому я не понимаю ошибку.

+0

Пожалуйста, предоставьте [mcve]. – excaza

ответ

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, но то, что я нашел беспорядочным, является вводящим в заблуждение сообщением об ошибке. В любом случае, спасибо за помощь!

EDIT: Я понял, что указанное ограничение для массивов постоянной структуры действует не только для типа «char», но и для каждого типа! У вас не может быть поля, длина которого изменяется в разных элементах массива.