我有使用OO语法的Matlab代码,我需要将其转换为C/C++源代码(不是二进制而是源代码).
我已经阅读了有关Level 2 S-Functions和使用Simulink Coder但是
>编写TLC以“完全内联”TLC(不希望重写
TLC中的完整例程)
要么
>在TLC中使用“基于函数的包装器”(不希望在C文件中实现例程)
不符合我的要求.
是否有其他选项可以从Matlab代码生成C/C++源代码?
解决方法:
可以从OO编写的Matlab脚本生成C代码.但是有必要围绕对象包装函数.你需要有Matlab Coder.
Matlab区分了Value Classes和Handle Classes(所有来自handle的类).
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.使用Handle Class的功能
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.使用Value Class的功能
%#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句柄类和系统对象生成代码”.
标签:c-3,c,matlab
来源: https://codeday.me/bug/20190901/1783175.html