我正在尝试从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
答案 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编码器应用>所有设置>高级部分中将其禁用。