如何使用 matlab 编码器在运行时初始化变量?
How can I initialize variables at runtime using the 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);
我将 fread
函数移到了 C++ 代码中。虽然这不是我真正想做的。
您可以在 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);
我有一个函数,可以使用 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);
我将 fread
函数移到了 C++ 代码中。虽然这不是我真正想做的。
您可以在 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);