2016-04-23 267 views
0

我想从matlab函数中生成一个静态c库。生成的代码包括memset和memcpy函数调用,我不想这样做,因为我想在vivado HLS中为FPGA项目使用此代码,并且这两个操作不是允许的。codegen:如何摆脱matlab生成的代码中的memset和memcpy?

我试过以下 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

你有一些示例代码来重现此? – Navan

回答

1

要做到这一点,请尝试在您的配置中将'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' 只影响当源值是双0.0 memset的呼叫。我猜你的情况你有memset源值是一个整数。