PDA

查看完整版本 : 嵌入式MATLAB功能块中不支持动态内存的解决方法


poster
2019-12-10, 20:48
背景:

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

根据MathWorks文档:

嵌入式MATLAB功能块不支持动态内存分配: (http://www.mathworks.com/help/toolbox/eml/ug/br7rggy.html#bspvthp)

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

题:

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

想法:


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



回答:

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



更多&回答... (https://stackoverflow.com/questions/4413010)