-
Thread
Interrupt / SREG / Priorität
Johanns Arbeit (ich glaube, es war ab GCC 4.9) die Optimierungen für AVR deutlich besser geworden.
allem durch Johanns Arbeit (ich glaube, es war ab GCC > 4.9) die Optimierungen für AVR deutlich besser geworden. Johanns Arbeit ist unbestritten wertvoll, und ich weine dem 3er gcc auch nicht nach. Den Codegrößenvergleich müsste man aber doch mal richtig
-
Thread
Virtual Function Elimination ARM GCC
> dieser Option, da sie wohl Bugs haben soll (oder mal gehabt hatte in > früheren Versionen von GCC). Wenn ich den Inhalt von derivedClass.cpp in main.cpp kopiere, klappt es. Dann gibt es derivedClass gar nicht mehr im Binary. Vollte Optimierung bekommt man leider erst mit Amalgation. Soll der
blöd zum googlen bin :/ Biste halt. Sonst hättest du den passenden Kommentar zu der Frage auf gcc.org gefunden. Ich zitier mal für dich: >> So what can I do? > Nothing (well, improve GCC!). In diesem Sinne… Oliver
-
Thread
struct list_head Funktionalität auf Cortex-M4 nutzen
play-with-kernel-list_head-three-examples-of-super-cattle.html Absatz: Example 1 Das offsetof() habe ich im arm-gcc compiler.h
awesome-c#data-structures Adam P. schrieb im Beitrag #6897700: > Das offsetof() habe ich im arm-gcc compiler.h offsetof ist ein Standard-Makro und in <stddef.h> definiert, wozu braucht es da noch arm-gcc-compiler.h ? Adam P. schrieb im Beitrag #6897662: > Niklas Gürtler schrieb: > >> Oder
-
Thread
STM32F303: Empfehlenswerte Compilerargumente
durchgesetzt hat. Die m-Optionen sind ja selbsterklärend - die erstere berücksichtigt bei den Optimierungen, daß verteilte Datenzugriffe aufs Flash langsamer sein können.
https://stackoverflow.com/questions/4274804/query-on-ffunction-section-fdata-sections-options-of-gcc
-
Thread
structs in char*
speicher einige anders zu sein. Auf einem Attiny417? Welcher Compiler, welche Version, welche Optimierung? Oliver
>>Auf einem Attiny417? Welcher Compiler, welche Version, welche >>Optimierung? zunächste Probiere ich mit microchip studio. Später (in serien Produktion) wolte ich avr-gcc + avr dude nehmen.
-
Thread
extern const
per >> extern darauf zugreifen. > Gut das mein Compiler das nicht weiß! > Denn der tut das > avr-gcc-11.1.0-x64-windows -std=gnu++17 Dann ist er wohl irgendwie kaputt. Bei meinem kommt jedenfalls wie zu erwarten eine "undefined reference to `var'".
Es wird maximal einmal angelegt. Wie schon mehrfach angedeutet wurde, wird (bei eingeschalteter Optimierung) der Compiler die letztendlich gar nicht anlegen, sondern überall direkt den Wert einsetzen. Oliver
-
Thread
AT90USB162 Endpoint Interrupts funktionieren nicht
Nur mal so: Compiler-Optimierung hast du eingeschaltet, ja?
#6879140: > Interesant, mit "optimize most (-O3)" geht es wieder. Muss eigentlich mit jeglicher Optimierung zum Laufen zu bekommen sein, nur -O0 (Optimierung ausgeschaltet) ist fragwürdig. Ich denke, du hast da noch irgendeine andere Sache drin. Marvin K. schrieb im Beitrag #6879135: > Ich habe
-
Thread
Sende/Empfangsvorgang mittels nur 1St. µC
abfragen, neudeutsch pollen. Nutze KEINE selbstgestrickten Warteschleifen, die fliegen bei der Optimierung durch den Compiler raus! Es gibt auch beim MASP430 schon vorbereitete Funktionen mit delay irgendwas, die sicher funktionieren. Nutze lokale Variablen und nur sparsam globale Variablen. Erst
schrieb im Beitrag #6874596: > Nutze KEINE selbstgestrickten Warteschleifen, die fliegen bei der > Optimierung durch den Compiler raus! Naja, poltere du mal nicht gar so laut. Was du da schreibst, sieht für mich aus wie nur auf den GCC bezogen. Andere Compiler fahren dem Programmierer nicht so rüde über's
-
Thread
Gibt es CPU Architekturen in dem ein signed int nicht überlaufen kann?
sehr effektiv bei Overflow eine Exception erzeugen. Standard-C ist eben etwas anderes, obwohl dem GCC die Idee nicht ganz fremd zu sein scheint: https://codeforces.com/blog/entry/73183
einfach ist, überhaupt ein konsistentes Verhalten zu > implementieren. Insbesondere auch bei Optimierungen. Wenn sich der Compiler auf ein bestimmtes Verhalten festlegen muss, dann muss dieses auch unabhängig von jeglicher Optimierung immer gleich sein. Das kann das Potenzial für Optimierungen deutlich
-
Thread
Beim Byte die Bits am schnellsten umsetzen.
Anwender benutzt, beschränke ich mich im wohlverstandenen Eigeninteresse auf die Auswahl und die Optimierung von Algorithmen, die mit üblichen Architekturen möglichst gut harmonieren. Alles, was darüber ist, ist vom Übel. > ist man nicht gezwungen alles in Assembler-Mnemonics zu > schreiben
Für den AVR: https://gcc.gnu.org/onlinedocs/gcc/AVR-Built-in-Functions.html __builtin_avr_insert_bits (0x01234567, bits, val) wird zu [code] bst r0,1 bld r18,7 bst r0,2 bld r18,6
-
Thread
C arithmetic promotion Fallstricke
eine Variable herunterzählt bis sie 0 ist. Vorteil: sehr simpel, Nachteil: ungenau und speziell beim GCC offenbar verhaßt und automatisch eliminiert, wenn man nix dagegen tut - jedenfalls nach diversen Beiträgen von GCC-Benutzern. 2. ein dediziert dazu benutzter Timer. Vorteil: recht genau, Nachteil:
Variable > herunterzählt bis sie 0 ist. Vorteil: sehr simpel, Nachteil: ungenau und > speziell beim GCC offenbar verhaßt und automatisch eliminiert, wenn man > nix dagegen tut - jedenfalls nach diversen Beiträgen von GCC-Benutzern. Die ist nicht "verhaßt", sondern fällt halt dem Optimizer zum Opfer
-
Thread
Array - Summe berechnen in C
In function 'main': ..\main.c:17:16: warning: 'iFeld' is used uninitialized [-Wuninitialized] gcc 11 Oliver
Optimierung ein Großteil seiner STM32-Library gar nicht mehr läuft, weil Uwe das Schlüsselwort "volatile" nicht kennt bzw. ungenügend einsetzt. So funktionieren dann interrupt-basierende Module seines Codes
-
Thread
wert mappen, wie casten?
Der Kenner heißt gcc. Mit gewünschter Optimierung kompilieren, und Code anschauen. Mein Prognose, was am schnellsten ist, will ich noch nicht verraten ...
Klaus W. schrieb im Beitrag #6861798: > Der Kenner heißt gcc. > Mit gewünschter Optimierung kompilieren, und Code anschauen. > > Mein Prognose, was am schnellsten ist, will ich noch nicht verraten ... So ist es! Optimiert wird ganz am Schluss - notfalls
-
Thread
Kolibri OS, vergrößerung der Community. Programmierung mit C
auf 6 Disketten a 1,44MB. Die VGA-Grafik brauchte wohl nur eine Diskette - aber da war noch was mit gcc/gdb, das brauchte 4 Disketten. https://en.wikipedia.org/wiki/MuLinux
tatsächlich lausig bis garnicht dokumentiert ist, ist das Verhalten der Compiler bezüglich der Optimierung...
-
Thread
Attribute used im gcc
--includedir=/usr/lib/gcc/riscv32-unknown-elf/8.5.0/include --datadir=/usr/share/gcc-data/riscv32-unknown-elf/8.5.0 --mandir=/usr/share/gcc-data/riscv32-unknown-elf/8.5.0/man --infodir=/usr/share/gcc-data/riscv32-unknown-elf
without-isl --disable-libsanitizer --disable-default-pie --enable-default-ssp Thread-Modell: single gcc-Version 8.5.0 (Gentoo 8.5.0-r1 p2) COMPILER_PATH=/usr/libexec/gcc/riscv32-unknown-elf/8.5.0/:/usr/libexec/gcc/riscv32-unknown-elf/8.5.0/:/usr/libexec/gcc/riscv32-unknown-elf/:/usr/lib/gcc/riscv32-
-
Thread
Arbeiten mit Registern(STM32F103) Gesperrt
stackoverflow.com/questions/4067811/how-to-place-a-variable-at-a-given-absolute-address-in-memory-with-gcc
> heute sehr begrenzt. Das stimmt gar sehr. Ebenfalls war damals das mögliche Potential zur Optimierung durch den Compiler weitaus geringer als heute. Aber: Das hat mit einem nur wenig durchdachten Sprachentwurf nichts zu tun. Wirth hat es ja mit seinem Ur-Pascal vorgemacht: Das war weitaus logischer
-
Thread
Wechselrichter Hoymiles HM-xxxx 2,4 GhZ Nordic Protokoll?
dtu ~/ahoy/tools/rpi (git)-[pypackage] # python3 Python 3.9.2 (default, Mar 12 2021, 04:06:34) [GCC 10.2.1 20210110] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import hoymiles >>> response = bytes.fromhex("00 01 01 3b 00 03 00 0b 01 3c 00 04 00 0d 00 00
python3-dev libboost-python-dev python3-pip python3-rpi.gpio sudo ln -s $(ls /usr/lib/$(ls /usr/lib/gcc | tail -1)/libboost_python3*.so | tail -1) /usr/lib/$(ls /usr/lib/gcc | tail -1)/libboost_python3.so git clone https://github.com/nRF24/RF24.git export RF24_DRIVER=SPIDEV cd RF24 rm Makefile.inc
-
Thread
Der Weg zur kleinen Halbleiterbude
zusammenarbeitest. Dort kann man dir zeigen wie man einen Standardcontroller als IP-Core eindesignt und mit Gcc eine Toolchain zusammenbastelt. Erfahrung im Prototypenbau und leider auch das Wissen wie man einen Lötkolben richtig anfasst gehört auch dazu. Ist dir zu schwierig? Schau selbst Mädchen aus den
hat ne Firma die bei Infineon und Co die logs aus den Fertzigungsmaschinen ausliest und damit Optimierungen (Durchlaufzeit, yield) an den Prozessparametern ableitet d) Freiberufler, entwickelt bspw. für einen Zulieferer der Halbleiterer (Tester für Speicher) FPGA und PCB-Designs. Das sind alles
-
Thread
Zeiger auf Argumente und lokale Variablen
fsanitize=address und, und, > und), aber eine Warnung gibt es trotzdem nicht. Auch -O3? Einige Optimierungen erfordern eine deutlich erweiterte Code-Analyse, die auch dazu führt, dass der Compiler mehr Probleme dieser Art erkennen kann.
kompiliert. Seit mehr als 40 Jahren ist für die > Warnungen LINT zuständig. In den letzten Jahren hat gcc allerdings viele Warnungen eingeführt, die eher zu einem lint-Tool passen.
-
Thread
Einfacher Fehler in C-Berechnung
' > oder kalten Kaffee bezeichnet. Manche Optimierungen sind durchaus nicht trivial. Aber was ich damit nur ausdrücken wollte, ist, dass da deutlich mehr gemacht wird als man gemeinhin erwartet. > Das Problem bei den Optimierungen ist, das man sich
Optimierung das Gegenteil von dem, was man möchte. Das Abschalten der Optimierung - unterdrückt oft Warnungen, weil der Compiler Probleme erst bei höheren Optimierungsstufen erkennt. - verschleiert
-
Thread
Bitfeld zuweisen: Warum optimiert der Compiler nicht?
Kannst ja beim GCC Bugtracker ein "missed optimization opportunity" Bug einstellen. Hab ich vor 10 Jahren mal für eine Byte Permutation für x86 gemacht. Hat keine Woche gedauert, dann war das im GCC drin.
gleichen zwei Adressen. Da hätte ich eher erwartet, dass da ein Penalty-Faktor draufliegt, der eine Optimierung erst anstößt.
-
Thread
Lambda in C++
Zum Thema Lambdas würde ich mal etwas mehr ausholen: In C (nicht C++) erlaubt gcc verschachtelte Funktionen. Eine verschachtelte Funktion ist nichts weiter als eine normale Top-Level-Funktion mit verstecktem Bezeichner und Zugriff auf die lokalen Variablen der umgebenden Funktion. Dazu übergibt gcc einen (unsichtbaren) Zeiger auf den Stackframe, kann aber auch entsprechende Optimierungen vornehmen. Genauso tut es Turbo Pascal und ähnliche Programmiersprachen mit verschachtelten Funktionen. Sogar
-
Artikel
Plattformunabhängige Programmierung in C
ein C99-kompatibler Compiler eingesetzt wird, da die meisten verbreiteten Compiler (allen voran der GCC) zumindest die wichtigsten Features unterstützen, unter anderem die in diesem Artikel zentralen C99-Integer-Datentypen. Plattform. Neben dem C-Standard spielt insbesondere die Plattform, für die der
bietet auch nicht jeder Compiler überhaupt Unterstützung für Double-Precision-Berechnungen. Der avr-gcc erfüllt beispielsweise nicht den C-Standard, da er nur mit Single-Precision (32 Bit) rechnet. Die Typen float und double sind auf dieser Plattform entsprechend identisch. Sofern Code auf Plattformen
-
Thread
Unbenutzte Funktionen beim kompilieren
Hallo Ich benutzte avr-g++ und avr-gcc zum Kompilieren und avrdude um Programme auf einen atmega328p zu übertragen (auf einem Arduino Uno, aber ohne Arduino-IDE). 1. Ich laß, dass beim Kompilieren alle Funktionen die in einer Headerdatei
Variablen sowie globale Variablen bereits entfernt. Das geht manchmal auch zu weit! Drum kennt GCC das __attribute__((used))
-
Thread
Hilfe nötig für vereinfachung einer c Funktion
Ich wäre dankbar wenn jdm erfahrenes einfach Tipps geben kann oder eine Optimierung meiner Lösung durchführt? Programm soll Macher auf einem esp laufen
Beitrag #6797532: > Ich wäre dankbar wenn jdm erfahrenes einfach Tipps geben kann oder eine > Optimierung meiner Lösung durchführt? Immer noch? Tipp und Optimierung hab ich doch schon gegeben! Aber gut, etwa so: [code] #include <stdio.h> #include <string.h> void convert (char* from, char*
-
Thread
GCC 11.2.0, unterschiedliche Optimierung size_t/uint32_t
(Optimierung) identisch (Pointer sind aber natürlich nicht kompatibel).
#6795563: > Folgendes schlägt allerdings fehl > static_assert(std::same_as<uint32_t, size_t>); arm-gcc 11.2 kennt godbolt noch nicht, aber mit arm-gcc 11.1 im 32-Bit Mode hält das static_assert, im 64-Bit Mode nicht. Was allerdings so zu erwarten war. Oliver
-
Thread
Warum springt er nicht in die while-schleife?
gelesen ODER er hat keine bekommen, weshalb er hier nachfragt. Oder er hat sie nicht eingeschaltet. gcc warnt bei sowas: [c] int main() { int i = 0; while (i < 100); { i++; } } [/c] [code] Ausgabe von gcc bei aktivierten Warnungen: kaputtelooop.c: In function ‘main
Typisch C/C++: Jeden Mist muss man extra einschalten, egal ob Warnungen oder Optimierungen, und ganz fies, viele Warnungen werden ohne eingeschaltete Optimierungen nicht gefunden. C/C++ ist einfach nur Steinzeit. Viele andere Systeme machen es vor, wie man brauchbare Compiler baut
-
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
ARM-GCC: No strict alias
Michael schrieb im Beitrag #6764055: > Gerade wenn es um Optimierungen usw. geht, sollte der vorhandene Code, > wie Linux usw., als Grundlage herhalten und sicherstellen, dass dieser > damit funktioniert. STOP! Diese Diskussion ("Hat sich der GCC an den Linix-Kernel
die Reputation der Sprache. (*) [c] Source File mit ca. 170000 Zeilen nach Präprozessor, Optimierung -O1: WinDDK cl 110 ms VS 2019 cl 160 ms clang-cl v11 250 ms Mingw gcc v10 280 ms [/c]
-
Thread
ARM-GCC versteht den Witz nicht.
Walter T. schrieb im Beitrag #6748674: > ARM-GCC 5.4.1 -O3: a ist false > ARM-GCC 5.4.1 -Os: a ist true Mein gcc ist meistens auch humorlos. Mit -Wall kommentiert er es als das, was es ist: a.c:8:33: warning: comparison with string literal
z.B. nethack spielen ;-) https://feross.org/gcc-ownage/
-
Thread
Wie macht man solche Lichtmodes? Lauflicht, PWM und Co
ja, was erwartet du? Alle fangen mal an. Wenn es erstmal läuft, kann er sich an Verbesserungen/Optimierung machen.
- "efficiency" d.h. praktisch 0,x Overhead - little-known gcc feature d.h. wenig bekannt bei ANSI-C aus der Industrie (Profi) ==> durch Larry Ruane werden Projekte wie "basic meets protothreads" realisierbar. > Oder die nette freundlichkeit besitzen... .
-
Thread
welche Datentypen soll ich nehmen?
ja, aber wenn ich nach dieser Tabelle gehe https://de.wikibooks.org/wiki/C-Programmierung_mit_AVR-GCC/_Datentypen, dann ist char mit uint8_t ersetzt worden. Das beides das selbe ist, ist mir bewusst. Aber es ist mir trotzdem schon öfters aufgefallen, dass für variablen uint8_t, uint16_t usw. genommen
funktionierender Code plötzlich kaputt, weil der neue Compiler eine zulässige, standardkonforme Optimierung macht.
-
Thread
CRC oder einfach die Daten doppelt schicken?
Damit kannst Du C code für Deinen gewünschten Algorithmus erzeugen. Du kannst auch die bevorzugte Optimierung angeben (Tabelle oder kleine Code grösse).
8051 hatte doch den SWAP-Befehl, gibt's den nicht beim modernen > AVR? Gibt es, und wird von GCC bei 16-Bit Shifts auch genutzt, wenn man ihn nicht per -Os daran hindert. Bei 32-Bit aber nicht. Ist trotzdem recht umständlich, denn eigentlich bräuchte man eine Art 12-Bit Swap dafür, statt eines
-
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
PINx-Register
Weitere Basics findest du hier: [[Kategorie:Avr-gcc_Tutorial]]
optimiert, um ihn derart austricksen zu können. Geringste Änderungen des Codes oder der gewählten Optimierung können dafür sorgen, dass es doch wieder nicht funktioniert. Die korrekt Lösung wäre das Einfügen einer Wartezeit von genau einem Takt zwischen den beiden Zeilen und dem weiteren Code. Also
-
Thread
frage zu defines TRUE/FALSE
des C > Compiles (und der Bibliothek) schon wissen, was sie tun. Und zusätzlich auch noch bei GCC -Wall verwenden. Das quittiert bool x; ... x == 5 ... mit einer Warnung.
einen Engpass sehe. Dabei ist es egal ob bool, int, float, double… Erst der Algorithmus, dann die Optimierung.
-
Thread
Effizienz memcpy
Programmierer schrieb im Beitrag #6714883: > Die meisten memcpy-Versionen (z.B. die in der vom ARM-GCC > verwendeten newlib) benutzen sehr clevere Optimierungen, teilweise auch > in Assembler implementiert, welche sehr wohl 32bit oder mehr auf einmal > kopieren, natürlich unter Beachtung des Alignments
Version von memcpy ist die dein Programm > nutzt? Die meisten memcpy-Versionen (z.B. die in der vom ARM-GCC > verwendeten newlib) benutzen sehr clevere Optimierungen, Newlib ist optimiert, newlib-nano aber benutzt die o.g. Variante mit einzelnen Bytes weil die kleineren Code erzeugt. Da kann man ergo
-
Thread
C: Zuweisung von 2 Variablen auf einmal
nur einmal vorhanden sein wird, wenn du das in zwei Zeilen aufteilst (ausgenommen, wenn man die Optimierung ganz deaktiviert).
Gerald K. schrieb im Beitrag #6694742: > Der Aufruf war in beiden Fällen: gcc -S test.c dann füg mal noch ein -O ein
-
Thread
Linker entfernt Symbole?!
/freertos/portable/GCC/ARM_CM4F/port.c.o .text.vPortEndScheduler 0x0000000000000000 0x38 src/freertos/portable/GCC/ARM_CM4F/port.c.o .debug_macro 0x0000000000000000 0xa78 src/freertos/portable/GCC/ARM_CM4F/port.c.o .debug_macro 0x0000000000000000 0x174 src/freertos/portable/GCC/ARM_CM4F/port.c.o ... [/pre] und in der Tat, wenn ich den Code debugge und an diese Stelle gerate, sieht
-
Thread
GigaDevice RISC-V: erste Schritte ohne IAR
wären die GDV-R bisher nur mit IAR programmierbar > gewesen. Das ging afaik aber schon vorher mit gcc. Es macht ja auch > wenig Sinn einen Open Source Core einzubauen um dann einen speziellen > Compiler zu benötigen. Insofern ist der Titel schon verwirrend. Exakt das.
Ich wär Euch sehr verbunden, wenn die Quelltexte *und* die entstehenden binary's bei voller Optimierung hier im Board gepostet werden könnten. :-O Zum Lernen. :-P mfg
-
Thread
Buchempfehlung C++ und MCUs
treiben muss und die Codegröße nicht weiter ansteigt? Wohlgemerkt mit normalen Mitteln was die avr-gcc Toolchain bietet.
nicht genutzt werden, musst du auch mal erklären. Abgesehen davon, daß der Compiler die bei der Optimierung einfach rauswirft. Das einzige, was bei virtuellen Funktionen in Zusammenhang mit Arduino-AVR wirklich stört, ist die unschöne Platzierung der vtables im SRAm durch den avr-gcc. Irgend etwas
-
Thread
volatile Funktionspointer in ISR
.type fptr, @object .size fptr, 2 fptr: .zero 2 .ident "GCC: (GNU) 10.2.0" .global __do_clear_bss [/avrasm] (Dass Funktionszeiger in ISRs auf dem AVR keine sonderlich gute Idee sind, weil sie eine push/pop-Orgie nach sich ziehen, steht auf einem anderen
nicht nur um Funktionszeiger, sondern auch um normale Funktionsaufrufe in einer ISR. Die sind beim avr gcc relativ "teuer" in bezug auf die push/pop Liste der Register. https://www.mikrocontroller.net/topic/518003#new
-
Artikel
LAUNCHXL-F28379D
erinnert an Assemblerprogrammierung. Auch das Ersetzen von switch durch if -Ketten für bessere Optimierung ist Schnee von gestern, vor allem für diesen schnellen Prozessor. Unicode-Zeichenketten ( L"Beispiel" ) nehmen genauso viel Platz ein wie ASCII-Zeichenketten ( "Beispiel" ). Wide-Char ( wchar_t
noch sollte man es mit Vererbungshierarchien und Abhängigkeiten übertreiben. Linkerskript. Wie auch gcc (bekannt aus WinAVR, Arduino, MSP430) verwendet der Linker (Compiler+Linker-Pfad: c:/ti/ccs1010/ccs/tools/compiler/ti-cgt-c2000_20.2.1.LTS/bin/cl2000.exe) ein Linkerskript. Es hat hierbei die Endung
-
Thread
Atmega ISR Prolog dauert zu lange - verschieben möglich?
verwenden/ohne Sicherung ändern darf ("call clobbered"), einmal für die ISR sichern muss. https://gcc.gnu.org/wiki/avr-gcc#Register_Layout https://gcc.gnu.org/wiki/avr-gcc#Calling_Convention Variante 3: Du machst eine naked ISR in der du via inline Assembler zunächst nur die Mindestanzahl Register
welche Register er pushen muss Das könnte den Prolog verkürzen. Allerdings würde ich LTO frühestens ab gcc 4.7.2 einsetzen. Wichtig dabei: Auch der Linker muss dann mit derselben Optimierung -O... wie der Compiler aufgerufen werden. Bei späteren gcc-Versionen kann man sich das dann wieder sparen.
-
Thread
c++ Code langsam
foobar2_gcc_O3_march=native ./foobar3_gcc_O3_march=native ./hans_gcc_std=c++17_O3_march=native ./heinzel_gcc_std=c++17_O3_march=native ./heinzel2_gcc_std=c++17_O3_march=native ./native_gcc_O3_ma rch=native 'python
Die Zehn Zeilen strtok goodness bieten noch etwas Raum fuer optimierung... ;-)
-
Thread
AVR128, CCP und Optimierung
werden. Das dich das überrascht zeigt, daß du anscheinend das allerstemal mit einem AVR und dem gcc dazu zu tun hast. Diese 4-Zyklen-Absicherung gibts bei allen AVRs für verschiedene Einstellungen, und das hat der gcc noch nie ohne Optimierung geschafft. Über das wieso, weshalb, warum zu sinnieren
> > Das dich das überrascht zeigt, daß du anscheinend das allerstemal mit > einem AVR und dem gcc dazu zu tun hast. Beileibe nicht. > Diese 4-Zyklen-Absicherung gibts bei allen AVRs für verschiedene > Einstellungen, und das hat der gcc noch nie ohne Optimierung geschafft. Nicht übertreiben
-
Thread
Bascom - C Umstieg Teil 1 - IDE-Probleme
optimizations disabled; functions from <util/delay.h> won't work as > designed" [-Wcpp] Und die Optimierung einschalten.
die beiden anderen Fehler bestehen: [code] -------------- Build: Debug in test3 (compiler: GNU GCC Compiler for AVR)--------------- avr-gcc -Wall -mmcu=atxmega128a1u -DF_CPU=2000000UL -g -Os -I/usr/include -c main.c -o obj/Debug/main.o avr-gcc -L/usr/lib -o bin/Debug/test3.elf obj/Debug/fuse.o
-
Thread
Was heisst das bitte : --max-allocs-per-node 100000
--max-allocs-per-node 100000: Gibt an, wie viele Teilergebnisse in Berechnungen in manchen Optimierungen berücksichtigt werden sollen. Größere Werte führen üblicherweise zu besserem (schnellerem, kleinerem) Code, aber SDCC braucht mehr Zeit und Speicher während des Kompilierens. 3 Optimierungen sind
Erfahrungswerte interessieren, um wieviel schneller ein (Alltags-) C-Code durch gute Registerwahl/-optimierung wird. Mich wundert etwas, das der Akku A mit bei der Optimierung betrachtet wird, weil dessen Verwendung bei den Arithmetikbefehlen 'unausweichlich' ist. > statt die > Register af, bs, de
-
Thread
Eine Frage bzg. Macro in AVR-Assembler
Maxim B. schrieb im Beitrag #6664313: > int32_t https://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Ganzzahlige_Datentypen_.28Integer.29
deutlich schlechter werden wird, als hätte man ihn gleich in Schulbuch-C hingeschrieben und (mit Optimierung) kompiliert. Unter solchen Voraussetzungen ergibt der Einsatz von Asm eher keinen Sinn. Die Sache ist: ein Assembler produziert exakt den Code, den die Fähigkeiten seines Programmierers erlauben
-
Thread
gcc komischer fehler: sbrk() Gesperrt
wie gewohnt. void* _sbrk() { return 0; } Was bewirkt diese funktion und weshalb benötigt der gcc diese unbedingt?
stattdessen: [c] puts("Foo!"); [/c] (Man beachte das weggelassene '\n'.) Solche Optimierungen können natürlich durchaus wünschenswert sein, bspw. bringt: [c] i = strlen("Foo!"); [/c] dann die Konstante 4, die der Compiler direkt so benutzen kann. Wenn man all diese Optimierungen