Gast
#981415
Hallo Zusammen. Ich benutze den WinAVR mit dem eclipse-plugin. Nun hab ich modularisierten code, welcher zum Teil mehrer Aufrufe von Funktionen beinhaltet, welche nur eine weitere aufrufen. z.B. void test(int x){ c(x); } Der compiler übersetzt diesen code logischerweise mit einem einfachen call. und ret. Die Funktion c befindet sich in einem anderen File. und sieh so aus: void c(int x){ b(x); } b() wiederum befindet sich wieder in einem anderen file und macht z.B. void b(int x); PORTA=(char)x; } Befinden sich alle funktionen in einer Datei, so werden alle jumps und calls erwartungsgemäss eliminiert und es bleibt nur noch die Funktion, b() bestehen. Wenn die Funktionen jedoch auf verschiedene Dateien verteilt werden werden die calls und rets nicht weg optimiert. Kann der AVRGCC nicht über mehrere Files optimieren? Wie bringe ich dem Compiler bei, dass er mir solche "sinlosen" calls und rets eliminiert? Die Funktionen müssen auf Grund der Modularität auf verschiedene Dateien aufgeteilt werden. z.B. eine Lib kann eine Linie zeichnen. und diese Funktion soll in eine draw-Lib übernommen (so ähnlich wie bei c++ Vererbung) übernommen werden. die graphs lib greift auf eine draw-Lib und soll ebenfalls die Line function wieder zur Verfügung stellen. Muss ich das mit #defines lösen oder gibt es da eine Möglichkeit das der Compiler das optimiert? Danke für eure Inputs