-
Thread
Programme haben plötzlich bugs. AVR Studio 4 und STK500
viel µC raus und wieder einstecken. Weder neuen Compiler benutzt, noch weiss ich wie man die Optimierung verändert!
durchgetestet: Ob "test = test++;" oder "test++;" ist egal, trotz der Compilerwarnung. Mit und ohne Optimierung wird derselbe Code erzeugt. (avr-gcc 4.3.5)
-
Thread
Linkeroptimierung
einer Objektdatei benutzt wird, ist gleich alles andere aus dieser Datei auch dabei. Eine Optimierung würde also eine entsprechende Aufteilung auf kleinere Objektdateien voraussetzen.
meisten Systeme sowieso dynamische Libs unterstützen; dann ist das nicht mehr besonders relevant. Der gcc und seine Umgebung wird ja nur zu einem Bruchteil für AVR etc. verwendet.
-
Thread
AVR-Studio 5
: > Johann L. schrieb im Beitrag #2085030: >> Stattdessen gammeln einige Bugs seit Jahren im avr-gcc rum. > > Ist halt Open-Source Frickelkram und keine professionelle Software. Es gibt ja auch keine profesionellen (bezahlten) avr-gcc Entwickler. Das ist nicht dem GCC-Projekt anzulasten. Atmel
dass Alf-Egil Bogen und Vegard Wollan damals wohl noch nicht einmal eine Ahnung hatten, dass man GCC für einen Controller als Compiler benutzen kann, falls sie den Namen GCC denn überhaupt kannten. Dass ein GCC mal für den Erfolg ihres "Babys" mit verantwortlich sein könnte, war gewiss außerhalb
-
Thread
avr-gcc Code im lss
hi, wenn man im AVR-Studio ein Projekt erstellt undkompiliert, dann findet man im Listing auch den C-Code als Kommentar wieder. Im Eclipse mit AVR-Plugin ist das leider nicht der Fall. Weiß jemand welche optionen für die Ausgabe des codes verantwortlich sind oder noch besser, wo ich das genau in den Projekt-Settings im Eclipse-Projekt umstellen muss? Danke Vlad
-
Thread
MSP430 + Eclipse + mspgcc Release erstellen
Bis jetzt habe ich meine Programme für den MSP immer als Debug ausgegeben und mit hilfe des msp430-gcc und Eclipse auf meinen Controller geflashed, das geht alles auch wunderbar. Nun habe ich aber eine Frage. Die Debugdatei hat doch jetzt noch unnötigen balast an Board und ist doch auch langsamer als
Optimierungseinstellungen gleich groß sein. Was natürlich beim CCE sein kann ist, dass unterschiedliche Optimierungs-Einstellungen sind. Auf höchster-Optimierungsstufe lässt sich kaum noch was debuggen. Allerdings kann es eben dann vorkommen, dass die Funktionalität etwas anders ist. Gerade bei zeitlichen Sachen
-
Thread
"NOP" beim C-Compiler für den PIC32
Hallo, beim MPLAB C-Compiler für den PIC32 möchte ich eine leere Anweisung einfügen, die allen Optimierungen stand hält. Der Grund dazu ist die Erzeugung des richtigen Timings für die angeschlossene Hardware. Zur Zeit denke ich an ein Stückchen Inline-Assembler-Code mit einem oder mehreren NOPs (wie
Zur ursprünglichen Frage, ob sinnvoll oder nicht: Der verwendete Compiler ist der GCC und so gut wie alle ISAs haben ein "NOP", also wohl auch MIPS32, folglich sollte das funktionieren: __asm volatile ("nop");
-
Thread
Suche schnellen µC
einen schnellen µC. Mein letzter Hexa lief mit zwei ATmega644 (20MHz) und war trotz heftiger optimierung zu 60-70% ausgelastet. Dieses mal möchte ich noch deutlich anspruchsvollere Bewegungen berwerkstelligen und weniger auf Optimierung achten um Zeit zu Sparen und den Code leserlicher zu machen.
ausschlaggebende Kriterium ist also wohl der Compiler und > Entwicklungsumgebung. > > > > Eclipse, CDT, GCC, OpenOCD ist als Ersatz von MPLAB oder als Paket für > STM32 gemeint? Eclipse=IDE CDT=C Development für Eclipse GCC ist der Compiler, der Microchip C32 ist auch ein GCC OpenOCD ist der Treiber
-
Thread
Assembler statt C code in start up routinen
ah ok, also prinzipiell wäre es aber möglich (kein optimierung, etc..)?
mitkommt oder bei der Generierung von Libs erst mithilfe des Compilers erzeugt wird: Das ABI von avr-gcc sieht vor, daß in R1 immer der Wert 0 steht. avr-gcc geht davon aus, daß dieser Wert in R1 steht. Wie also bekommt man den Wert 0 in R1 hinein? Nach dem PowerUp stehen in den Registern R0-R31 eines
-
Thread
Einfache "for" Schleife funktioniert nicht
nicht > heißt das es deswegen nicht funktionieren darf. Doch, genau das. Insbesondere mit Optimierung. Ansonsten überleg mal, was eine Beendigung von main() für einen Sinn ergibt.
lernen ;-) Hat mit µC nichts zu tun, ist eine C-Compiler-Sache. Wenn Du im Visual Studio die Optimierung einschaltest oder unter Linux z.B. mit "gcc -O2" compilierst wird sehr wahrscheinlich auch nicht passieren was Du wolltest.
-
Thread
Zeitgleich Ausgänge setzen (AtMega8515)
PORTA &= ~(1<<PA2); } } } } [/c] [code] Build started 17.2.2011 at 21:13:05 avr-gcc -mmcu=atmega128 -Wall -gdwarf-2 -Os -std=gnu99 -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT Auto-LED-Blitzer.o -MF dep/Auto-LED-Blitzer.o.d -c ../Auto-LED-Blitzer.c
ausserhalb einer Funktion) definiert wurde. Das volatile sagt dem Compiler nur, dass er sich mit Optimierungen auf dieser Variablen zurückhalten soll und keinen Zugriff wegoptimieren darf.
-
Thread
Frage bezüglich selbst geschriebener Funktion itoa()
braucht 2092 Takte, also mehr >als doppelt soviel. Wo liegt hier mein Fehler? Möglicherweise ist GCC nicht schlau genug, die Division und Modulopoeration nur einmal auzuführen. Schau in das generierte *.lss File, dort sieht man das. Liegt im gleichen Verzeichnis wie dei *.hex File. MFG Falk
B. B. schrieb im Beitrag #2065622: > o liegt hier mein Fehler? hast du die optimierung eingeschaltet?
-
Thread
gcc optimiert zu viel
Hallo zusammen, ich habe folgende (abgespeckte) Zeilen, die einen Dreiecktausch durchführen: [code] uint8_t A[10], B[10]; uint8_t* temp; uint8_t* pA =&A[0]; uint8_t* pB =&B[0]; temp =pA; pA =pB; pB =temp; [/code] Wie schaffe ich es, dass der Compiler mir diese Zeilen nicht wegoptimiert? Die triviale Lösung "Optimierung deaktivieren" gilt aber nicht. Danke und Grüße Jörg
-
Thread
sei() verhindert Programmausführung
als "volatile" deklariert, da sonst die main ja nicht mitbekommt, dass sich diese ändern. Die Optimierung hab ich im AVR-Studio für die Tests ausgeschalten. Das WGM01-Bit im TCCR0 hab ich tatsächlich vergessen zu setzen, macht aber leider auch keinen Unterschied bezüglich der nicht vorhanden Funktion
implementiert hast oder nicht. Nur: für den Fall, dass du sie nicht selber implementiert hast, kommt die gcc-Default Routine zum Einsatz, welche macht: den Prozessor resetten. > entsprechende Flag nach der adc_init(); geht das ganze wunderbar! Was > mir allerdings noch unklar ist, ist der Effekt, dass
-
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
[ATMega] Little / Big Endian und EEPROM
oder badet das der Compiler zuverlässig aus? Ich programmiere in C mit AVR Studio, nutze die GCC Toolchain. Targets sind diverse ATMegas (32, 2561 1281 etc.) Gruß Bernhard
Kuddelmuddel ist mir beim Kopieren pasiert, das ist beim Programmieren alles korrekt ;) Ich werde die "Optimierung" des etwas schnelleren Rauslesens also rausnehmen und das komplette DWORD rauslesen. Gruß Bernhard
-
Thread
problem mit wdt zurücksetzen
ist hier gut beschrieben: "http://www.rn-wissen.de/index.php/Avr-gcc/Interna#Frühe_Codeausführung_vor_main.28.29"
. nur ist der Code jetzt auch ein ganzes Stück größer. hat jemand eine Idee, wie man der Optimierung verbieten kann, die Funktion zu entfernen?
-
Thread
Kommerzieller AVR C Compiler
viel davon ein so mächtiges System wie GCC auf einen AVR loszulassen. Alleine das die Optimierungen des GCC bei AVRs öfters mal nach hinten losgehen, ist ein recht deutliches Indiz dafür, das ein AVR nicht dem Hauptentwicklungsziel des GCC entspricht
AVR-GCC für ATTiny/8bit macht bei den Optimierungen viel Mist. Würde ich nur benutzen, wenn Du auf Optimierungen verzichten kannst. So der Stand mit Toolchain 2010-01-10. Zu anderen Targets/Versionen kann
-
Thread
Meßverstärker für 1/f-Rauschen 0.1 - 10 Hz
, versuchte Jim Williams die Schaltung zu optimieren. Anstatt viel Aufwand in eine sinnlose Optimierung zu stecken hätte man lieber versuchen sollen in eine bessere Schaltung zu investieren. Da meine Ergebnisse noch nicht da sind, mache ich es anders deutlich: Jim Williams investiert ca. 500-600
ich das > überhaupt? Macht das Projekt irgendeinen realen Sinn?) _Mein_ Preamp hat bei der Optimierung eines Frequenzsynthesizers eine Menge realen Sinn gemacht.
-
Thread
Wittig(welec) DSO W20xxA Open Source Firmware (Teil4) Gesperrt
langsamere Lösung eingebaut um auf die Schnelle eine fehlerfreie Lösung biten zu können. An der Optimierung arbeite ich dann in der nächsten Zeit. Gruß Hayo
weil nur noch der betroffene Button aktualisiert wird und nicht mehr das ganze Menü. Weitere Optimierungen sind in Arbeit. Gruß Hayo
-
Thread
Kleines Makro, inline asm so richtig?
ihr wisst ja selber was der compiler daraus macht... Ja, ein SBI - normalerweise. Hast du die Optimierung ausgeschaltet? Oder wofür soll das Makro sonst gut sein?
ne optimierung ist auf default 0s ((BYTE) |= (1<<(BIT)) daraus macht er mit sicherheit kein sbi... er setzt ne odermaske über ein geshiftetes bit, also minimum 2 befehle macht er daraus!
-
Thread
optimale avr-gcc compiler optionen
Hallo avr-gcc Entwickler! welche avr-gcc compiler optionen verwendet ihr in einem Makefile? Mein Fragestellung war, wie ich den cocoOS "cooperative task scheduler" - http://www.cocoos.net/ so verwenden kann
Uwe S. schrieb im Beitrag #2039842: > Hallo avr-gcc Entwickler! > > welche avr-gcc compiler optionen verwendet ihr in einem Makefile? > > Mein Fragestellung war, wie ich den cocoOS "cooperative task scheduler" > - http://www.cocoos.net/ so verwenden
-
Thread
keine Breakpoints in ISR möglich
// ---------------------------------------------------------- // [/c] Ich habe die Optimierung auf 0O gesetzt. Die Interruptroutinen werden ausgeführt ( Habe die Flags, welche in den Routinen gesetzt werden, in der "main" Datei auslesen lassen) Ich benutze AVR Studio, Version: 4.18.716
Dein Codeschnippsel produziert bei mir: [pre] Build started 28.1.2011 at 22:44:34 avr-gcc -mmcu=at90can128 -Wall -gdwarf-2 -std=gnu99 -O0 -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT breakpoints.o -MF dep/breakpoints.o.d -c ../breakpoints.c ../breakpoints.c
-
Thread
Frage zur Programmierung.
Danke erstmal... Ich arbeite mit AVR-Studio + GCC Habe leider nur Java und PHP gelernt, C basiert nur auf Selbststudium. >Tobias Jenatschke schrieb: > Da steht ja Code drin... wegoptimieren kann er die nicht... >Woher weißt du das? >Comopilier das mal ohne Optimierung (-O0), das sollte helfen. Ich vermute das nur, da es ja direkt im Main funktioniert.... Ich versuch heute abend mal den gesamten Code hier zu rein zu posten...
-
Thread
TEKWAY DST1xx2B Oszilloskop
bootzeit angeht, ja es ist Linux und braucht etwas, nicht weil es Linux ist sondern weil keine optimierung vorhanden. Meine fw bootet in 11,5sec - nix optimiert, kann man aber locker auf 5sec verkürzen. Die frage ist nur, wozu ? Jedes Messgerät braucht eine vorwärmphase, die kann schon 15 bis 60min
libc-2.8.so nach libc.so.6 Kompiliert habe ich mit folgenden Parametern: arm-none-linux-gnueabi-gcc.exe -msoft-float -mcpu=arm920t -mtune=arm920t -march=armv4t -o hello hello.c 'Hello World', Math-Test, Framebufferzugriff und Watchdog-Einstellung auslesen hat funktioniert. Für das Bench-DSO
-
Thread
kompilerdifferenzen zwischen gcc 4.3.3 /4.4.3 oder DAUfehler -- Ich weiß nicht mehr weiter.
Frank Muenzner schrieb im Beitrag #2029691: > wie kann ich gcc zwingen bestimmte statements zu kompilieren bsbw die > nops? 1. GCC umschreiben oder 2. Inline Assembler, z.B [code] #define NOP __asm ("nop") [/code]
stackgröße festgelegt? Anbei das Makefile - vielleicht geht da ja die stackgröße hervor? geht bei gcc mit sicherheit auch - ich weiß rfm.... kann trotzdem mal jemand draufschauen und mir sagen wie ich die optimierung rausnehme? ####################################################################
-
Thread
WinAVR bekannter Linker Fehler?
Namen in anderen > Modulen diesen Effekt zu verhindern. Ja, so ist es. > Sollte das in "C" oder gcc wirklich so gewollt sein, da doch die export > Funktion ausreichend sein sollte. Das hat nichts mit GCC zu tun. Das ist in der Sprache 'C' so definiert. Eine Funktion oder Schlüsselwort 'export'
. Andere Linker machen das nicht und geben entsprechende Fehlermeldungen aus. Dem GCC lässt sich dieses Verhalten mit -fno-common auch abgewöhnen.
-
Thread
Warnmeldung bei Pointerinitialisierung
Nee, aber in den Zielpointer casten. ptr_double_var = (uint8_t *) &double_var; Mit AVR-GCC ist double und float in der Größe gleich und 4 Bytes groß. Es ist "Zufall", dass dein Programm funktioniert.
const Werten maskiern. Das Problem ist das double nicht gleich double ist. >Stefan: >Mit AVR-GCC ist double und float in der Größe gleich und 4 Bytes groß. >Es ist "Zufall", dass dein Programm funktioniert. die andere Vorredner haben schon recht! Du könntest das auch mit einer Union lösen:
-
Thread
16-Bit Ergebnis aus 8-Bit-Variablen berechnen?
Woran kann ich erkennen, wie groß "int" im GCC-Compiler ist? Ich Kompiliere immer mit der Optimierung: "-0s" könnte das zu Problemen führen? habe es so probiert: 16-bit-variable = (uint16_t)(rechnung); Die Rechenergebnisse sind noch
Erik H. schrieb im Beitrag #2027614: > Woran kann ich erkennen, wie groß "int" im GCC-Compiler ist? sizeof(int) sagt es dir. Aber im WinAVR ist siezof(int) gleich 2. Also 16 Bit > Ich Kompiliere immer mit der Optimierung: "-0s" könnte das zu Problemen > führen? Kann. Aber
-
Thread
ATmega8 und LCD HD44780 nur erste Zeile leuchtet
Problem mit HD44780kompatiblen LED. Ich habe auf meinem ATmega8 das Beispielprogramm aus dem AVR GCC-Tutoial laufen lassen. http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial/LCD-Ansteuerung Leider zeigt das LCD nur in der erste Zeile voll angesteurte Balken. Wenn ich das Programm aus
Es ist auch egal welches meiner baugleichen LCDs ich verwende. Angeschlossen ist es genau wie im GCC-Tutorial beschrieben --> an Port D?
-
Thread
C++, java oder Python?
unterscheidet auch zwischen Variablen (var) und Werten (val). Er kann aufgrund dieser Informationen Optimierungen vornehmen, die Java nicht vornehmen kann. Scala fügt sich nahtlos in die bestehende Java-Welt ein, was einen kommerziellen Erfolg verspricht. Leider erzeugt Groovy einen viel größeren
Bytecode raus... http://nestedvm.ibex.org/ oder die MS-Variante C++/CLI für die CLR oder der bessere gcc aka clang für die LLVM > Aus diesem Grunde ist es etwas seltsam von der JVM-Technik zu sprechen. > Richtiger wäre eher, von der "Technik der virtuellen Maschinen" zu > sprechen.
-
Thread
GCC AVR Fehler
Hallo! Ich habe da ein dickes Problem im GCC AVR gefunden. Ich will einen String nach einer Reihe von Schlüsselwörtern durchsuchen. Wenn die Schlüsselwörtern im Ram stehen und unter verwendung von strcasecmp geht das auch wunderbar. Kommen
kennt. Bei Strings[i] geht das dann klarerweise nicht mehr. > Ich habe da ein dickes Problem im GCC AVR gefunden. Wider nix. War doch nur ein Programmierfehler. (Das Umcasten von cliline_ram auf const char* kannst du dir sparen. Das const ist an dieser Stelle die Zusicherung der Funktion, dass
-
Thread
WinAVR auch ohne Union optimierter Code möglich?
asm-Sequenzen. Zudem ein Bugreport für die neueste GCC-Version (4.5.2 bzw. 4.6.0) machen, damit diese Optimierung vielleicht irgendwann Teil von avr-gcc wird. Innerhalb von avr-gcc ist das Problem, daß es keinen Königsweg betreffs Subreg-Lowering gibt
und je nach Verschalterung sieht ein Backend andere Pattern und ist nicht auf deren Verarbeitung/Optimierung vorbereitet -- zumindest ist's im avr-Backend so.
-
Thread
avr-gcc verdoppelt code von Funktionsaufruf
) asm("nop"); }[/c] ---- Schachtle ich das Unterprogramm eine Ebene tiefer, so erzeugt der gcc ein 152 Byte langes Programm ----[c] #include "avr/io.h" #include "avr/portpins.h" static void init_display() { DDRA|= _BV(PD1) | _BV(PD0); DDRA|= _BV(PD1); DDRA|= _BV(PD0); DDRB|=
statische Funktionen lassen sich problemloser optimieren. Trotzdem ist es komisch, daß die Optimierung -O1 in 2 Situationen besser abschneidet als -Os Andreas
-
Thread
Problem mit ltoa
Also was übergibt der Aufrufer an strrev(). Und gibt es vielleicht eine Unterscheidung/Optimierung innerhalb AVR-GCC die bei kleinen AVRs von 16-Bit Pointern auf 8-Bit-Pointer runterschaltet. Das Problem kann ja ohne weiteres bei weiteren Funktionen zu schlagen.
die ABI es für Zeiger vorsieht: diese sind 16 Bit groß, einen Sonderfall für 8-Bit-Pointer kennt avr-gcc nicht.
-
Thread
LCD Display initialisiert nicht
verwende die subroutinen aus dem lcd tutorium Welches? [[AVR-Tutorial: LCD]] (Assembler) oder [[AVR-GCC-Tutorial/LCD-Ansteuerung]] Ich vermute die C Version. Dann wäre deine Pinbelegung die unveränderte aus der Includedatei lcd-routines.h. > wenn ich den strom einschalte sollten ja > eigentlich
beliebte" Probleme: Falsche Taktquelle oder Teiler-durch-8 3. bei Benutzung von delay.h mit Optimierung kompiliert werden Der Praxistest mit genau blinkender LED zeigt im Erfolgsfall, dass alle vier Punkte richtig erfüllt sind. > genau, die c version. sind recht einfache routinen und ich habe
-
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
GDB findet Sourcecode nicht
den Sources? Und wenn ja, woher weiss es, aus welchen Sources? Oder anders: Findet Objdump und gcc den Sourcecode auf die selbe Weise? Oder werden da ganz andere Prinzipien angewandt?
Solange ich debugge, ist jegliche Optimierung ja eh zweitrangig resp. unerwünscht. Gruäss Simon
-
Thread
XMega bleibt "hängen"?
läuft!? Was ich festgestellt habe, ist eine unterschiedliche Kompilerversion: Windows: avr-gcc 4.3.3 (WINAVR 20100110) Linux: avr-gcc 4.3.4 bitte jetzt keine Ratschläge ala "na dann prog halt unter Windows" .... Grüße, Michael
nicht dauern umbooten zu müssen. Dann checke ich mal die Listing Unterschiede. Wusste nicht, dass der gcc, respektive der avr-gcc direkt so ein Listing erzeugen kann... DANKE! Grüße, Michael
-
Thread
PIC oder AVR, was ist besser
gut arbeiten, aber nicht unter Linux. Ab PIC24 basieren die C-Compiler von Microchip auch auf dem GCC. Microchip bietet die nur für Windows an. Technisch könntest Du den auf Linux portieren (und dabei den Lizenzmanager rauswerfen), aber die Lizenz der Bibliotheken (kein GNU) verbietet Dir das. (*)
Microchip Verfügbar ist. Na gut, aber wenn ich als Hobby-Fummler auf der anderen Seite auch Optimierung haben kann, dann gehe ich doch da hin, oder?
-
Thread
Was benötigt weniger Takte If oder case?
Teil fehlt: der Binärbaum. Welcher Compiler (auf welcher Architektur) macht das tatsächlich ? GCC ? IAR ?
PS: Wie beim avr-gcc allgemein üblich kann es durchaus vorkommen, dass die Gewichtung etwas schief liegt. Weshalb es speziell im avr-gcc eine Möglichkeit gibt, table switches auszuschliessen (-mno-tablejump). PPS: Ich
-
Thread
Editor zum Programmieren von C für µC - Kein AVR Studio
Netbeans sollte auch nicht unerwähnt bleiben. Unterstützt in der neusten Version sogar den avr-gcc aus WinAVR-Installtionen ohne viel an Einstellungen vorzunhemen. MfG Mark
?! ich habe den AVR Compiler genommen den NetBeans gefunden hat. Und von den ganzen Zusatz-Optimierungen. Tja gute frage - da weiss ich nicht so ganz was da vorsich geht. :/ so beim überfliegen der Optimierungsstatements vom AVR Studio und von NetBeans sahen diese sehr ähnlich aus.
-
Thread
Schon wieder volatile -_O
weiterkam. Alle Variablen sind global (außer die in der Regelung und in der Filterung). OHNE Optimierung funktioniert die Regelung wie erwartet auch OHNE volatile bei den Filter-Variablen. MIT Optimierung hilft kein "volatilisieren" der globalen Variablen, nur der lokalen in der Filterung... >
kennen. Vielleicht mal ""stromregler() { return FIXED_DEBUG_WERT; }" Oder aber: .lss mit/ohne Optimierung vergleichen.
-
Thread
Erfahrungen eines Einsteigers
festgehalten habe sind ja auch schon eine Zeit her) und mir einfach mal mit -S zeigen lassen was denn gcc aus dem Original Code macht. Was mir so auf die schnelle auffällt. Wenn ich OCR1A und OCR1B mit den gleichen Werten bestücke (kommt in diesem Program öfters vor) lädt gcc zweimal die Register r24 und
nur wüsste warum, irgendwas habe ich da wohl man unbewusst > verbockt. Hat einer einen Tipp? Optimierung einschalten vielleicht? Ich habe mein Beispiel mit -O2 übersetzt. Ohne Optimierung arbeitet der gcc halt stur nach den Anweisungen, wie sie im Quellcode vorkommen. Schön fürs Debugging, weniger
-
Thread
Slight Optimization oder Size Optimizations
Beitrag #1979288: > Kann mich jemand aufklären? Du hast Code geschrieben, der abhängig von der Optimierung seine gedachte Funktion nicht mehr erfüllt. Beispielsweise Zeitschleifen, die mit Optimierung nicht mehr (oder nicht lang genug) warten.
Markus schrieb im Beitrag #1980005: > Die Frage war eigentlich warum es mit Slight Optimierung funktioniert > und mit Size nicht, obwohl beide brauchbaren gut optimierten Code > liefern. Ca 30% weniger. Dazu müßte man erstmal wissen, was Du mit "Slight Optimization" meinst. Im GCC-Manual
-
Thread
Return Anweisung mit Rückgabe vom Zustand des Ports
mit dem umgebenden Code optimieren, also noch ein bisschen Zeitgewinn. Auf Kosten der Codegröße. Der gcc entscheidet das bei entsprechenden Optionen sogar selbst. (Andere Optimierungen wie const-Funktionen könnten u.U. noch besser sein. [const passt nicht zu unserem konkreten Beispiel.] Deshalb sollte
> umgebenden Code optimieren, also noch ein bisschen Zeitgewinn. Auf > Kosten der Codegröße. Der gcc entscheidet das bei entsprechenden > Optionen sogar selbst. > > (Andere Optimierungen wie const-Funktionen könnten u.U. noch besser > sein. [const passt nicht zu unserem konkreten Beispiel.] Deshalb
-
Thread
Parameterübergabe bei Funktionen: by reference
Hallo, warum kann ich bei Verwendung des gcc-avr die Parameter nicht als Referenz übergeben? void AddOne(int& y); void AddOne(int& y) { y++; } --> main.c:27: error: expected ';', ',' or ')' before '&' token
etwas eindeutiger. Das ist das eine. Zum anderen ermöglichen Referenzen dem Compiler ein paar Optimierungen und für Operator Overloading sind sie sowieso notwendig. Die übliche Empfehlung in C++ ist: Verwende lieber Referenzen anstelle von Pointern. Pointer in einer Argumentliste nur dann, wenn es die
-
Thread
AVR + 47HC164 Code-Optimierung
Originalversion 24-27 Takte (datenabhängig) pro Iteration, die modifizierte Version 23 Takte (gcc 4.3.4). Nicht wirklich der Brüller. Ergibt zusammengerechnet also an die 200 Takte. Mit -O3 sind es jedoch für alle 8 Iterationen insgesamt nur knapp 90 Takte.
"r" (dC), "r" (dD), "r" (dE), "r" (dF) ); } [/c] Damit ist die Optimierung nun offiziell abgeschlossen ;-)