如何使用 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);