Загрузка файла MATLAB/Embedded Coder

Я сгенерировал код для загрузки матового файла следующим образом

data=coder.load('data.mat');
a=data.a;
b=data.b;

Поскольку одна из переменных, например "a", очень большая, она определяется как большой статический массив const в основной функции, где все значения инициализируются.

Есть ли способ заставить MATLAB Coder загружать данные из файла в коде C вместо того, чтобы определять его как переменную в основной функции?


person Amin    schedule 11.02.2019    source источник


Ответы (2)


Функция MATLAB fread поддерживается для генерации кода. Таким образом, вы можете fwrite сохранить данные в файл в MATLAB, а затем fread в сгенерированном коде. Это позволит выполнить чтение во время выполнения и избежать гигантской константы в сгенерированном коде.

person Ryan Livingston    schedule 12.02.2019
comment
Попробуйте указать аргумент точности для fread и fwrite. Допустим, у вас есть int32 значений, затем используйте 'int32' для записи и '*int32' для их чтения в виде 32-битных целых чисел. Просто измените имя типа для вашего примера. - person Ryan Livingston; 05.03.2019

Это точный код, который мы должны использовать на основе ответа Райана:

load('Data.mat')
fileID = fopen('Data.bin', 'w');
fwrite(fileID, Matrix1,'uint64');
fclose(fileID);


fileID=fopen('Data.bin');
Matrix2=fread(fileID,[256,256],'uint64');
fclose(fileID);

Матрица 2 теперь такая же, как Матрица 1. Хитрость при записи и чтении заключается в использовании одинаковой точности в зависимости от типа данных.

person Amin    schedule 05.03.2019