如何使用 matlab 编码器在运行时初始化变量?

Posted

技术标签:

【中文标题】如何使用 matlab 编码器在运行时初始化变量?【英文标题】:How can I initialize variables at runtime using the matlab coder? 【发布时间】:2016-08-25 08:09:09 【问题描述】:

我有一个用 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);

【问题讨论】:

【参考方案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);

【讨论】:

【参考方案2】:

我将 fread 函数移到了 c++ 代码中。虽然这并不是我真正想做的。

【讨论】:

以上是关于如何使用 matlab 编码器在运行时初始化变量?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Real();复杂的();在 Matlab 中定义复数的函数?

Matlab调试器在崩溃后显示变量

MATLAB遗传算法

Matlab中持久变量的初始化

6.MATLAB变量——矩阵操作一

模块加载时如何执行一次?