主要内容

故障排除C ++标准模板库(STL)实时应用程序编译错误

要包含一个C ++项目,我将源包装到与与该的S函数块中万博1manbetx®桌面实时™代码生成目标,sldrt.tlc。C ++项目使用C ++ 11标准模板库(STL)接口,例如std :: vector,,,,std :: stack, 和std ::复杂。我可以成功编译该项目连接的IO模式。但是,当我编译时在内核中运行模式,我得到汇编错误,例如:

未找到的文件找不到文件

这个问题意味着什么

编译器会生成这些错误,因为C ++标准模板库与实时代码不兼容。

在实时代码中,需要在下一个启动之前始终按时完成单个时间步长。该要求为实时代码产生时间确定性行为,并产生或多或少的固定执行时间。

相比之下,C ++标准模板库经常使用不是时间确定性的功能。最著名的示例是动态内存分配和异常。虽然动态内存分配是(某些限制)由实时内核以实时确定性方式支持的,但异常却没有。万博1manbetx因此,不可能使用可以引发异常的代码。

此问题使大多数STL标头无法使用万博1manbetx实时Simulink桌面代码生成目标。这些接口抛出异常。您无法运行在实时内核中使用STL的代码。

尝试这个解决方法

为了消除编译器错误,请修改您的项目不使用C ++标准模板库。

如果您无法修改项目不使用C ++标准模板库,则可以使用万博1manbetx实时Simulink桌面代码生成目标连接的IO模式。

为了连接的IO模式,像Simulink一样编译S功能。万博1manbetx然后,运行模型。实时要求无法执行,但是在发生时进行了实时遗漏。