2016-04-23 5 views
0

Ich versuche, eine statische c lib von einer Matlab-Funktion zu generieren. Der generierte Code enthält memset und memcpy Funktionsaufrufe, die ich nicht möchte, weil ich diesen Code in vivado HLS für ein FPGA-Projekt verwenden möchte und diese beiden Operationen nicht zulässig.codegen: wie loswerden von memset und memcpy in generierten code in matlab?

Ich habe folgendes versucht 1) Deaktivieren Sie "Variable Größe aktivieren" aus der Matlab Coder App. 2) verwendet, um die folgende Befehlszeile Skript

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')} 

Die Linie cfg.InitFltsAndDblsToZero = false; soll Memset-Aufrufe zum Initialisieren von Arrays eliminieren, aber in meinem generierten Code sehe ich immer noch Memset-Funktionsaufrufe.

Also, beide Methoden funktionieren nicht für mich.

Bitte, sagen Sie mir, wenn es weitere Änderungen in der Konfiguration erfordert und wenn dies durch den Matlab Coder GUI möglich ist?

P.S. Ich habe diesen Link verwendet, um codegen Konfiguration Objekteigenschaften http://www.mathworks.com/help/coder/ref/coder.embeddedcodeconfig-class.html

+0

Haben Sie einen Beispielcode, um dies zu reproduzieren? – Navan

Antwort

1

Um dies zu tun versuchen, die Einstellung der ‚MemcpyThreshold‘ Wert ‚inf‘ in der Konfiguration festgelegt. Dadurch werden alle memcpy/memset Convertible-Zuweisungen unterhalb des Schwellenwerts und nicht konvertiert. Hinweis "MemcpyThreshold" wirkt sich sowohl auf Memcpy als auch auf die Speicheroptimierung aus.

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

Die Einstellung 'InitFltsAndDblsToZero' betrifft nur Memset ruft, wenn der Wert Quelle Doppel 0.0 ist. Ich vermute in Ihrem Fall haben Sie eine memset, wo der Quellwert eine ganze Zahl ist.

Verwandte Themen