-
Thread
C versus Assembler->Performance Gesperrt
noch lange nicht gesagt. Du kämpfst gegen Windmühlen. https://www.mikrocontroller.net/articles/AVR-GCC-Codeoptimierung#Prinzipien_der_Optimierung
Kannste beim GCC auch, ist aber nicht portabel: https://gcc.gnu.org/onlinedocs/gcc/Case-Ranges.html
-
Thread
Codeblähungen beim Rechnen mit globaler Variable
brauchbaren Benchmarks gibt. Momentan haben Konstanten Kosten 0, was noch Denis stammt: http://gcc.gnu.org/viewcvs/gcc/trunk/gcc/config/avr/avr.c?revision=230016&view=markup#l9902 A. K. schrieb im Beitrag #4366535: > Wer mal sehen will, auf welche skurrilen Lösungen Compiler kommen > können
an im Prinzip maschinenunabhängigen Optimierungen bei manchen Zielmaschinen nach hinten losgehen.
-
Thread
Strukturierte Programmierung: Anti-Switch-Case
-O1 ist halt minimale Optimierung. Bei -O2 macht er es. Außerdem ist gcc 5.4 schon recht alt.
verstehe den Begriff der > "hosted-Umgebung" in diesem Zusammenhang nicht. Schau' mal hier: https://gcc.gnu.org/onlinedocs/gcc/C-Dialect-Options.html (-ffreestanding bzw. -fno-hosted).
-
Thread
AVR GCC: Ungewünschte optimierung
Ist so eine Optimierung nicht ein Bug vom Compiler ? Kann ja eigentlich nicht sein das er eine Funktion "wegoptimiert" ? Würde mich brennend interessieren, da ich auch mittlerweile in C programmiere
Stelle unterbrechen und Variablen im Speicher ändern können. Siehe das entsprechende Kapitel im [[AVR-GCC-Tutorial]].
-
Thread
µC rechnet falsch oder ich finde den Fehler nicht
Lothar Miller schrieb im Beitrag #2989825: > Welche Optimierung hast du eingeschaltet? Unter Vorbehalt sage ich mal, dass dies das Problem war. Optimierung war auf -O1. Augenscheinlich auf -Os funktioniert es (zumindest UART-Ausgabe von oben gepostetem Code
Ne, so alt nun auch wieder nicht. Das ist die Versionsnummer der Atmel-Toolchain (nicht des avr-gcc). Da ist AFAIK ein avr-gcc 4.5 drin.
-
Thread
Funktionsaufruf bei Optimization -O1
rausfinden, mit > recht unschönen Folgen für Laufzeit und Speicherverbrauch. "-fwhole-program" beim gcc, mit einigen Einschränkungen
Vorkentnisse == 0 && Einarbeitungfähigkeiten == 0 Die Grundlegende Frage wird von jedem Anfänger-Optimierungs Tutorial beantwortet... eigentlich direkt von dem das man bei google zuerst findet, würde man die schlagworete der frage bei google mal eingeben. P E I N L I C H . http://lmgtfy. com/?q=gcc
-
Thread
bug in optimizer von avr-gcc?
was eigentlich nicht nötig sein dürfte - taucht die Zuweisung bei aktivierter optimierung wieder auf. Habe ich da einen Denk-Fehler oder ist das eine Bug im Optimierer von AVR-GCC?
was ich noch vergessen habe (bevor fragen kommen) ich nutze die 3.4.3 (20050214) release von avr-gcc
-
Thread
Verwendung __eabi_fsub verbieten
sind. Ich habe allerdings lediglich nach einen Weg gesucht, um für diesen speziellen Fall die Optimierungen auszuhebeln können. Da das eine kB, welches die __eabi_fsub belegt, am Ende recht schmerzhaft sein kann. Ich werde mal das GCC Manual studieren. Eventuell kann man ihn durch geschickte Nutzung
Doch, natürlich sind die dokumentiert: http://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#index-ffast_002dmath-919
-
Thread
Problem SRAM Optimierung AVR-GCC
geheimen Schalter? Peter P.S.: Ich benutze den aktuellen WINAVR GCC 4.3.2
Aufrufer stehen, kennt er diese ja schon und optimiert natürlich gleich im 1.Durchlauf. Diese Optimierung müßte eigentlich auch der GCC können. >> F:\WORK\AVR_C\AUTORANG/main.c:52: undefined reference to `checker' >> MAKE.EXE: *** [main1.elf] Error 1 > Es sind alle Quellen anzugeben. Offenbar
-
Thread
Prozessor 100% voll, Problem?
Peter Stegemann schrieb: > Die Optimierung ist schlechter, als man denkt - Nö, nur die default Einstellungen sind schlecht. Man sollte beim AVR-GCC folgende Schalter noch hinzufügen: [c] -Os -lm -fno-inline-small-functions -Wl,
Objektcodes produzieren liegt in der Natur der Sache. Und auch, dass eine neuere Version insbesondere vom GCC auch mal etwas mehr Code produziert, weil 99% der Renovierungen bei den GCC-Versionen nicht spezifisch für den AVR durchgeführt und getestet werden. Viele Optimierungen sind nur für Highend-Architekturen
-
Thread
Tricks, wie ich mein Compilat kleiner kriege
kleinen Funktionen > mit zwei drei Zeilen wie die oben. Wie geschrieben, wenn du Fälle hast, wo sich GCC ernsthaft verrechnet und garantiert kein inline-asm drin ist (auch nicht aus der avr-libc), dann schreib einen Bugreport für GCC. Das AVR-Target kann von den GCC-Entwicklern mangels einer geeigneten
erhälst du (bei passend gestaltetem Makefile, z. B. dem von WinAVR) durch »make foo.s«. > Beim alten GCC 3.4.6 brauchte ich das nicht als noinline zu > deklarieren der hat es gleich so gemacht wie vorgesehen. Der konnte automatisches Inlining nur bei Optimierung auf Geschwindigkeit (-O3), nicht bei
-
Thread
Assembler wieder auf dem Weg nach vorn Gesperrt
manchmal Fehler machen (sehr selten) die im Quellcode nicht zu erkennen sind. Gerade die 'optimierungen' mancher Compiler können einem echt die Karten legen. Z.B. beim Xmega den Takt umschalten geht in GCC je nach Optimierungsstufe mal und mal nicht. Grund ist das zwischen dem freischalten und
Ab einer gewissen Größe. Beim einen 10K, beim anderen 1K, beim dritten Null. > Gerade die 'optimierungen' mancher Compiler können einem echt die Karten > legen. > Z.B. beim Xmega den Takt umschalten geht in GCC je nach > Optimierungsstufe mal und mal nicht. Grund ist das zwischen dem > freischalten
-
Thread
Arduino Uno: Optimiert der Compiler sich im Loop wiederholende Befehle?
Arduino Compiler intelligent genug, das zu erkennen und > die Zuweisung nur einmal vorzunehmen? Der GCC ist bei Optimierung recht gut aufgestellt. > Frage 2) Ist er sogar intelligent genug, die Variable im Flash statt im > RAM zu speichern? Er ist intelligent genug, Variablen ganz wegzulassen
A. K. schrieb im Beitrag #5858804: > Der GCC ist bei Optimierung recht gut aufgestellt. > Er ist intelligent genug, Variablen ganz wegzulassen offensichtlich, man unterschätzt die Fähigkeiten! Ich habe gerade wieder ein Putz- & Aufräumphase
-
Thread
GCC-Interna: Optimierung von Bitmasken
der Vorschau abhanden gekommen :-( > Welche Optionen sind gesetzt? Übersetzung: [pre] $ avr-gcc -Wall -Wextra -mmcu=atmega8 -Os -g -DF_CPU=16000000UL --std=c99 -ffunction-sections -fdata-sections -o avrtest.o -c avrtest.c [/pre] Bindung: [pre] $ avr-gcc -mmcu=atmega8 -g -Wl,--gc-sections
[/pre] Listing: [pre] $ avr-objdump -h -S -d object > list [/pre] Version: [pre] $ avr-gcc --version avr-gcc (GCC) 4.5.1 [/pre] > Wieso IN und OUT wenn das auf ein "SFR außerhalb des I/O-Bereiches > zeigt"? Korrigiere, außerhalb des bit-adressierbaren I/O-Bereiches. Das sollte
-
Thread
arm-none-eabi-gcc unterschlägt ein case 0 im switch?!
grösser als 6. Da der Compiler weiss, dass ein 16 Bit IDR >> 13 nur den Wertebereich 0..7 hat, passt es. GCC versucht den möglichen Wertebereich von Daten zu erfassen, um daraus Optimierungen abzuleiten.
Peter schrieb im Beitrag #5849676: > Aber wieso das jetzt eine Optimierung sein soll? Wenn der bekannte Wertebereich exakt mit der Anzahl Fällen übereinstimmt, geht es besser. Es schien wohl nicht lohnend, nur dafür ein separates Schema im GCC vorzusehen.
-
Thread
Optimierung der Soft-PWM mit Assembler ISR
Halli Hallo! Bei einer LED Steuerung brauche ich eine Soft-PWM und habe den Soft-PWM-Artikel auf eurer Seite wiederverwertet. Vielen Dank an die Leute die sich die Arbeit gemacht haben. Um eine möglichst hohe Genauigkeit zu erreichen wollte ich das Ganze noch ein Wenig auf Geschwindigkeit optimieren. Daraus ergeben sich folgende Änderungen: - die Frequenz wird mit aus dem Systemtakt direkt abgeleitet - die Output-Comopare-Values sind absolute Werte für den Timer1 (spart rechnen) - Möglichkeit nur einige der Port-Pins zu benutzen (zu Ungunsten der Geschwindigkeit und deswegen hier nicht von
-
Thread
array copy in c?
Der AVR GCC und viele andere Compiler auch werfen exakt den selben Binärcode aus.
Tilo R. schrieb im Beitrag #6940323: > Der AVR GCC und viele andere Compiler auch werfen exakt den selben > Binärcode aus. Mombert H. schrieb im Beitrag #6940344: > Dann hast du schlecht getestet. Bei mir ersetzen gcc und clang eine > einfach
-
Thread
AVRStudio ärgert
und im AVR-Studio sieht man sich einfach mal im Output Fenster an, mit welchen Compiler Optionen der gcc dort aufgerufen wird. Dann vergleicht man, stellt fest welche Unterschiede es gibt, liest nach was es mit diesen Optionen beim gcc auf sich hat, entscheidet ob man die beibehalten will (bzw. ob man
verständlich. > Viele der "Kasperfallen" der Sprache C kommen > aber erst durch die Optimierung rein (bspw. alles, was sich um > "volatile" herum rankt), sodass man mit dieser Methode letztlich > zweimal debuggt. das klingt nicht so optimal. Wenn Optimierung auf solche Weise dann zu
-
Thread
Helpthread zum Wikiartikel AVR Eclipse
als Verzeichnis-trenner zu lesen? z.b.: #include <...> search starts here: c:\winavr\bin\../lib/gcc/avr/4.3.0/include c:\winavr\bin\../lib/gcc/avr/4.3.0/include-fixed c:/winavr/lib/gcc/../../lib/gcc/avr/4.3.0/include c:/winavr/lib/gcc/../../lib/gcc/avr/4.3.0/include-fixed c:/winavr/lib/gcc
/bin/../lib/gcc/avr/4.3.3/../../../../avr/bin/ld.exe: region text overflowed by 676402 bytes make: *** [u8g_test.elf] Error 1 13:32:22 Build Finished (took 9s.891ms) Die Optimierung ist eingeschaltet und nun
-
Thread
AVR und der Umgang mit C++
weiters alle > globalen Variablen mit 'static', damit sie auch wegoptimiert werden > können. der GCC hat schon eine weile die LTO Funktionalität, damit muss man nicht alles in eine Datei schreiben, nur wegen der Optimierung.
So, jetzt hab ich dem GCC mal die Chance gegeben, sich zu rehabilitieren. AVR-GCC 6.2 mit Optimierung -Os, was Size bedeutet'und weshalb die diversen Pinwackler nicht inlined werden. Gebraucht hat er dafür 410ms. Nur so als
-
Thread
funktionen inlinen
Johann L. schrieb im Beitrag #2964773: > In GCC ist -O0 der Default. Aber darum geht es hier garnicht. Sondern > darum, daß unüberlegt und grundlos offenbar falsche Aussagen bemacht > werden. Ja. ok. Momentan ist das beim gcc eben so.
wenigsten jemals -O0 benutzen. Von daher: sei ein wenig nachsichtig, wenn wir nicht für alle Optimierungen auswendig wissen, welche Optimierung unter welchen Nebenbedingung durchgeführt wird und wann nicht. Manche Optimierungen sind so trivial, dass man wohl davon ausgeht, dass der Compiler sie praktisch
-
Thread
Merkwürdiges Verhalten bei Variablen und for-schleifen
globale Variable, die überflüssigerweise mit 0 initialisiert wird, wird vom Compiler (als kleine Optimierung) ebenfalls nach .bss gesteckt.
optimierst? Im letzteren Fall, könnte das auf weitere Probleme mit dem Stack hinweisen. Bei geringer Optimierung scheint GCC keine Register für lokale Variablen zu verwenden, sondern nur den Stack. Wenn der nicht richtig aufgesetzt wurde, dann knallts. Sobald bei höheren Optimierungsstufen für lokale Variablen
-
Thread
C Sprungmarken und Sprungtabelle
Kann man die Adresse von Sprungmarken auslesen, um sie in einer > Sprungtabelle zu speichern? GCC kann sowas als Erweiterung: https://gcc.gnu.org/onlinedocs/gcc/Labels-as-Values.html#Labels-as-Values Mir ist aber in knapp 30 Jahren C-Praxis noch nichts untergekommen, wo ich sowas als vorteilhaft
Jörg W. schrieb im Beitrag #5761908: > GCC kann sowas als Erweiterung: > > https://gcc.gnu.org/onlinedocs/gcc/Labels-as-Values.html#Labels-as-Values > > Mir ist aber in knapp 30 Jahren C-Praxis noch nichts untergekommen, wo > ich sowas
-
Thread
C/C++: Frage zu (un)signed overflow
wrap-around ausgehen — auch wenn das für diese Übersetzung so sein sollte. Bereits mit aktivierter Optimierung darf sich und kann sich ein Compiler anders (bzw. genauso, nämlich immer noch UB) verhalten. Wenn du für Signed-Overflow definiertes Verhalten willst, dann verwende -fwrapv: https://gcc.gnu.org/onlinedocs/gcc/Code-Gen-Options.html#index-fwrapv
-
Thread
AVR GCC Problem mit Optimierung
Hallo, ich hab ein Problem mit der Code-Optimierung mit AVR Studio und dem GCC-Compiler. Sobald ich die die Optimierung einschalte werden mir diverse Variablenzuweisungen wegoptimiert. Wie z.B. die in Zeie 150. Ohne diese Zuweisungen funkioniert
zeige bitte auch den Assemblercode, wo sie dann fehlen soll. PS: Dass sich das Programm mit Optimierung anders verhält, liegt wohl eher an fehlenden volatiles.
-
Thread
gratis PIC compiler, der pipelining benutzt?
nicht-optimierenden Compiler durchaus plausibel aus und weist viele Analogien mit Code auf, den etwa GCC ohne Optimierung erzeugt — selbst wenn sich Zielarchitektur und Compilerarchitektur deutlich unterscheiden: > "XC8 insert two useless instructions that moves the assigned value > to a temporally
nicht-optimierenden Compiler durchaus >plausibel aus und weist viele Analogien mit Code auf, den etwa GCC ohne >Optimierung erzeugt — selbst wenn sich Zielarchitektur und >Compilerarchitektur deutlich unterscheiden: Kann schon sein. >Das zeigt lediglich, daß der Autor nicht versteht, wie Compiler
-
Thread
STM32F4xx: Kann mal jemand die SPI testen?
Ich habe gestern 1h damit verbracht. Es geht hier um taktgenaue Abfragen der Flags . Und ohne Optimierung werden die Zeiten eingehalten, mit Optimierung aber nicht mehr. Setze ich zb 5 "volatile" NOPs zwischen die befehle geht es auch mit Opmtierung.
Unterschiede in der Initialisierung oder de F469 verhält sich anders. Compiler im Atollic ist der gcc 4.8.3.
-
Thread
PIC32 Programmer und Compiler
Beitrag #2412434: > Gibt es da auch noch alternativen, > weil ich mich nicht registrieren will gcc. zuiop
Programmierung einigermaßen Firm bist MACHST du dir selbst eine UNBESCHRÄNKTE Version mit Maximaler Optimierung. (IST AUCH ZULÄSSSIG!) Die Compiler für 16 & 32 Bit basieren auf GCC und daher liegen die Quellcodes OFFEN, kannst du dir bei Microchip runterladen. Da einfach die entsprechenden Stellen abändern
-
Thread
Wann initialisiert GCC die Variablen?
Nach jeder Art von Reset, oder auch einem Sprung auf die Startadresse. Letzteres passiert beim avr-gcc z.B. bei einem Interrupt ohne ISR. Oliver
@Bernhard: Initialisiert werden müssen die Dinger, ob mit oder ohne Optimierung. Die Frage ist eher wie das geschieht. Ob das der Loader erledigt (mit Betriebssystem) oder der Startup-Code (ohne BS). Der gcc 2.9 optimiert die 0 nie weg, egal mit welchem -Olevel. Der gcc
-
Thread
WinAVR-20070122
deklarierst. > Man hätte besser nur die Bugs beseitigen sollen und keine weiteren > (Un-)Optimierungen einbauen, dann wäre er richtig gut. Das ist Quark. Viele Optimierungen sind einfach völlig neu angegangen worden im Vergleich zu den 3er Versionen, damit ergeben sich notwendigerweise neue
heutigen Zeit > mehr Wert auf Neuerungen als auf Fehlerbehebung verwandt wird. Trifft gerade für den GCC wirklich nicht zu. Echte Bugs werden dort durchaus zügig bearbeitet. Der AVR-GCC leidet allerdings darunter, dass es nur sehr wenige Leute gibt, die dort aktiv etwas entwickeln.
-
Thread
Fork: avr-libc version 3, für xtiny
804, 806, 807, 1604, 1606, 1607. Der allerdings nicht aktiv ist, weil >> die Devices nicht von avr-gcc unterstützt werden und daher von configure >> ignoriert werden. > Wäre das denn großer Aufwand, die dem avr-gcc beizubringen? Ist schon drin: http://gcc.gnu.org/onlinedocs/gcc/AVR-Options.html
://gcc.gnu.org/PR92729 Oder das tut ein neues Geschäftsfeld für Microchip auf: Optimierungen deaktivieren, und für ein paar armselige Kröten Freischaltungen für die Optimierungen verticken. > Und avr-gcc
-
Thread
PIC mir C Programmieren
im Vergleich ist. Aber das der nur 60Tage läuft stimmt nicht ganz. NAch 60Tagen wird nur die Optimierung zurückgefahren was bedeutet das der Zielcode etwas größer wird. Der Compiler bleibt aber funktionsfähig. Diese geringere Optimierung spielt für den Hobbyisten keine Rolle. Es ist nicht gravieren
#2091289: >>Der läuft ja nur 60 Tage... > > Der läuft länger. Nach 60 Tagen gehen ein paar Optimierungen > nicht mehr. Dadurch wird der Code größer. Nach meinen Erfahrungen > aber auch schneller;) Es handelt sich auch nicht um alle Optimierungen sondern nur um höhere Optimierungsstufen. Programmiert
-
Thread
Code-Optimierungen gesucht
Servus, Also ich hab ein wenig C-Code geschrieben und jetzt versuche ich ihn noch zu Optimieren. Und genau das ist der Punkt an dem ich euch um Vorschläge bitte, da ich noch nicht sehr lange Programmiere. Folgender Code soll abwechselnd auf OC0A und OC0B eine Sinus-Halbwelle ausgeben. Zusätzlich soll Pin 4 gepollt werden und im Falle eines Tastendrucks soll dann Pin 2 abgeschalten werden. Wobei beachtet werden muss, dass Pin 4 beim Einschalten gedrückt sein wird und dabei nicht als Ausschaltbefehl gewertet werden soll. [c]#include <avr/io.h> #include <avr/interrupt.h> #define ANZAHL 11
-
Thread
AUf Kriegsfuß mit dem AVR-GCC.
den Anschein, dass er halt glaubt, GCC wuerde hier etwas falsch machen, aber im Endeffekt war sein urspruengliches Programm falsch, das sein Compiler aufgrund schlechter Optimierung zufaellig richtig uebersetzt hat.
mit avr-gcc 4.3.2 (dito blah-gcc) mit -Os zu > [avrasm] > foo: > lds r24,x ; x.0, x > .L2: > tst r24 ; x.0 > brne .L2 > ret > [/avrasm] > > Johann extern const volatile char x; Na
-
Thread
AVR-GCC generiert unnötigen(?) ISR overhead
schnelle SPI interrupt routine zu schreiben und hab mir zu dem Zweck mal das listing (lss) vom avr-gcc angeguckt. Ich verwende einen ATmega168P. Optimierung -Os Hier der C-Code: [c] uint8_t rxd; uint8_t txd; ISR(SPI_STC_vect) { rxd = SPDR; SPDR = txd; } [/c] und hier das Resultat
andere wollen die Welt und den ganzen Rest auf Hex umstellen, und meine Nerd-Spielwiese ist eben avr-gcc. Von Assembler bis C++ ist da alles dabei /und/ adäquat, man kann sich in Testing oder Profiling vertiefen. Wenn ich was im Simulator praktisch finde, bastel ich daran weiter, und neue (Optimierungs
-
Thread
neues WinAVR macht Probleme
es fehlt Sourcecode C/ Die Warteschleifen in der jetzigen Form auf Basis von pause() werden vom GCC "gnadenlos" wegoptimiert. Ggf. die Optimierung abschalten ;-( oder mit _delay_ms() und _delay_us() aus der avr-libc arbeiten (Einsteiger) oder Timer einsetzen (Fortgeschrittene).
Frage: was gibt which -a avr-gcc.exe aus? was gibt avr-gcc -print-file-name=include aus? Oliver
-
Thread
Verständnisproblem: Programgröße ändert sich mich Wert des shift-Faktors
Ohne asm-Listing/C-Quelle/Compiler-Version/Schalter ist's aber Rumgestochere. Möglich auch, daß GCC erkennt, daß b eine Konstante ist und dadurch Optimierungen machen kann für >> 2, die er für >> 1 nicht machen könnte, zB wenn dadurch ein if(a == ...) Block wegfällt da toter Code. Einige "Optimierungen
kann man abwürgen, indem man vor/hinter C-Befehle schreibt asm volatile (""::); oder indem man GCC explizite Kenntnis über Registerinhalte nimmt: asm volatile ("" : "+r" (a)); Beide Templates gehen für alle GCC-Varianten, also nicht nur für AVR. Sie erzeugen keinen Code, haben aber Einfluss
-
Thread
AVR ASM Frage zu Symbolen bzw Rechnen mit Symbolen
Compiler der Komplexitätsklasse von GCC sind ziemlich gut darin, invariante Konstruktionen abzukürzen.
werden. Geh doch mal ins Detail. Ich möchte auch noch was lernen. Irgendwelche berechneten Optimierungen gibts nämlich da nicht...
-
Thread
Fixed-Point Support in avr-gcc?
völlig > unbedeutenden Stellen um einzelne Zyklen oder Bytes kämpfen. Heisst also konkret: avr-gcc ist git wie er ist und bedarf keiner weiteren Optimierungen oder Featues. Schön :-) Wie bei Thunderbird: Wird eingestapmft da perfekt und nicht mehr verbesserbar :-)
Johann L. schrieb im Beitrag #3023991: > Heisst also konkret: avr-gcc ist git wie er ist und bedarf keiner > weiteren Optimierungen oder Featues. Wer hat das behauptet? Ich meinte ausschließlich den Anwender des Compilers. D.h. im Quelltext möchte ich nicht kryptischen
-
Thread
Universelles USB RFM12 Modul
Codeausführung hängen bleibt. Wird diese Zeile auskommentiert, so funktioniert der Code. Die Optimierung muss auf -O0 (keine Optimierung) eingestellt werden. Bei eingeschalteter Optimierung (-Os) wie im makefile des Beispiels meldet AVR-Studio 5 einen Fehler. Insgesamt ist das Framework doch spärlich
Projekt mit den vor ein paar Minuten heruntergeladenen aktuellen Sourcecodes angehangen. Die Optimierung -Os ist eingeschaltet. Die Fehlermeldungen: Error 1 'fabs' was not declared in this scope c:\program files\atmel\avr studio 5.0\avr toolchain\bin\../lib/gcc/avr/4.5.1/../../../../avr/include
-
Thread
Werden 2 "|=" optimiert?
Achso Optimierung ist auf size gestellt
> Der Grund ist der, daß es der GCC nicht schafft Code zu > kompilieren der in den 4 Takten ausgeführt wird. Optimierung ausgeschaltet? Anyway, derartige timed sequences sind ein wesentliches Anwendungsfeld von inline asm, vorzugsweise
-
Thread
[AVR] Optimierung von 32bit shifts
sind 5 Berechnungen), ich war nur erstaunt, dass der Compiler das nicht selber macht obwohl die Optimierung sonst ganz gut funktioniert. Ich dachte es gäbe irgendeinen mir unbekannten Grund dafür, aber so wie es aussieht liegts wohl am Zusammenspiel zwischen GCC und AVR. Kann vielleicht jemand mein
return [length = 1] [/avrasm] Bis auf das doppelte ANDI *,15 ist das optimal. Wie man die Optimierung direkt in GCC macht ist mir aber nicht klar, vielleicht hat ja jemand ne Idee...
-
Thread
GCC (WinAVR) Cosinus
beliebiger Genauigkeit. Das soll der GCC erlauben, Funktionsaufrufe mit konstanten Argumenten gegen das mathematisch äquivalente Ergebnis auszutauschen. Optimierungen sind auf diesem Wege unabhängig von der Gleitkommabibliothek des Zielsystems
--with-swarf2 Thread model: single gcc version 4.3.0 (GCC) [/pre]
-
Thread
Code optimieren, switch case ersetzen
> Super kompakt und übersichtlich Und ziemlich sinnlos. Es ist der Versuch einer manuellen Optimierung die man (A) schöner machen könnte, und (B) der Compiler bekommt sie von alleine vermutlich genauso gut hin. (A) Wenn man ganz fest an die manuelle Optimierung glauben möchte: [c] switch
Wer sehen möchte was der GCC mach: https://github.com/gcc-mirror/gcc/blob/edd716b6b1caa1a5cb320a8cd7f626f30198e098/gcc/stmt.c#L1114 die expand_case und emit_case_... Funktionen.
-
Thread
Suche Hilfe bei Optimierung Bootloader
mein Platz Problem erledigt. Bisher war mein Code 28700 Byte groß, nach einfügen der fehlenden Optimierung 15002. Das hätte ich nicht erwartet. Die Frage ist, ob noch alles geht :-) Irgendwann muss ich mein UrMakefile mal die Optimierung entfernt haben. Jetzt wieder drin. Aber eventuell bekommt
Ich benutze auch: -fno-inline-small-functions Der AVR-GCC ist etwas zu übereifrig, kleine häufig aufgerufene Funktionen zu inlinen.
-
Thread
Wert in AVR Register laden: optimalen Code generieren?
nur noch rückwärts mit der Optimierung bzgl. Codegröße. Alles, was am gcc verbessert wurde, ging in die X86/ARM-Architekturen, und bringt dem von-Neumann-Exoten AVR gar nichts. Oliver
Optimierung bzgl. Codegröße. Man kann durchaus auch alte Versionen nutzen. Der Fetisch des dauernden Updates ist manchmal kontraproduktiv. > Alles, was am gcc verbessert wurde, > ging in die X86/ARM-Architekturen
-
Thread
BASCOM vs. C Gesperrt
in GCC mit Printf einen einfachen String (Hello world) über den UART ausgegeben. Allerdings war ich von der Codegröße (ca. 3KByte) schon geschockt; mit 0s Optimierung. BASCOM benötigt dagegen nur ca. 160
Arbeit gewesen. GCC: 440 bytes, mit Os Optimierung BASCOM:474 bytes In diesem Fall ist der GCC-Code etwas kleiner, weil ja auch nur das nötigste implementiert wurde.
-
Thread
C code UART Atmega und Optimierung
Hallo Leute, habe für einen ATMega folgenden Code erstellt, kann ich da noch was optimieren? ich bin leider Anfänger in Sachen C Programmierung und wollte jetzt etwas Hilfe. Vielleicht lässt sich da noch was verbessern... [c] #define FOSC 16000000 #define F_CPU FOSC #define BAUD 9600 #define MYUBRR FOSC/16/BAUD-1 #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> #include <string.h> #define UART_MAXSTRLEN 32 volatile uint8_t uart_str_complete = 0; volatile uint8_t uart_str_count = 0; volatile char uart_string[UART_MAXSTRLEN + 1]
-
Thread
Variablen eindeutig benennen damit der Typ eindeutig ist
(gcc: -flto). Damit funktionieren solche Optimierungen auch über die Grenzen von Übersetzungseinheiten hinweg.
referenzieren könnte. > > In der Theorie ja. In der Praxis gibt es auch link-time-optimization > (gcc: -flto). Damit funktionieren solche Optimierungen auch über die > Grenzen von Übersetzungseinheiten hinweg. Mit switches kann man vieles anders machen und verdrehen, fragt sich nur ob das auch
-
Thread
GCC ( AVRStudio 6.2.933.beta) optimiert lokale variable weg
Optimierung ausschalten ? Debugmodus bedeutet nur das die Zusatzinfos nicht entfernt werden bzw. überhaupt generiert werden.
einen 8 Bit Controller mit seinen beschränkten Resourcen betrachten. Und ich arbeite ja nicht nur mit GCC und mit AVRs. Aber in diesem einen Falle hätte es natürlich mit Aus/Einschaltung der Optimierung funktioniert.