我试图编译自动生成的代码从一个R2017a Simulink模型实时执行linux目标。金宝app该模型包含两个很早以前编写的非内联S函数。在R14a中创建的等效sim金宝appulink模型能够在目标上自动生成和编译,没有问题。我已经将模型更新到Matlab 2017a的simulink版本,并增加了一些功能。金宝app
当自动编码时,我得到了一个错误,它告诉我需要手动启用对非内联s-functions的支持,所以我这样做了,代码成功生成了一些无害的警告。金宝app我们假设s-函数的名字是“foo”和“bar”。当试图在目标上编译时,我在顶级c文件中得到以下链接错误。“Model_that_implements_foo_and_bar.c”:
未定义对'foo(SimStruct_tag*)'的引用
未定义对'bar(SimStruct_tag)*'的引用
任何帮助让我通过这个链接错误将非常感激。
函数的定义如下:
Model_that_implements_foo_and_bar_private.h:
走读生空白foo (SimStruct * rts);
函数的每个实现代码如下所示:
Model_that_implements_foo_and_bar.c:
ssSetDWorkWidth (rts, 0, 2012);
ssSetDWorkDataType (rts, 0, SS_DOUBLE);
ssSetDWorkComplexSignal (rts, 0, 0);
ssSetDWork (rts, 0, &rtDWork.fooSFunction_RWORK [0]);
ssSetDWorkWidth (rts, 802);
ssSetDWorkDataType (rts, 1, SS_DOUBLE);
ssSetDWorkComplexSignal (rts, 1,0);
ssSetDWorkUsedAsDState (rts, 1,1);
ssSetDWork (rts, 1, &rtDWork.fooSFunction_DSTATE [0]);
sfcnInitializeSizes (rts);
sfcnInitializeSampleTimes (rts);
ssSetSampleTime (rts, 0, 0.002);
ssSetOffsetTime (rts, 0, 0.0);
此外,还有一些非常可疑的警告,说许多调用ssSet函数的代码行没有效果,例如:
语句没有效果'ssSetDWork(rts, 0, &rtDWork.SFunctionfoo_RWORK[0])'
语句没有效果'ssSetInputPortBufferDstPort(rts, 0, -1)'