如何使用matlab编码器在运行时初始化变量?

时间:2016-08-25 08:09:09

标签: c++ matlab initialization runtime matlab-coder

我有一个函数,我用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);

2 个答案:

答案 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 ++代码。虽然这不是我想要做的事情。