gpt4 book ai didi

c++ - 将具有 OO 语法的 Matlab 转换为 c/c++ 而无需重写其功能

转载 作者:太空狗 更新时间:2023-10-29 20:43:59 25 4
gpt4 key购买 nike

我有使用 OO 语法的 Matlab 代码,我需要将其转换为 C/C++ 源代码(不是二进制而是源代码)。

我已阅读有关Level 2 S-Functions 和使用 Simulink Coder 的内容,但是

  • 为“完全内联”TLC 编写 TLC (不希望重写TLC 中的完整例程)

  • 在 TLC 中使用“基于函数的包装器”(不需要在 C 文件中实现例程)

不符合我的要求。

是否有其他选项可以从 Matlab 代码生成 C/C++ 源代码?

最佳答案

可以从 OO 编写的 Matlab 脚本生成 C 代码。但是有必要在对象周围包装函数。你需要有 Matlab Coder。

Matlab 区分值类和句柄类(所有派生自句柄的类)。

1。处理类

1.1。例子

classdef myHandleClass < handle
properties (Access=private)
num1;
end
methods (Access=public)
function obj = myHandleClass (num1)
% constructor
if(nargin > 0)
obj.num1=num1;
end
end
function prod = product(obj, factor)
prod = obj.num1.*factor;
end
function quot = quotient(obj,divisor)
quot = obj.num1/divisor;
end
end
end

1.2。使用句柄类的函数

myHandleClass 的对象需要持久化。 isempty 函数也是必须的。

     %#codegen   
function prod= use_product_HandleClass(a,b)
assert(isa(a,'double'));
assert(isa(b,'double'));

persistent p;
if isempty(p)
p = myHandleClass(a);
end

prod = p.product(b);
end

1.3。生成代码

这是生成的“use_product_HandleClass.c”中最有趣的部分

typedef struct {
real_T num1;
} myHandleClass;

#endif /*typedef_myHandleClass*/

/* Named Constants */

/* Variable Declarations */

/* Variable Definitions */
static myHandleClass p;

/* Function Declarations */

/* Function Definitions */
real_T use_product_HandleClass(real_T a, real_T b)
{
if (!p_not_empty) {
p.num1 = a;
p_not_empty = TRUE;
}

return p.num1 * b;
}

2。值类

2.1。值类示例

   classdef myValueClass 
properties (Access=private)
num1;
end
methods (Access=public)
function obj = myValueClass (num1)
if(nargin > 0)
obj.num1=num1;
end
end
function prod = product(obj, factor)
prod = obj.num1.*factor;
end
function quot = quotient(obj,divisor)
quot = obj.num1./divisor;
end
end
end

2.2。使用值类的函数

%#codegen
function res= use_product_ValueClass(a,b)
assert(isa(a, 'double'))
assert(isa(b, 'double'))
p = myValueClass(a);
res = p.product(b);
end

2.3。生成代码

这是生成的“use_product_ValueClass.c”中最有趣的部分

/* Function Definitions */
real_T use_product_ValueClass(real_T a, real_T b)
{
return a * b;
}

3。引用资料

“为 MATLAB 值类生成代码”。
http://www.mathworks.de/de/help/coder/ug/how-to-generate-code-for-matlab-value-classes.html .

“为 MATLAB 句柄类和系统对象生成代码”。

http://www.mathworks.de/de/help/coder/ug/how-to-generate-code-for-matlab-handle-classes.html .

关于c++ - 将具有 OO 语法的 Matlab 转换为 c/c++ 而无需重写其功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13989009/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com