2016-08-25 13 views
0

私は、MATLABコーダーを使ってC++コードにエクスポートする関数を持っています。コードでは、マトリックスがマットファイルから読み込まれます。私は使用していた:実行時にMATLABコーダーを使用して変数を初期化するにはどうすればよいですか?

coder.load('filename.mat'); 

しかし、これは私が実行時にファイルを変更することはできません。

私が最初にfwriteを使用してバイナリとしてファイルを保存してから、次のように読み取ることで解決策を試してみました:

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

これは私が実行時に別のファイルを読み込むことができます。ただし、この関数は5Hzで呼び出され、この場合、ファイルを連続的にロードしています。 Matlabで一度だけファイルをロードする方法はありますか?あるいは、この問題を解決する別のアプローチがありますか?

PS: Iは、MATLABで使用Matlabの側にファイル名を渡すこと:

coder.typeof('s',Inf); 

とMATLAB関数にタイプemxArray_char_Tの変数を渡すことによって作成:

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++コードに移動しました。これは本当に私がやりたいことではありません。

関連する問題