以下问题:我正在使用Simulink Coder,一个Arduino Due和一个自行开发的扩展板来控制多旋翼。我有一个Simulink模型,包含所有设备驱动程序(使用s-function builder),可以与传感器进行交互。每个传感器都有一个自己的c ++库,它包含在s-function中。所有c ++和头文件当前都在matlab的工作目录中。
没有我有这么多设备驱动程序块,我创建了一个自定义Simulink块库,以便在多个Simulink模型中共享和使用这些块。但是,如果我使用Simulink库中的块,则编译器会发出错误,因为它找不到c ++和头文件,因为它们不在当前工作目录中,而是在Simulink库的目录中。但是,Simulink块库和所有外部c ++库都包含在Matlab搜索路径(设置路径)中。
当从Simulink块库中的s函数调用外部c ++库时,有谁知道如何包含外部c ++库?
我已经尝试了以下步骤:
到目前为止,有没有人遇到过类似的问题?
答案 0 :(得分:0)
我找到了适合我的解决方案。问题是,对于代码生成,MATLAB调用C编译器,它对MATLAB路径一无所知。因此,如果自定义库不在当前工作路径中,则编译器无法找到它们。 经过一番研究后,我发现了以下方法:
使用模型范围的参数包含自定义库:
set_param(‘model’, 'CustomSource', [‘source.cpp’ ‘ source2.cpp’ ‘ ’ ’sourceN.cpp’]);
这需要针对每个Simulink模型进行,因此不适合与其他用户共享。
执行此操作的正确方法是创建 rtwmakecfg.m 文件并将其放入库的文件夹中。在 rtwmakecfg.m 文件中,可以指定自定义源文件和头文件的路径。这将确保使用我的s-function块的任何模型都将链接到所需的自定义库。
与解决方案联系: