【发布时间】:2014-12-03 08:41:49
【问题描述】:
我有一个基本问题;抱歉,它可能非常愚蠢和通用,但对我们的知识非常重要。 C/C++ 生成的代码是如何为并行 (AND) 状态实现的?它是否使用多线程方法实现它们?
我为一个简单的场景生成了C源代码,只有2个并行状态,如图所示。即使对于这种简单的场景,它也是一个复杂的代码,但我没有看到任何线程基础。
【问题讨论】:
我有一个基本问题;抱歉,它可能非常愚蠢和通用,但对我们的知识非常重要。 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 和/或遗留代码工具将其带入您的模拟是合适的。
【讨论】: