我有一个基本问题;抱歉,它可能非常愚蠢和通用,但对我们的知识非常重要。C/C++ 生成的代码是如何实现并行 (AND) 状态的?它是否使用多线程方法实现它们?
我为一个简单的场景生成了 C 源代码,只有 2 个并行状态,如图所示。即使对于这个简单的场景,它也是一个复杂的代码,但我没有看到任何线程基础。
您将并行性与并发性混淆了。在 simulink 术语中,所有并行状态都在单个时间步中执行。这在仿真中是可以接受的,但在您可能想要充分利用多个执行内核时,对于实时系统的代码生成则不行。这也适用于一般的 simulink 模块。异步块(具有不同的采样率)和并行状态在同一个线程上顺序执行(在 step 函数中)。您唯一可以控制的是执行顺序。见下文:
http://uk.mathworks.com/help/stateflow/ug/execution-order-for-parallel-states.html
例如,下面是生成的并行状态代码:
请注意,在第 13 行和第 15 行的 step() 函数中,输出是根据 stateflow 中的顺序分配的。
您可能需要考虑 PCT(并行计算工具箱),看看它是否支持您的需求。
http://uk.mathworks.com/solutions/parallel-computing/index.html
或者,根据目标硬件,您可能会发现使用 C11 std::thread 手动编写源代码并使用 s-function 和/或遗留代码工具将其带入模拟是合适的。