2016-08-25 155 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++代碼中。雖然這不是我想要做的。