2016-04-23 271 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源值是一個整數。