我正在尝试将我在Simulink中设计的模型集成到我的S函数(C代码)中。为此,我使用Simulink Code生成(系统目标文件:err.tlc)来构建C代码。
我正在以这种看似过于复杂的方式进行这项工作,因为我的主要功能是实现一种进化算法,而这种Simulink模型就是如何评估每个人的。 (希望这很有意义)。
所以我刚刚生成了C代码,现在正尝试在这个S函数的c代码中实现它。 因为我相当新,所以使用生成的ert_main.c作为参考。
#include <stdio.h> /* This ert_main.c example uses printf/fflush */
#include "Peltier_model.h" /* Model's header file */
#include "rtwtypes.h"
#include "builtin_typeid_types.h"
#include "multiword_types.h"
#include "rt_logging.h"
#define QUOTE1(name) #name
#define QUOTE(name) QUOTE1(name) /* need to expand name */
#ifndef SAVEFILE
# define MATFILE2(file) #file ".mat"
# define MATFILE1(file) MATFILE2(file)
# define MATFILE MATFILE1(MODEL)
#else
# define MATFILE QUOTE(SAVEFILE)
#endif
这部分我复制到我自己的C代码的头文件中。 当我试图使用mex时,我首先遇到了无法找到rt_logging.h的问题,所以我在mex中包含了以下路径:
mex -I/Applications/MATLAB_R2013b.app/rtw/c/src ....
那解决了这一部分。
现在的问题是我包含的Peltier_model.h(生成的代码)包含rt_logging.h,其中包含rt_mxclassid.h(所有这些都与Matlab和我没有触摸过),然后创建重新定义错误:< / p>
In file included from Peltier_model_ert_rtw/Peltier_model.h:28:
In file included from /Applications/MATLAB_R2013b.app/rtw/c/src/rt_logging.h:19:
/Applications/MATLAB_R2013b.app/rtw/c/src/rt_mxclassid.h:18:2: error: redefinition of enumerator 'mxLOGICAL_CLASS'
mxLOGICAL_CLASS,
^
/Applications/MATLAB_R2013b.app/extern/include/matrix.h:287:5: note: previous definition is here
mxLOGICAL_CLASS,
^
所以我对先前在matrix.h中定义的枚举的重新定义(来自rt_mxclassid.h中)有一个问题。
对于matrix.h的那部分中定义的其他枚举也是如此。
rt_classid.h:
/* $Revision: 1.1.6.1 $ */
#ifndef __rt_mxclassid_h__
#define __rt_mxclassid_h__
typedef enum {
mxUNKNOWN_CLASS = 0,
mxCELL_CLASS = 1,
mxSTRUCT_CLASS,
mxLOGICAL_CLASS,
mxCHAR_CLASS,
mxRESERVED5_CLASS, /* mxVOID_CLASS */
mxDOUBLE_CLASS,
mxSINGLE_CLASS,
mxINT8_CLASS,
mxUINT8_CLASS,
mxINT16_CLASS,
mxUINT16_CLASS,
mxINT32_CLASS,
mxUINT32_CLASS,
mxINT64_CLASS, /* place holder - future enhancements */
mxUINT64_CLASS, /* place holder - future enhancements */
mxRESERVED16_CLASS, /* mxFUNCTION_CLASS */
mxRESERVED17_CLASS, /* mxOPAQUE_CLASS */
mxOBJECT_CLASS
} mxClassID;
#endif /* __rt_mxclassid_h__ */
matrix.h的相关部分:
/**
* Enumeration corresponding to all the valid mxArray types.
*/
typedef enum
{
mxUNKNOWN_CLASS = 0,
mxCELL_CLASS,
mxSTRUCT_CLASS,
mxLOGICAL_CLASS,
mxCHAR_CLASS,
mxVOID_CLASS,
mxDOUBLE_CLASS,
mxSINGLE_CLASS,
mxINT8_CLASS,
mxUINT8_CLASS,
mxINT16_CLASS,
mxUINT16_CLASS,
mxINT32_CLASS,
mxUINT32_CLASS,
mxINT64_CLASS,
mxUINT64_CLASS,
mxFUNCTION_CLASS,
mxOPAQUE_CLASS,
mxOBJECT_CLASS, /* keep the last real item in the list */
#if defined(_LP64) || defined(_WIN64)
mxINDEX_CLASS = mxUINT64_CLASS,
#else
mxINDEX_CLASS = mxUINT32_CLASS,
#endif
/* TEMPORARY AND NASTY HACK UNTIL mxSPARSE_CLASS IS COMPLETELY ELIMINATED */
mxSPARSE_CLASS = mxVOID_CLASS /* OBSOLETE! DO NOT USE */
}
mxClassID;
由于任何有问题的文件都是由我编写的,我很遗憾如何处理这个问题。非常感谢任何帮助!!
非常感谢!