-
Thread
Programmoptimierung
bitte nächstes mal einen etwas besseren Threadtitel! Was hat das ganze den Bitte mit Programm"optimierung" zu tun?
drin bin. Karl heinz Buchegger schrieb im Beitrag #1732937: > Für solche Sachen sollte das AVR-GCC-Tutorial deine erste Anlaufstelle > sein Das erwähnte "irgendwo" schliesst das AVR-GCC-Tutorial mit ein. Dort habe ich schon viele Lösungen für Probleme gefunden. Karl heinz Buchegger schrieb
-
Thread
Probleme mit dem richtigen setzten des sei() makros bei externem Interrupt ATmega16
optimiert es der Compiler wieder > raus. Nein, das darf er nicht, weil das eine Endlosschleife ist. Gcc macht das auch richtig offensichtlich wenn die Optimierungen an sind: [code] $ cat main.c #include <inttypes.h> int main(void) { for (uint8_t x = 0; x < 1000; x++) {}
es der Compiler wieder >> raus. > > Nein, das darf er nicht, weil das eine Endlosschleife ist. Gcc macht das > auch richtig offensichtlich wenn die Optimierungen an sind: Was für einen Unsinn erzählst du uns hier jetzt? Aber immerhin lieferst du den Nachweis, dass es wegoptimiert wird, gleich
-
Thread
PIC24 @ 80MHz und Timer1 zu langsam?
40MHz/55/2=363kHz. Kommt also in etwa hin. Der Assemblercode ist ziemlich ineffizient, sind die Optimierungen an?
edit: Hab die Option für Code-Optimierung gefunden. Ist schon auf Maximum.
-
Thread
AVR-GCC warum Code so groß?
in C. Nach dem Compilieren habe > ich aber bei FAST-AVR nur ca 56% RAM beschrieben während mir AVR-GCC > 161% sagt. Der GCC legt Konstanten als default in den SRAM. Man muß ihm erst speziell sagen, daß er sie in den Flash legen soll (Attribut progmem). Peter
Optimierung aktiviert? Zeit in delay ist keine Compilezeit-Konstante? Kristallkugel, um den Code zu sehen?
-
Thread
Division fehlerhaft
im Beitrag #3697934: > daß der Kompiler einfach Sachen nach Gutdünken > wegoptimiert Für die Optimierung gibt es ja Regeln und eine ist die "as if" Regel. Die *Funktion* des Codes muss nach der optimierung so sein *als ob* der Compiler nichts getan hätte. Das der Code nicht immer das macht was der
würde ich zum Testen des Programmes erzwingen > wollen, daß nichts optimiert wird Einfach die Optimierung ausschalten. Grüße
-
Thread
Zweierkomplement uint8_t richtig ausgeben
Bit-Wert z = (struct z){z}.z; // Vorzeichenerweiterung nach int [/c] Leider tut sich da der GCC etwas schwer bei der Optimierung.
> z = (struct z){z}.z; // Vorzeichenerweiterung nach int > [/c] > > Leider tut sich da der GCC etwas schwer bei der Optimierung. Das mit den 10 Bit laeuft. Ich will aber auch eine 8 Bit Variante. Hierbei liegen die Daten in einem uint8_t und das Vorzeichen ist auch an der 8. Stelle. Um dem
-
Thread
LCD C-Code so groß?
Optimierung nicht eingeschaltet oder floatingpoint verwendet?
auch? F_CPU ist in den Projekteinstellungen, falls du das meinst. Wie gesagt jetzt mit der Optimierung ist der Code nur noch 356Byte groß
-
Thread
[GELÖST]arm-elf-gdb springt bei Breakpoint in falschen Code
Optimierung war in der Tat eingeshaltet (-Os), aber auch mit -O0 ändert sich nichts.
mit dem Problem beschäftigt. Richtig lösen konnte ich es zwar nicht, nach einer Neuinstallation (gcc, newlib, binutils, gdb), jetzt mit arm-none-eabi anstatt arm-elf, hat alles wieder funktioniert. Da arm-elf als Target im neuesten gcc-Release sowieso nicht mehr verfügbar ist, empfiehlt sich ein Umstieg
-
Thread
[AVR] Sehr schnelle Interruptroutine mit 16Bit Counter
als 600 Takte gegen ca. 20. Mehr aus Interesse an dem Stück Inline-ASM allerdings. Ich denke, die GCC-Routine hätte es genauso getan. ;-) Gruß aus Berlin Michael
avr-gcc beizubringen! Damit die unnötigen Operationen im ISR-Prolog/-Epilog entfallen :-) Johann
-
Thread
FIFO Implementierung (Array vs Pointer)
aus einer Modulo-Operation mit 2^N schon selber eine einfache AND-Operation machen, die manuelle Optimierung ist dann überflüssig. Ähnlich ist es mit 256 Bytes, auch hier sollte man die Optimierung eher dem Compiler überlassen. Wobei Rechnungen mit "unsigned char" als "int", also mit Vorzeichen durchgeführt werden, und diese AND-Optimierung dann nicht so einfach ist. Es kann also sinnvoll sein, explizit nach "unsigned" zu casten: index = (unsigned)(index + 1) % BUFSIZE; Optimierung von Datentypen lässt sich recht ubersichtlich
-
Thread
Variable an Register binden - ich kanns nicht oder compilerbug :)
übrigens, GCC hab ich mir grad die neueste Version runter geladen. Optimierung ist -Os (tritt aber auch bei -O1 -O2 und -O3 auf)
. Jörg, kannst du das mit nem ungepatchten avr-gcc nachvollziehen? Die Insn wird in Pass 141r.cse1 von avr-gcc 4.3.2 als tot erkannt und gelöscht. Johann
-
Thread
PowerLED PWM mit RC5 Fernbedienung
external in RC5.h wird nicht richtig interpretiert. Macht aber auch nix, der AVR ist auch ohne Optimierung nicht voll.
abschalten, um ein RC5 Signal >zu erhalten. Da fehlt ein volatile bei rc5_data. Mit (ganz) früheren gcc-Versionen funktionierte das auch so mit eingeschalteter Optimierung, die neueren optimieren gnadenlos alles weg. Oliver
-
Thread
Funktion aus Interrupt aufrufen
Hallo, ich versuche grade, mit GCC ein kleines Programm für ARM (LPC2378) zu compilieren. Das Programm verfügt über eine Interruptfunktion namens tick, die von einem Timer (Timer0) periodisch alle 1 ms aufgerufen wird. So, der Interrupt
Das habe ich schon gefunden. Das Problem wird aber nicht behoben, wenn die die Optimierung auf "none" umstelle. Dann läuft das Programm ebenfalls nicht. Was ich mich aber frage - wie dumm ist der GCC denn, dass er aus einem Interrupt heraus keine andere Funktion aufrufen kann? das
-
Thread
Stromverbrauch von Webdeployments
Schon etwas älter, aber nett zum Durchblättern, wenn man sich für HTTP(s)-Server-Optimierung interessiert: http://nabstreamingsummit.com/wp-content/uploads/2022/05/2022-Streaming-Summit-Netflix.pdf
Huebi H. schrieb im Beitrag #7566445: > Ruhig auch mal den ICC von Intel, anstatt des gcc ausprobieren. Das liegt auch an Patenten, die gcc nicht zur Optimierung verwenden kann, bzw. warten darf bis diese ausgelaufen sind.
-
Thread
Suffix für uint8_t
dem mit & vergleichen. Oder, wenn es so zeitkritisch ist, Assembler nehmen. Hast du die Optimierung an? Welche?
A. K. schrieb im Beitrag #4414555: > lässt GCC deshalb 2 Indizes parallel laufen, einer mit 32 fürs Zählen > und einer mit 64 Bits fürs Adressieren, weil i negativ sein kann: Das war Unsinn. Komplizierter als mit 64-Bit Variablen ist der Code
-
Thread
mal wieder Busy-Flag
übrigens nur /mit/ Optimierung korrekt funktionieren.
Dich aber nicht stört, daß Code 1000% größer ist und 1000% länger braucht, dann schalte ruhig die Optimierung aus, statt einfach das Datenblatt zu lesen und das richtige Timing zu implementieren. Der AVR-GCC macht es einem doch sehr leicht, korrekte Timings zu implementieren mit den Macros der Delay.h
-
Thread
Bit setzen in C Gesperrt
bei Baud vs. Bit/s, und jetzt das hier... bist du irgendwie auf dem Troll-Trip? Hans, ist die Optimierung eingeschaltet? Dass ein Compiler wie Keil eine so einfache Ersetzung nicht hinbekommt kann ich mir nicht vorstellen. Andere Compiler (z.B. AVR-GCC) schaffen das auch ohne dass man ihnen explizit
leistet. Und das hast du ganz alleine geschafft? Nicht schlecht. Ich deinstalliere sofort den GCC.
-
Thread
Linken usw in der Eingabeafforderung
8 MHz, platzsparende Optimierung): Compiling C: test.c avr-gcc -c -mmcu=atmega128 -I. -gdwarf-2 -DF_CPU=8000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=./test.lst -std=gnu99 -Wundef -MMD -MP -MF .dep/test.o.d test.c -o test.o Linking: test.elf avr-gcc -mmcu=atmega128 -I. -gdwarf-2 -DF_CPU=8000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=test.o -std=gnu99 -Wundef -MMD -MP -MF .dep
-
Thread
Datentypen / Übergabewerte Funktionen
Hallo, ich bin momentan dabei vom Keil 8051-C51 auf AVR-GCC (Atmel Studio 6) umzusteigen. Hierbei durfte ich feststellen, dass GCC einige Datentypen, die es in C51 von Keil gibt, nicht kennt. So schlagen in C51 einwandfreie Funktionsdefinitionen wie z.B.
z.B. > > "unsigned char i2c_get(bit ack)" > > gnadenlos fehl da Datentyp "bit" bei GCC unbekannt. Das /könnte/ damit zusammenhängen, daß gcc ein C-Compiler ist ;-) Tipp: "bit" ist kein Schlüsselwort in C. Oder erwartest du, daß GCC ungültigen Code akzeptiert? (Vorausgesetzt,
-
Thread
AVR TSIC Auswertung => riesen Programm
Darf ich noch ketzerisch ein "Optimierung aktiviert?" einwerfen?
-Os meinst, dann muss ich sagen die ist aktiviert... Gibt es sonst noch Möglichkeiten eine Optimierung zu Aktivieren?
-
Thread
M16C GCC Minimalbeispiel
dem M16C von Renesas an und möchte gerne so bald wie möglich von der HEW-Entwicklungsumgebung nach GCC unter Linux umsteigen. Deshalb habe ich mir schon Binutils/GCC/Newlib für das "m32c-elf"-Target gebaut. Ich verzweifele aber im Moment an einem minimalen Programm, dass ein paar LEDs zum Blinken bringen
Hi, >Deshalb habe ich mir schon Binutils/GCC/Newlib für das "m32c-elf"-Target >gebaut. würdest du deine Binutils/GCC/Newlib veroeffentlichen? Ganz ehrlich gesagt sagt mir die HEW-Entwicklungsumgebung auch nicht zu und wuerde gerne den GCC
-
Thread
MPLAB X Debugging mit Snap Debugger vs PicKit
github.com/cv007/XC3216 So etwas ähnliches kenne ich schon. Harald tat so, als ob es einen freien gcc für die PICs gäbe.
Harald K. schrieb im Beitrag #7925739: > Das wiederum ist ein Grund für viele, stattdessen den gcc zu verwenden, Das war mal der Fall, als es nur eine rudimentäre, bzw. wirklich "kastrierte" Optimierung gab. Is seit _gefühlt_ 10 Jahren nich mehr so.
-
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
Überlauf bei Multiplikation verhindern
. Walter ist mir bisher nicht als jemand aufgefallen, der exzessiv Zeit in unsinnige Mikro- Optimierung steckt. :) Andernfalls hast Du natürlich Recht.
Headroom" hat bis zum Überlauf. Weiters gibt es compilerspezifische Built-ins, siehe etwa http://gcc.gnu.org/onlinedocs/gcc/Integer-Overflow-Builtins.html Allerdings _verhindern_ die keinen Overflow (wie von dir gewünscht), sondern lassen ihn lediglich erkennen. Einen Overflow verhindern geht nur
-
Thread
Ansteuerung Schrittmotor mit ATmega8 macht Probleme
F_CPU eintragen, die gewünschte Zeit beim Aufruf angeben, sicher stellen, dass die Compiler-Optimierungen an sind und die Zeiten stimmen. Egal bei welcher Taktfrequenz. >>> [[AVR-GCC-Tutorial]] <<< [C] #define F_CPU 8000000UL #include <util/delay.h> #define STEP_DELAY 10 ....
MyAVR-Workpad Plus? Das ist kontraproduktiv. Wenn du richtig programmierst, brauchst du die Optimierung nicht abzuschalten. Du willst die Optimierung behalten! Also musst du richtig programmieren.
-
Thread
code Optimierung bei 32 bit Variablen
sagen können. Was für eine Platform? 8Bit, 32Bit? Schuss ins blaue: Der Compiler wird das mit Optimierungen schon gescheit machen.
hallo, avr-gcc ist der compiler und die plattform atmega 8 bit. @ Peter auf die idee bin ich noch nicht gekommen, das vorher klarzumachen und die schleife dann einfach laufen zu lassen... probier ich gleich
-
Thread
warning: internal error: out of range error
/winavr/bin/../lib/gcc/avr/4.3.2/../../../../avr/lib/avr6\libc.a(dtoa_prf.o): In function `dtoa_prf': (.text+0x6): warning: internal error: out of range error c:/programme/winavr/bin/../lib/gcc/avr/4.3.2/../../../../avr
Ich fürchte jetzt muss jemand ran, der gcc-avr für >128KB und die binutils von innen kennt.
-
Thread
Unterschied zwischen memcmp und strcmp – Wann was nehmen?
GCC, x86-64: [c] #include <string.h> extern unsigned char s1[], s2[]; int f(void) { return memcmp(s1, s2, 8); } int g(void) { return 0 == memcmp(s1, s2, 8); } [/c]
Das Wichtige oben waren die *gleichgroszen* Blöcke. Selbst ohne Optimierung, also byteweisem Vergleich, geht es u.U. schief, z.B.: [c] char buffer1[] = "Hallo"; char buffer2[] = "Hallo\0Welt"; strcmp(buffer1, buffer2) // ok, true memcmp(buffer1, buffer2,
-
Thread
Compiler für dsPic33FJ64
Rudolph R. schrieb im Beitrag #4138113: > Wenn der Unterschied so gross wäre wie dem GCC für AVR bei dem der Code > zwischen -O0 und -O3/-Os ganz erheblich anders ist, das würde mich schon > stören. Du bekommst in der freien Version -O1. Schön sieht das ganze in Assembler allerdings
. Vergleiche machen erst ab -O1 Sinn. Nebenbei: Wenn Du flink bist, kannst Du die volle Optimierung nutzen. 60 Tage Evaluierung der PRO Version ist möglich.
-
Thread
Atmel Studio erzeugt aus C Assembler Code? Gesperrt
so richtig? Das ist nicht nur bei Atmel Studio (Version 6 oder höher) so, sondern bei allem, was gcc verwendet, da der gcc das (wie die meisten C-Compiler) so macht. > Und wenn ja, wie oder wo kann ich mir in Atmel Studio das erzeugte > Assembler File ansehen? Wenn du dem Compiler die Option
Ende die Buchstaben so auf dem Papier stehen wie ich diese eingetippt habe. Und es mag sein, das GCC das non plus Ultra bei den C-Compilern ist. ...hmm...von mir aus..., aber es stellt sich für mich jetzt nur die Frage, wenn doch der GCC aus C-Code ein Assembler Code erzeugt, warum programmiert man
-
Thread
Seltsames AVR Studio / WinAVR Verhalten
Variablen zerhaut. avr-size ist dein erster Freund ;-) http://www.mikrocontroller.net/articles/AVR-GCC#Tipps_.26_Tricks
gleichen Argumenten auch immer das gleiche Ergebnis liefern wird. Deshalb kann der Compiler diese Optimierung machen.
-
Thread
verschachteltes Makro
. http://gcc.gnu.org/onlinedocs/gcc-4.0.4/gcc/Function-Attributes.html
zu halten. Eine modulinterne Funktion ("static"), die nur einmal gerufen wird, expandiert der GCC bei eingeschalteter Optimierung immer inline.
-
Thread
Debugger springt in's Nirvana
und b) Weil du das Tutorial nicht gelesen hast. http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Zugriff_auf_IO-Ports Oliver
Wie ja schon weiter oben erwähnt wurde, hast du vermutlich mit Optimierung kompiliert. Da passen dann Sourcecode und Assemblerprogramm nicht mehr 1:1 zusammen, mit eben solchen Effekten. Schalte mal in den Projektoptionen die Optimierung aus, dann klappts auch mit dem
-
Thread
"-=" Will nur einmal, aber nicht 3 mal.
Hallo, ja, hab ich, deshalb hab ich ja auch gefragt. AVR-gcc ist version 4.3.2 . Standart in Arduino 1.0.5
Hast du Optimierungen beim Übersetzen an, dann schalt sie doch testweise mal aus...
-
Thread
Atmel Debug - welche uCs können welche Schnittstelle?
Doppelt Flash ist etwas übertrieben aber beim AVR-GCC braust man 40-50% mehr Flash zum Debuggen. Warum? Debuggen kann man am besten wenn alle Optimierungen abgeschaltet sind. Das bedeutet aber auch 40% größeres Programm.
Maria wrote: > Warum? Debuggen kann man am besten wenn alle Optimierungen abgeschaltet > sind. Das bedeutet aber auch 40% größeres Programm. Naja, das ist Ansichtssache, es ist vlt. manchmal übersichtlicher ohne Optimierungen zu arbeiten. Aber generell macht es schon
-
Thread
Technik für zyklisches erhöhen eines Wertes: if versus modulo
veraltet sein. Das hat dann aber mit Hochsprachenprogrammierung nichts mehr zu tun. Solch Optimierungen kann der Compiler.
werden sporadisch auftretende Additionsfehler elegant unter den Teppich gekehrt ;-) Anmerkung: Optimierungen durch den Compiler müssen deaktiviert werden.
-
Thread
Probleme bei den ersten Schritten mit WinAvr
wie [pre] -Wall -W : aktiviert ein paar Warnungen -Os : Optimierungen -std=gnu99 : Erweiterungen wie Mischen von Code und Deklarationen [/pre] Wenn man die Arbeitsweise von GCC verstanden hat, ist's später auch einfacher, klomplexere Fehlermeldungen einzuordnen
Hast du ein Beispiel, wo man den Fehler nachvollziehen kann? Ist das ein Meldung von make, das avr-gcc nicht findet, oder eine Meldung von avr-gcc, der cc1 nicht findet? Ersteres ist kein Problem von GCC, und letzteres deutet auf eine kaputte Installation hin. Johann
-
Thread
_delay_ms geht nicht obwohl richtig verwendet
/lib/gcc/avr/4.5.3/../../../avr/include/util/delay.h:153:28: error: __builtin_avr_delay_cycles expects an integer constant. /usr/lib/gcc/avr/4.5.3/../../../avr/include/util/delay.h:153:28: error: __builtin_avr_delay_cycles
Built-ins, für die man jedoch keine(n) Header braucht und für die as Built-in Makros gibt: http://gcc.gnu.org/onlinedocs/gcc/AVR-Built_002din-Functions.html Und die anderen Built-ins sind dokumentiert in http://gcc.gnu.org/onlinedocs/gcc-4.6.1/gcc/Other-Builtins.html#Other-Builtins für __builtin_
-
Thread
40Bit Datentyp selber basteln
AVR IAR C/C++ Compiler??? Nein, auf keinen Fall. Meine Assemblerdatei läuft nur mit dem AVR-GCC. Sie benutzt dessen Registerzuweisung und Funktionsnamen. Peter
ist auf Codegröße optimiert, nicht auf Laufzeit. Die Laufzeit ist zwar auch schneller als die AVR-GCC Lib, aber der IAR wird bestimmt besser optimiert sein. Peter
-
Thread
Variable nicht initialisiert
Aus dem gcc-Manual: [c] #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wuninitialized" foo(b); /* no diagnostic for this one */ #pragma GCC diagnostic pop [/c] Geht
auch schon wieder viel programmspeicher beim initialisieren. Atmel Studio 6.2 (projekt fur AVR), GCC 4.8.1, optimierung ist abgeschaltet Lokal ohne Initialisierung: [c] #include <stdint.h> int main(void) { uint64_t a0; uint64_t a1; uint64_t a2; uint64_t a3; uint64_t a4; uint64
-
Thread
Deklaration von external memory
Datendefinition. Vergiss diese Erbsenzählerrei! https://www.mikrocontroller.net/articles/AVR-GCC-Codeoptimierung#Prinzipien_der_Optimierung > Ich würde gerne >mal eine Baustelle (hier Datendefinition) endgültig abschließen um mich >dann in Ruhe der nächsten zu widmen, ohne am Schluss des
Thomas P. (topla) > Vergiss diese Erbsenzählerrei! > > https://www.mikrocontroller.net/articles/AVR-GCC-Codeoptimierung#Prinzipien_der_Optimierung Ja, ist vielleicht ein Geburtsfehler bei mir. Ich mag auch vorzeigbares Innenleben, bei Geräten wie bei Software. > Ach was, du malst nur den Teufel
-
Thread
Komisches Verhalten des Optimierers
Zumindest korrekt... schon mal nicht unwichtig :o) > Ich arbeite mit Rowley Crossworks und die Optimierung ist auf Size > gestellt. Rowley basiert wohl auf GCC? Ich hatte ähnlichen Ärger mit neuen gcc 4.3.x für AVR: Schleifen wurden aufgerollt trotz -Os, -fno-unroll-loops et. al. blieben erfolglos
ist die Wahrscheinlichkeit größer, daß das Problem bald gefixt wird. Hier wäre dann http://gcc.gnu.org/ml/gcc-help die richtige Anlaufstelle. Das Anrollen der Schleife passiert wahrscheinlich im Target-unabhängigen Teil. Wo genau, siehst du mit Ausgaben per -fdump-tree-all. Falls der böse
-
Thread
Anfängerfrage QuickWatch oder Step by Step
wo findet man die Optimierung?
Michael B. schrieb im Beitrag #5241062: > wo findet man die Optimierung? Ich verwende nicht das Studio 7, aber auch dort müsste es unter 'Project' zu finden sein.
-
Thread
Ada oder MISRA-C, aktuell und in Zukunft
mit der > Compilerunterstützung aus? Gemischte Projekte sind kein Problem. Compilermäßig sind GCC und Clang/LLVM voll unterstützt. Standardmäßig nutzt Rust den LLD, also den LLVM-Linker, wobei der GCC-Linker ebenso unterstützt wird und ursprünglich für Cortex-M sogar der Standardlinker war. Wie
Strubi schrieb im Beitrag #5900480: > Müsste eine gcc 3.x gewesen sein. Also vor ewigen Zeiten... Strubi schrieb im Beitrag #5900480: > Ich hätte auch erwartet, dass der > Compiler erkennt, dass das mit genau einem Wrapper (index -> Pointer) >
-
Thread
-Os Optimierung: Programmcode wird nicht ausgeführt
Ich habe folgende Situation. Wenn ich das Atmega-Programm (C) nur mit einer anderen oder gar keinen GCC Optimierung compile, funktioniert alles wunderbar. Wird jedoch die Optimierung auf -Os geschaltet, spring das Programm nicht an die gewünschte Stelle. Das sieht ca so aus #define KURZ 0x00 #define
-
Thread
C++ für Mikrocontroller
vorhanden und getestet ist und der Vorteil durch C++ den Aufwand nicht wettmacht. Das ist z.B. bei gcc anders.
und zuletzt mit > avr-strip die Symbole entfernt. Wie bist Du zu Deinem Ergebnis gekommen? arm-gcc, nicht avr-gcc! Ist es nicht so, daß der avr-gcc gar keine Exceptions und keine RTTI unterstützt? arm-gcc hat diese beiden Dinge sicher mit dabei, weshalb das Abschalten dieser sich auch bemerkbar
-
Thread
Schnelle Arithmetik
> Wenn man es dem Compiler nicht sagt (das inlinen) wird er es nicht > machen. Der GCC schon. Wenn er meint, inlinen ist kürzer/schneller macht er das, auch ohne inline Keyword. Mit Keyword, zwingt man ihn dazu.
Eine weitere Optimierung waere die Sinutabelle auf 128 Phasen Werte zu reduzieren. Und die Sinustabelle auf eine Wertbreite von 256. Das waere dann ein Wert fuer alle 3 Grad, und eine Amplitudenaufloesung von 1%.
-
Thread
Zähler: erzeugte exe viel zu groß
dem GCC hineinbekommen kann? Wo kommt die riesige Codelänge her? Vielen Dank für Eure Beiträge.
Das Standard-Makefile vom gcc packt wohl tausend libs dazu. Schau mal, was man da entfernen kann. Markus
-
Thread
Probleme mit for-Schleifen
und ersetze sie durch eine primitive Leerschleife etwa int i; i=1; while (i++); Am besten Optimierung des Compilers abschalten, oder ein asm volatile ("nop"); in die Schleife, damit sie nicht wegoptimiert wird. Optimierung Abschalten ist eh mal zum Testen sinnvoll, wenn Problem auftreten.
alles nicht hilft, muss man sich mal das Assembler-Listing ansehen. (Wie man das erzeugt steht im AVR-GCC Tutorial.)
-
Thread
Lästern -> Ratespiel!!! Gesperrt
einzelstehend (also auch nach schliessender } oder z.B. i++;;;; ) eine leere Anweisung erzeugt, wenn Optimierung ausgeschaltet war. Nicht, dass das falsch ist, oder irgendjemand Compiler ohne Optimierung nutzt oder irgendetwas, dies nur zu den "leeren" Semikolons als Denkanstoss. ich "persönlich (!!!)" würde
Gerade mal nachgeschaut: dem GCC, um dem es hier ja geht, erzeugt auch ohne einegschaltete Optimierung KEINE leeren Anweisungen. Also ist mein Einwurf zumindest bei diesem Compiler hinfällig. Gruss, XtSI