codegen和标量struct参数

时间:2012-11-28 13:51:10

标签: matlab

这样的Codegen命令:

codegen -config:dll ep1 -args single(0) ep2 -args {0,0}

很容易实现这样的功能:

function y = ep1(u) %#codegen
y = u;

function y = ep2(u, v) %#codegen
y = u + v;

我只是想知道如何定义标量结构参数。让我们假设上面的论证应该是这样的(即由2个字段组成 - 一个字符和一个字符串):

u.FirstName = 'Loren';
u.Height = 150

PS:

刚刚找到这样的东西:

s = struct('a',42,'b',4711);
codegen topfun.m -args { s }

这会是一个解决方案吗?我相信,这是一个例子的定义。

2 个答案:

答案 0 :(得分:1)

这似乎对我有用:

codegen -report -config:dll ep1 ...
                            ep2

实际的'函数签名'(以及标量结构)可以在函数中定义,如下所示:

function [bla] = ep1(parameters)
%#codegen

assert(isstruct(parameters));
assert(isa(parameters.x1,'char'));
assert(size(parameters.x1, 1) >= 1);
assert(size(parameters.x1, 1) <= 1024);
assert(isa(parameters.x2,'double'));
...

我遇到的问题是,我似乎必须在父函数中定义所有参数 - 尽管我不在父函数中使用该参数。

看看上面的东西。让我们说ep1是ep2的父函数,而ep1不使用parameters.x2,我仍然要在ep1中断言它。希望这是有意义的。

答案 1 :(得分:0)

可以使用coder.typeof函数捕获结构的定义。

首先使用脚本初始化结构,使用coder.typeof捕获结构定义,然后使用-args传递定义,如下所示:

u = Initialise(u);
p = InitialiseParameters();

tx = coder.typeof(u);
tp = coder.typeof(p);

codegen topfun.m -args {tx, tp} -config:dll