2016-08-25 150 views
0

我有一个函数可以用matlab编码器导出为C++代码。在代码中,矩阵从mat文件中加载。我正在使用:如何在运行时使用matlab编码器初始化变量?

coder.load('filename.mat'); 

但是,这不允许我在运行时更改文件。

我试着先用fwrite将文件保存为一个二进制文件,然后阅读如下解决方案:

fileId = fopen(filename_variable,'r'); 
file_data = fread(fileId,Inf,'double'); 
fclose(fileId); 

这让我在运行时加载不同的文件。然而该功能被称为5Hz,因此在这种情况下不断加载文件。有没有办法只在Matlab中加载文件一次?还是有另一种方法来解决这个问题?

PS: 到文件名传递给Matlab的侧I在Matlab使用:

coder.typeof('s',Inf); 

emxArray_char_T类型的变量传递到MATLAB函数,通过创建:

emxArray_char_T* filename = emxCreateWrapper_char_T(filename_char_pointer, 1, size); 

回答

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); 
0

我将fread函数移到了C++代码中。虽然这不是我想要做的。