matlab c重写,将带有OO语法的Matlab转换为c / c,而无需重写其功能

我有使用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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值