【问题标题】:codegen and scalar struct argumentcodegen 和标量结构参数
【发布时间】:2016-09-23 15:23:07
【问题描述】:

这样的代码生成命令:

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;

我只是想知道如何定义标量结构参数。让我们假设上述参数 u 应该如下所示(即由 2 个字段组成 - 一个 char 和一个 double):

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

PS:

刚刚发现这样的东西:

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

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

【问题讨论】:

    标签: matlab


    【解决方案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 中断言它。希望这是有道理的。

    【讨论】:

      【解决方案2】:

      可以使用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 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-12-06
        • 1970-01-01
        • 2017-08-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-05-16
        相关资源
        最近更新 更多