2016-08-25 3 views
0

나는 matlab 코더와 함께 C++ 코드로 내보내는 함수를 가지고있다. 코드에서 행렬은 매트 파일에서로드됩니다. 내가 사용하고 있었다 :어떻게 matlab 코더를 사용하여 런타임에 변수를 초기화 할 수 있습니까?

coder.load('filename.mat'); 

그러나 이것은 내가 런타임에 파일을 변경할 수 있도록 허용하지 않습니다.

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

이 날 런타임에 다른 파일을로드 할 수 있습니다 :

은 내가 먼저 fwrite를 사용하여 이진 파일을 저장하고 다음과 같이 읽어 해결책을 시도했다. 그러나이 함수는 5Hz에서 호출되므로이 경우 파일을 계속로드합니다. Matlab에서 한 번만 파일을로드 할 수있는 방법이 있습니까? 아니면이 문제를 해결하기위한 또 다른 접근법이 있습니까?

PS : 내가 매트랩 사용 매트랩 측으로 파일명을 통과 :

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++ 코드로 옮겼습니다. 이것이 내가 원하는 것을 실제로는 아니지만.

관련 문제