将输出定义为matlab编码器

时间:2016-06-30 08:59:24

标签: c++ c matlab struct matlab-coder

当我使用Coder生成C代码时,我无法定义一个未绑定的向量。我希望有一个double 1x:inf类型的向量,稍后会在使用Coder时生成一个指向包含未绑定向量的结构的指针。

function [V2SAgent,bMove,s_Result] = V2SOnPublishedPrice(V2SAgent, oPPdata, ePochNow)
    %#codegen
    bMove = false;

      s_Result = struct('d_BidMove', zeros(1,0),'d_AskMove', zeros(1,0),'i_VolBands', zeros(1,0));
      coder.varsize('s_Result(:).d_BidMove',[1,inf],[false,true]));
      coder.varsize('s_Result(:).d_AskMove',[1,inf],[false,true]));
      coder.varsize('s_Result(:).i_VolBands',[1,inf],[false,true]));
      coder.cstructname(s_Result, 'Move_t');
      .....DOES ALOT OF WORK .....

当我用编码器处理函数时,我最终得到一个类似这样的结构。

struct emxArray_real_T_1x0
{
  int size[2];
};

typedef struct {
    emxArray_real_T_1x0 d_BidMove;
    emxArray_real_T_1x0 d_AskMove;
    emxArray_real_T_1x0 i_VolBands;
  } Move_T;

emxArray_real_T_1x0类型决不是未绑定的。在其他场景中,我设法使用输入来实现我正在寻找的输出,我可以使用编码器定义时间为1x:inf,并使用它在我的函数中设置输出变量。

function s_Result = V2SOnPublishedPrice(infVector)
    %#codegen

        s_Result = struct('d_BidMove', zeros(1,0))
        coder.varsize('s_Result(:).d_BidMove');
        coder.varsize(d_BidMove);
        coder.cstructname(s_Result, 'Move_t');
        ....SOME WORK....
        s_Result.d_BidMove = infVector;
  end

当把infVector定义为1x的编码器时:inf我得到这样的输出。

struct emxArray_real_T
{
  double *data;
  int *size;
  int allocatedSize;
  int numDimensions;
  boolean_T canFreeData;
};

typedef struct {
  emxArray_real_T *d_BidMove;
  emxArray_real_T *d_AskMove;
  emxArray_real_T *i_VolBands;
} Move_T;

对于我用来定义和测试我的函数的场景,这很好,但我知道我无法涵盖所有​​可能的输入,所以我需要一个未绑定的输出,所以我有一个统一的输入/输出在我的功能中,我不会冒大小不匹配或超出范围错误的风险。

0 个答案:

没有答案