查看单个帖子
旧 2019-12-10, 20:48   #1
poster
高级会员
 
注册日期: 2019-11-21
帖子: 3,006
声望力: 66
poster 正向着好的方向发展
帖子 嵌入式MATLAB功能块中不支持动态内存的解决方法

背景:

我继承了离散事件仿真MATLAB模型,并希望自动化并加快其执行速度。除了要调用sim(modelName)并让MATLAB运行解释代码外,我想要一个类似于调用system('modelName.exe ...')的解决方案。我这样做的动机来自于初步测试,该测试表明速度提高了近1000%。我设法将Real-Time Workshop与Rapid Simulation目标一起使用,以产生具有静态内存分配的exe。问题在于模型中存在嵌入式MATLAB Function模块,其参数在每次运行中的大小和形状都会变化。将会有成百上千的运行。

根据MathWorks文档:

嵌入式MATLAB功能块不支持动态内存分配:

“不能在嵌入式MATLAB Function模块中为可变大小的数据使用动态内存分配。使用有界而不是无界的可变大小数据。”

题:

此限制可能有什么解决方法?

想法:
  • 使用足够大的静态变量大小,并另外传递int变量/可调参数以显式地窗口化要范围内的数据部分。
  • S功能?
  • 我今天要实现的是:每次调用模拟以动态方式生成静态代码时,以编程方式重新编译模拟。
  • 将所有内容移植到一种真正/现代的编程语言,例如python或c ++。
关键词: MATLAB动态内存分配嵌入式离散事件仿真实时研讨会Simulink SimEvents可调参数



回答:

几年后的后续工作...我们进行了当天进行了一年左右的动态静态重新编译,然后另一位统计数据开发人员将其重新编写为c ++。每次运行都使用最大可能的内存根本不是浪费计算资源。



更多&回答...
poster 当前离线   回复时引用此帖