用包含非内联s-函数的自动生成的模型代码链接错误

8次浏览(最近30天)
约书亚Chessario
约书亚Chessario 2021年8月26日
编辑: 约书亚Chessario2021年8月27日
我试图编译自动生成的代码从一个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)
走读生空白栏(SimStruct * rts)
函数的每个实现代码如下所示:
Model_that_implements_foo_and_bar.c:
/ * RWORK * /
ssSetDWorkWidth (rts, 0, 2012);
ssSetDWorkDataType (rts, 0, SS_DOUBLE);
ssSetDWorkComplexSignal (rts, 0, 0);
ssSetDWork (rts, 0, &rtDWork.fooSFunction_RWORK [0]);
/ * DSTATE * /
ssSetDWorkWidth (rts, 802);
ssSetDWorkDataType (rts, 1, SS_DOUBLE);
ssSetDWorkComplexSignal (rts, 1,0);
ssSetDWorkUsedAsDState (rts, 1,1);
ssSetDWork (rts, 1, &rtDWork.fooSFunction_DSTATE [0]);
/ * * /注册
foo (rts);% **这一行抛出错误**
sfcnInitializeSizes (rts);
sfcnInitializeSampleTimes (rts);
/ *调整样本时间* /
ssSetSampleTime (rts, 0, 0.002);
ssSetOffsetTime (rts, 0, 0.0);
sfcnTsMap [0] = 0;
此外,还有一些非常可疑的警告,说许多调用ssSet函数的代码行没有效果,例如:
语句没有效果'ssSetDWork(rts, 0, &rtDWork.SFunctionfoo_RWORK[0])'
语句没有效果'ssSetInputPortBufferDstPort(rts, 0, -1)'

答案(0)

社区寻宝

在MATLAB中心找到宝藏,并发现社区如何可以帮助你!

开始狩猎!

翻译的