MATLAB / Simulink - C MEX S函数:总线信号和涉及指针的传统C结构之间的转换

loading...


1

目前我正在MATLAB / Simulink(R2017b)中将遗留C代码实现为C MEX S函数 . 我已经在Entry at MathWorks-MATLAB Answers上放了一个重复的条目 . 遗留函数作为一般规则指针指向涉及指向其他结构的指针的结构,示例遗留代码:

func.h:

typedef struct {
  double*       param;
}T_DATA_1;

typedef struct {
  double        in;
  double        out;
  T_DATA_1*     pParam;
}T_DATA_2;

func.c:

void func(T_DATA_2 *pData){
  pData->out = pData->in + *(pData->pParam->param);
}

我已经知道我可以手动包装,例如输入总线信号到C S函数中的遗留结构,就像在下面的代码段中一样:

void wrap_BussignalToLegacy(T_DATA_2 *pLegacy, T_DATA_2__BUSOBJ *pInput){
    pLegacy->in                  = pInput->in;
    pLegacy->out                 = pInput->out;
    *(pLegacy->pParam->param)    = pInput->pParam.param;
}

具有适当的总线信号结构,删除所有指针声明 .

typedef struct {
      double       param;
}T_DATA_1__BUSOBJ;

typedef struct {
      double        in;
      double        out;
      T_DATA_1      pParam;
}T_DATA_2__BUSOBJ;

当然,我必须编写一个类似的函数来将遗留结构包装回输出总线信号 .

手动使用这种方法效果很好但是对于结构随着指向更多结构的指针数量越来越大而越来越大的情况,编写适当的信号包装器将花费大量时间 .

一个想法涉及编写在C S函数中调用的 MATLAB parser which analyzes the legacy structures and generates C Code . 有没有人知道这样的解析器和代码生成器存在?

通过指针算法迭代所有结构字段的解决方法将失败,因为事先不知道内存大小 . 作为迭代的替代方法,可以使用X-Macros,但仍然依赖于解析器和代码生成器 .

stackoverflow条目Share data between multiple c mex s-functions很好地概述了两种方法,但缺乏将来需要的代码生成 . 有没有人知道处理遗留指针结构的进一步解决方法,包括指向其他结构的指针?

感谢您的回复和帮助!

loading...

0回答

No Data

评论

暂时没有评论!