如何使用 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 编码器在运行时初始化变量?的主要内容,如果未能解决你的问题,请参考以下文章