嵌入式MATLAB功能块中无动态存储器支持的解决方法

时间:2010-12-10 20:28:32

标签: matlab memory-management compilation simulink matlab-coder

背景

我继承了离散事件仿真MATLAB模型,希望自动化并加速执行。我想要一个类似于调用system('modelName.exe ...')的解决方案,而不是调用sim(modelName)并让MATLAB运行解释代码。我的动机来自最初的测试,这表明速度提高了近1000%。我已经设法使用Real-Time Workshop和Rapid Simulation目标来生成具有静态内存分配的exe。问题在于模型中存在嵌入式MATLAB功能块,其参数在每次运行中的大小和形状会有所不同。并且将有数百甚至数千次运行。

根据MathWorks文档:

Dynamic Memory Allocation Not Supported for Embedded MATLAB Function Blocks:

“您不能对嵌入式MATLAB功能块中的可变大小数据使用动态内存分配。使用有界而不是无限大小的可变大小数据。”

问题:

这种限制的潜在解决方法是什么?

思想:

  • 使用足够大的静态变量大小,并另外传递int变量/可调参数,以显式地将数据部分窗口化为范围。
  • S-功能?
  • 我今天正在实施的内容:每次调用模拟动态生成静态代码时,都会以编程方式重新编译模拟。
  • 将所有内容移植到真实/现代编程语言,如python或c ++。

关键字: 嵌入式MATLAB动态内存分配离散事件仿真Real-Time Workshop Simulink SimEvents可调参数

2 个答案:

答案 0 :(得分:2)

这几年之后的跟进...我们在那一天实施了动态静态重新编译一年左右,然后另一个统计开发人员用c ++重写了它。使用最大可能内存每次运行根本不是对计算资源的可行浪费。

答案 1 :(得分:0)

您应该查看此在线讲座:http://www.mathworks.com/company/events/webinars/wbnr43180.html。它解释了一个类似于您的第一个想法的自动解决方案。