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

codegen : how to get rid of memset and memcpy in generated code in matlab?

我正在尝试从 matlab 生成静态 c 库 function.The 生成的代码包括我不想要的 memset 和 memcpy 函数调用,因为我想在 vivado HLS 中将此代码用于 FPGA 项目并且这两个操作是不允许的。

我试过以下方法 1) 从 Matlab 编码器应用程序中取消选中 "Enable variable sizing"。 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 coder gui 实现?

P.S。 我已经使用这个 link 来设置代码生成配置对象属性 http://www.mathworks.com/help/coder/ref/coder.embeddedcodeconfig-class.html

为此,请尝试在您的配置中将 '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,其中源值是一个整数。

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