codegen:如何在matlab中删除生成的代码中的memset和memcpy?

时间:2016-04-23 21:18:01

标签: matlab matlab-coder

我正在尝试从matlab函数生成一个静态c lib。生成的代码包含memset和memcpy函数调用,我不想这样做,因为我想在vivado HLS中使用这个代码用于FPGA项目,这两个操作是不允许。

我尝试了以下内容 1)从Matlab编码器应用程序中取消选中“启用变量大小调整”。 2)使用以下命令行脚本

cfg = coder.config('lib');
cfg.GenCodeOnly = true;
cfg.EnableVariableSizing = false;
cfg.EnableMemcpy = false;
cfg.SupportNonFinite = false;
cfg.InitFltsAndDblsToZero = false;
cfg.FilePartitionMethod = 'SingleFile';
cfg.DynamicMemoryAllocation = 'off';
codegen -config cfg harris -args { zeros(640,480,'uint8'),zeros(1,1,'int32')} 

cfg.InitFltsAndDblsToZero = false; 应该消除用于初始化数组的memset调用,但在我生成的代码中,我仍然看到memset函数调用。

所以,这两种方法对我都不起作用。

请告诉我是否需要更改配置,如果可以通过matlab编码器gui进行更改?

P.S。 我使用此链接来设置codegen配置对象属性http://www.mathworks.com/help/coder/ref/coder.embeddedcodeconfig-class.html

2 个答案:

答案 0 :(得分:2)

为此,请尝试在配置中将“MemcpyThreshold”值设置为“inf”。通过执行此操作,所有memcpy / memset可转换分配将低于阈值并且不会转换。注意'MemcpyThreshold'会影响Memcpy和Memset优化。

http://www.mathworks.com/help/coder/ug/memcpy-optimization.html http://www.mathworks.com/help/coder/ug/memset-optimization.html

设置'InitFltsAndDblsToZero'仅在源值为double 0.0时影响memset调用。我猜你的情况下你有memset,其中源值是一个整数。

答案 1 :(得分:1)

您可以在MATLAB编码器应用>所有设置>高级部分中将其禁用。