我有一个函数,我用matlab编码器导出到C ++代码。在代码中,从mat文件加载矩阵。我正在使用:
coder.load('filename.mat');
但是这不允许我在运行时更改文件。
我尝试使用fwrite
将文件保存为二进制文件,然后按如下方式阅读:
fileId = fopen(filename_variable,'r');
file_data = fread(fileId,Inf,'double');
fclose(fileId);
这允许我在运行时加载不同的文件。然而,该功能以5Hz调用,因此在这种情况下连续加载文件。有没有办法只在Matlab中加载一次文件?或者有另一种方法可以解决这个问题吗?
PS: 要将文件名传递给Matlab,我在Matlab中使用:
coder.typeof('s',Inf);
并将类型emxArray_char_T
的变量传递给matlab函数,创建者:
emxArray_char_T* filename = emxCreateWrapper_char_T(filename_char_pointer, 1, size);
答案 0 :(得分:1)
您可以在MATLAB中使用persistent
变量来读取第一次调用函数时的数据。这假定文件中的数据永远不会从一次调用改变为呼叫。
function y = foo(...)
persistent file_data;
if isempty(file_data)
% This only runs on the first call to foo
fileId = fopen(filename_variable,'r');
file_data = fread(fileId,Inf,'double');
fclose(fileId);
end
use(file_data);
答案 1 :(得分:0)
我将fread
函数移动到了c ++代码。虽然这不是我想要做的事情。