-
Thread
Linkerscript verstehen lernen - Wo fängt man an?
Bussen sieht das schon anders aus. Da muss man das schon genau steuern was wohin soll. Und bei Keil/gcc/IAR sehen die komplett anders aus und auch die Nutzung der sections im Code hat eine unterschiedliche Syntax.
Bootloader schreibt, dann kommt man schon mit einem Linkerscript in Berührung. Toolchain ist die Arm-GCC für Cortex-M Controller. Um das Warum noch zu beantworten. Einfach so, weil es mich interessiert.
-
Thread
for(;;){} Schleife
implementation-defined." Genau, Du benutzt etwas, was nicht dazu gehört. Insofern muss sich der GCC gar nicht darum kümmern und kann deswegen auch gar keine (Frontend)-Optimierungen ausführen. >> Was hat das mit main() zu tun? > > Dass main() in einem freestanding environment einfach gar nicht
sollte man? wird man normalerweise?) > -ffreestanding angeben. Würde ich nicht machen. Im avr-gcc gibt es zum Beispiel Optimierungen, die NICHT für freestanding gemacht werden. Und das betrifft dann ziemlich jedes Programm, weil es um main geht (das bei freestanding keine Sonderrolle hat).
-
Thread
Wertzuweisung Arduino - Kann mir das jemand erklären?
will und keine dazu kompatiblen Erweiterungen, oder -std=gnu99 wenn man GNU-C99 will etc. https://gcc.gnu.org/onlinedocs/gcc-13.2.0/gcc/C-Dialect-Options.html https://gcc.gnu.org/onlinedocs/gcc-13.2.0/gcc/C_002b_002b-Dialect-Options.html Bei Verwendung von avr-g++ sollte man sich auch darüber klar
:-) https://gcc.gnu.org/onlinedocs/gcc-13.2.0/gcc/Code-Gen-Options.html#index-fwrapv
-
Thread
Nicht Kompilieren bei einem bestimmten Wert in einem const array
aufgerufen werden. * Geht nur, wenn der Compiler nicht genutzte Funktionen löschen darf. Beispiel ``gcc -O1``. Ohne Optimierung wird der Fehler immer immer geworfen. */ #define STATIC_ASSERT_ON_LINKTIME(cond, msg) do { \ extern void assert_by_nonexisting_function__##msg(); \
warum nur bist 1000? Also, es bleibt leider Mist. - Abhängig von der Optimierung - Abhängig vom pragma - Abhängig von der Array-Größe > [c] > #pragma GCC unroll 1000 > for(size_t i=0; i<ARRAY_COUNT(test); i++) { > STATIC_ASSERT_ON_LINKTIME(test[i][1] < 5,
-
Thread
STM32 startet im HardFault
aber ich hatte mal Probleme mit meinem in C geschrieben Startupcode für den STM32F4. Sobald die Optimierung -O2 oder größer an war, ist der Startupcode gecrasht. Lag im Endeffekt daran, dass der Startupcode in C geschrieben war und mit float abi hard compiliert war. GCC hat dann die Kopierschleife, die
"ldr sp, =_estack /* set stack pointer */" übersprungen; nach Chiperase oder Änderung der Optimierung hält der Controller hier an. Weitere habe ich nicht getestet, kann das aber gerne noch machen falls es hilft.
-
Thread
Optimierung von Funktionen
ptr[y]) > { > valueExisting = true; > } > } Eine einfache Optimierung: Nach der Zuweisung ein break einfügen, damit die innere Schleife nicht immer komplett bis zum Ende weitersucht, obwohl der Wert schon gefunden wurde.
die Hardware kennt, kann sich an Compilerfeinheiten orientieren: https://dmalcolm.fedorapeople.org/gcc/2015-08-31/rst-experiment/how-to-use-inline-assembly-language-in-c-code.html
-
Thread
AVR-GCC pointer post-increment
Markus F. schrieb im Beitrag #7459576: > in der Phase ist er mit seinen eigenen > Optimierungen längst durch Das ist so nicht richtig. GCC asm statements werden in der Optimierung mitbedacht. Aber natürlich nur soweit es die Schnittstellendefinition, Constraints und Clobbers erlauben.
https://www.mikrocontroller.net/articles/AVR-GCC-Codeoptimierung#Prinzipien_der_Optimierung
-
Thread
Microchip Studio, XC8, AVR-GCC und Speicherbedarf
Meines Wissens nach fehlen bei der kostenlosen Version dem XC8-Compiler die Optimierungen. Oliver
Georg M. schrieb im Beitrag #7458501: > Für den AVR-GCC Compiler muss die Zeile > ... > ersetzt werden. Sollte aber gehen. https://www.nongnu.org/avr-libc/user-manual/group__avr__stdio.html#gaea2b6be92ead4673bc487b271b7227fb
-
Thread
ADC - Wert berechnen
Ich hab mal gemessen. Einmal im Simulator im staubigen AVR-Studio mit dem ollen 2010er avr gcc (der noch einen "Bug" hat und sich in einigen Situationen viel RAM gönnt, so auch hier) und einmal mit Arduino UNO. Im AVR-Studio mit Optimierung -Os (minimale Codegröße) compiliert. Beim Arduino wurde
: > Ich hab mal gemessen. Einmal im Simulator im staubigen AVR-Studio mit > dem ollen 2010er avr gcc (der noch einen "Bug" hat und sich in einigen > Situationen viel RAM gönnt, so auch hier) und einmal mit Arduino UNO. Der Ramverbrauch its das eine, aber daß der (leicht staubige) arduino-gcc (
-
Thread
Index von Array: welcher Datentyp in C
. Darum kümmert sich der Compiler und das Ergebnis ist u.A. abhängig von den eingestellten optimierungs-Funktionen. Also hör auf, dir wegen sowas nen Kopf zu machen, und lern besser C! Dann verstehst du irgendwann vielleicht auch, wann es sinnvoll ist, sich um sowas überhaupt Gedanken zu machen
index); int z = *(index + pint); printf("%d %d %d %d\n", w, x, y, z); return 0; } [/c] > gcc -Wall -o ptrtest ptrtest.c > ./ptrtest 789 789 789 789 Michael
-
Thread
8-Bit CPU Selbstbau
somit drastisch verschieden und man sollte das auf dem Radar haben. Es stellt Ansprüche an die Optimierung des Systems, sowohl im Hardware-Setup (BIOS) als auch auf OS- und Anwendungsebene. Konfiguriert man das pro Sockel als eine einzige NUMA-Node mit 64 Cores? Oder ist es sinnvoller, es als 16 Nodes
Fehler gemacht, wobei dem kooperierenden Compilerhersteller genau dadurch ein Vorteil gegenüber z.B. GCC erwuchs. Dummerweise braucht man dafür etwas Erfahrung in dem, was C Compiler benötigen.
-
Thread
Unrealistische Recourcenauslastung bei leerem Projekt Gesperrt
RAM zu deklarieren. Der compiler hat direkt gemeckert, dass das da nicht rein passt.... Was macht GCC da?! Das kann doch nicht sein?! (siehe Anhang) Muss ich noch irgendwo rumfummeln, damit GCC weiß was es tun soll?
aus, was sich dahinter verbirgt. Allerdings dürfte eine release-Build mit eingeschalteter Optimierung das Problem entschärfen. Oliver
-
Thread
-Os liefert schlechtes Ergebnis Gesperrt
Verlangsamung gegenüber der direkten Berechnung ohne Funktionsaufruf. Das Verhalten zeigte sich mit dem AVR GCC 7.4. und 9.2 identisch. Dieses Beispiel soll zeigen, dass die Optimierung durchaus nennenswert dazwischen grätschen kann. Evtl. hilft das ja irgendwem irgendwann einmal weiter ;) P.S.: Die Abfrage
Im GCC kann man Optimierung auch im Quellcode sektionsweise steuern.
-
Thread
Code optimieren ?
schneller sein? Wie oft wird die Funktion aufgerufen? https://www.mikrocontroller.net/articles/AVR-GCC-Codeoptimierung#Prinzipien_der_Optimierung
avr-gcc kennt auch 24-Bit Typen wie __int24.
-
Thread
Welche Low Cost 32 Bit MCU Familie? Gesperrt
auf Messen auch kostenlos verteilt. Mit Speck fängt man Mäuse... Und C++ incl. STL konnte man dank gcc auch früh auf den Cortex-M nutzen.
Umso wichtiger ist halt die > Dokumentationen. Das wird mit dem Programmier-Spaß bei der Optimierung mehr als ausgeglichen :) Aber genau so ist es: Dokumentation zu Sinn und Zweck, dem Verfahren, den verwendeten Parametern ist das Ein&Alles. Wenn nun auch noch der Code selber programmsprachlich
-
Thread
Hex File von Atmega16 in Atmega32 verwandeln
relativ, Nomen est Omen! Die gibt es aber nur bei kleinen > AVRs mit max. 8k Flash. Je nach Optimierung darf der AVR-GCC auch bei den großen RJMP benutzen und tut dies auch, wenn das Ziel innerhalb +/-4kB ist. In der Vectortabelle benutzt er aber nur JMP, also muß nichts umgerechnet werden.
-
Thread
Zahl umdrehen?
Interessanterweise gibt es im GCC zwar Builtins um Bytes, Halbworte etc umzudrehen, nicht aber bei Bits. Genau das wäre aber die sinnvollste Stelle, weil viele Architekturen entsprechenden Hardware-Support haben.
wichtigen und interessanten Aufgaben deines Projektes zu. https://www.mikrocontroller.net/articles/AVR-GCC-Codeoptimierung#Prinzipien_der_Optimierung Gilt sehr allgemein für viele Dinge, nicht nur in der Elektronik und Software.
-
Thread
Formel oder Rechenweg gesucht.
Beitrag #7398293: > Unter welcher Platform soll das so sein? Signifikant und getestet unter AVR/GCC, PIC/xc8, ARM/Keil Plattform ... Probier es mal selber aus aus und schau dir code size/run time an.
Bit0->+3 Bit1->+5 Bit2->+7 Bit3->+7 Das bleibt eine kleine Lutz, da geht auch noch mehr für Optimierung.
-
Thread
Flash CRC Berechnung optimieren/schneller
Ich hab mal schnell was zusammengestrickt, ich komme auf 55 Takte/Byte Die Lib in crc16.h des AVR-GCC ist inline-Assembler (23 Zyklen) und braucht mit Loop-Overhead zusammen 41 Zyklen. Die CRC-CCITT ist mit 17 Zyklen etwas kürzer.
Ok, hier die kleine Optimierung, wenn man die Schleife um die CRC in ASM per Hand gestaltet. Macht 33 Takte/Byte. Die eigentliche, trickreiche CRC-Berechnung braucht 23 Takte, habe ich einfach kopiert. Die Variante in C
-
Thread
[c] wie wirft man UART-Daten weg?
ja, dass es sich um eine "besondere Speicherzelle" handelt, für die die üblichen Annahmen, die Optimierungen ermöglichen, nicht gelten. Daher keine Warnung. > Ich kann mir auch nicht vorstellen, dass ein gcc für einen STM32 dümmer > ist als für einen AVR, s.a. Ist es auch nicht, da es eine Frontend-Warnung ist, und das ist für gcc und avr-gcc natürlich identisch.
-
Thread
Mit KI Programme für Mikrocontroller entwickeln
super einen Agenten beauftragen zu können einen Codeschnipsel zu erzeugen. Aufgabe:[code] Code AVR GCC, atmega32, hochauflösende PWM an Pin PD5, OC1A, steuerbar in 0.01% schritten. [/code] Antwort: [code] void pwm_init() { // Set PD5 as output pin DDRD |= (1 << PD5); // Set fast PWM mode
an Arbeitsbienen. Wenn jetzt AI/KI immer mehr mitmischt ist das lediglich eine Art weiterer "Optimierung" die zum Teil erst noch erschlossen und erfunden werden muss. So ein Geschäftsmodell kontrastiert stark mit der traditionellen Art der Wertschöpfung durch die Arbeit herkömmlicher Menschen,
-
Thread
Welche 32-Bit uC-Familie ist empfehlenswert?
mir vor vielen Jahren mal Microchips Compiler für deren 16-Bitter angesehen. Der war zwar auf Basis GCC, hatte aber eine spezielle Optimierung drin, die nicht Teil des veröffentlichten Quellcodes war. Die war in ein separates Programm ausgelagert. Obendrein hatten sie jenes Programm, das die diversen
(prx) A. K. schrieb im Beitrag #7389478: > Der war zwar auf Basis GCC, hatte aber eine > spezielle Optimierung drin, die nicht Teil des veröffentlichten > Quellcodes war. Die war in ein separates Programm ausgelagert. Selbst wenn das nicht mehr so ist, und selbst
-
Thread
Mit dem ATMEL STUDIO 7 klarkommen Gesperrt
sehenden Paste & Copy Code, fehlerfrei zu compilieren ? *volatile* hilft auch nicht. Es ist ein *GCC C Executable Project*. Bernd_Stein
Bernd S. schrieb im Beitrag #7400808: > Was läuft jetzt wieder falsch ? Hast du die Optimierung des Compilers deaktiviert?
-
Thread
Ineffiziente Berechnung von AVR-GCC Gesperrt
Hallo Compilerexperten, ich bin im Zuge der Optimierung des Codes eines AVR-GCC-Projekts auf ein mir nicht erklärliches Verhalten des Compilers gestoßen, zu welchem ich gerne Euren Rat einholen möchte. Um das Problem einfach beschreiben zu können, habe
selbst ausrechnen anhand des besseren Assembler). Daher halte ich das nicht für eine Mikro-Optimierung. Ob und wann die jetzt mainline geht, weiß ich nicht. Ist mir aber auch egal, da ich meinen avr-gcc eh selbst erzeuge.
-
Thread
Microchip Studio mit GCC C-Compiler
Hallo, ich arbeite auf einem Win11-Rechner und möchte im Microchip Studio den GCC C-Compiler nutzen, weil ich höhere Optimierung nutzen möchte. Ich habe arm-gnu-toolchain-6.3.1.508-win32.any.x86 von der Microchip-Seite herunter geladen. Wie geht es jetzt weiter? In dem Paket habe
im Beitrag #7383200: > ich arbeite auf einem Win11-Rechner und möchte im Microchip Studio > den GCC C-Compiler nutzen, weil ich höhere Optimierung nutzen möchte. Der gcc wird automatisch mit Microchip Studio installiert, den musst Du nicht selbst installieren. Wenn Du ein neues Projekt anlegst
-
Thread
Alternative zu sprintf
meisten fällen nicht lohnt. Trotzdem macht das meist jeder selber, sei es aus Stolz, zu früher Optimierung oder Größenwahn (bei mir alles 3 und es war immer unnötig!).
exakt der richtigen Stelle. Ich möchte nicht mehr drauf verzichten. Mit -Wstack-usage=42 gibt der gcc eine Warnung aus, wenn eine Funktion mehr Stack braucht als geplant. Das funktioniert nicht bei jeder Art von Stack-Nutzung, aber meistens.
-
Artikel
DsPIC
EEPROM Versionen mit internem 12 Bit AD-Wandler, I2C, SPI, AC97 und CAN Software. Microchip bietet den GCC-basierten Compiler C30 im 3-4 stelligen $-Bereich an. Eine Studentenlizenz ist kostenlos erhältlich. Nach der Erprobungszeit ist lediglich die Art der Optimierung nicht mehr frei wählbar. Es wird dann
-
Thread
Ganzes Objekt oder nur einzelne Attribute volatile?
Hier haben globale memory-barrier bzw. selektives "clobbern" einzelner Variablen einen Fehler im avr-gcc, der andere Optimierungen verhindert. Dass habe ich auch hier in einem Thread mal beschrieben. Wenn Du mit volatile und einem Atomaritätskonzept arbeiten willst, danns würde ich nicht das Objekt
gehören. Nur wenn der Inline-Assembly-Block einen memory-Clobber enthält, wie oben gezeigt (beim GCC).
-
Thread
Fehlerhafte Adressierung von lokalen Arrays bei tinyAVR(R) 0-series
mit übertragen werden. Wie stelle ich das an? Das Progrämmchen wurde übersetzt mit: [code]avr-gcc -Wl,--section-start=.text=0x0000 -Os -DF_CPU -mmcu=attiny1604 puts_vers.c -c -o puts_vers.o[/code] Der Linkerlauf sieht so aus: [code]avr-gcc -mmcu=attiny1604 puts_vers.o -o puts_vers.elf -Wl,--
gegeben habe, um weitere Fehlerquellen auszuschließen. Ausprobiert habe ich das nun mittlerweile mit avr-gcc 7.3.0 und auf einem anderen Rechner jetzt mit avr-gcc 12.1.0
-
Thread
Tasterverarbeitung mit ARDUINO-C
dritten mal: Arduino ist üblicherweise C++ Zudem gibt es kein Arduino C, sondern nur das C, was der GCC mitbringt. Auch gibt es kein Arduino C++, sondern nur das C++, was der GCC mitbringt.
dritten mal: Arduino ist üblicherweise C++ > Zudem gibt es kein Arduino C, sondern nur das C, was der GCC mitbringt. > Auch gibt es kein Arduino C++, sondern nur das C++, was der GCC > mitbringt. Man kann nicht mit Arduino alle möglichen talent- und kompetenzlosen Spaten anziehen und sich dann beschweren
-
Thread
avr-gcc: toten Code eliminieren
Wie kann man mit dem avr-gcc toten Code eliminieren? https://stackoverflow.com/questions/14737641/have-linker-remove-unused-object-files-for-avr-gcc empfielt die Linker-Option -gc-sections und die Compiler-Optionen -ffunction-sections
die Nachwelt die Erkenntnisse aus diesem Thread: Um toten Code zu eliminieren, muss man dem avr-gcc folgende Optionen mitgeben: [pre] -flto -fdata-sections -ffunction-sections -Wl,-gc-sections [/pre] -Wl,-gc-sections wird dabei an den Linker durchgereicht. Bei dieser Optimierung werden
-
Thread
Hilfe bei ARM code
durch das LDRB bereits auf 0 gesetzt wurden. Das passiert bei schlechter/abgeschalteter Compiler-Optimierung, besonders wenn man zwischen verschiedenen Integertypen hin und her wandelt. IIRC machen alte GCC-Versionen sowas. r0 und r1 einzeln zu laden (statt direkt 16bit mit LDRH zu laden) wird wahrscheinlich
Ein weiteres Artefakt was vermutlich seinen Ursprung in fehlender Compiler-Optimierung hat? Ich finde öfter solche Konstrukte im Code die auf den ersten Blick wenig Sinn machen: [code] LDR R1, =byte_0x400017F0 MOVS R0, #8 STRB R0, [R1,#(byte
-
Thread
Arrays kompakter im Flash speichern
https://www.mikrocontroller.net/articles/AVR-GCC-Codeoptimierung#Prinzipien_der_Optimierung Gilt fast immer.
-
Thread
Intel Compiler gesucht als Freeware
Vektorisierung hat er mal viel besser gemacht - aber der Abstand zu Clang(Clang-cl fürs VStudio) und GCC(MingW für Windows) wird immer kleiner oder ist gar nicht mehr relevant letztes Jahr ist das Frontend auf Clang gewechselt d.h. nur noch der Code-Generator ist von Intel der Intel-ThreadBuildingBlocks
Hauptsache die Klitsche spart 200€ pro Computer und investiert dann 800 Arbeitsstunden in die Optimierung.
-
Thread
avr-gcc: direkter Register Zugriff vs structure-mapping und fehlende Optimierung?
suboptimal sind. Du hast die Frage nicht verstanden! Ich bin ja mit der nicht so ganz vollständigen Optimierung des gcc im Falle (1) vollkommen zufrieden. Die Frage ist, warum wird das durch Version (2) verhindert. Oliver S. schrieb im Beitrag #7350030: > Es ist schlicht sinnlos, zu fragen, warum ein
MemoryBarrier (oder auch ggf. ein Output-Clobber bzgl. counter hier) fälschlicherweise auch eine Optimierung bzgl. der globalen Variable `g` verhindert. Also, insgesamt 3 Fehler im aktuellen gcc, wobei jeder für sich schon die Generierung eines optimalen Code verhindert. Workaround ist hier, auf den
-
Thread
Bitte um Hilfe mit Verständnis, ISR von Timer usw.
da sind und mötglicherweise gar nicht auftauchen. https://www.mikrocontroller.net/articles/AVR-GCC-Codeoptimierung#Prinzipien_der_Optimierung Du machst es genau falsch herum.
qualifiziert sind und damit jeder Zugriff wie in der abstrakten Maschine erfolgt, was mögliche Optimierungen verhindert.
-
Thread
ISR Aussetzer durch Volatile-Variablen-Polling ?
Vielleicht könnten die infos in dem Link irgendwie nützlich eingesetzt werden: https://gcc.gnu.org/onlinedocs/gcc/_005f_005fatomic-Builtins.html
unspecified-behaviour kann der Keil-Compiler natürlich > füllen. Es funktioniert auch mit dem arm-gcc.
-
Thread
Frage zu UART AVR Code
Läuft problemlos, auch mit Optimierung -Os, siehe Anhang.
Kann es sei, dass du einen neueren Compiler als WinAvr2010 (avr-gcc 4.3.3) verwendest? Ich frage, weil der Simulator/Debugger mit neueren Versionen öfter Probleme hatte, bis hin zum Absturz.
-
Thread
Bits in Register setzten (Schreibweise)
Compiler oder der Optimizer macht. Am Ende passiert das alles in dem selbem Programm, nämlich dem avr-gcc. Wie das intern modularisiert ist, ist doch eigentlich egal.
oder der Optimizer > macht. Am Ende passiert das alles in dem selbem Programm, nämlich dem > avr-gcc. Wie das intern modularisiert ist, ist doch eigentlich egal. Nein, solange manche module/Optimierungen erst angeschaltet werden (-O0,-O2,-Os) müssen. Und vielleicht wollte ja der Programmer diese
-
Thread
7-Segment-Ansteuerung
Gerhard O. schrieb im Beitrag #7335374: > Der gcc 5.4.0 braucht übrigens nur 498 bytes > Der gcc 7.3.0 braucht 586 bytes für das selbe Programm Mit gcc-12 (oder 13) und etwas Kosmetik in C++ (was Du ja oben verwendet hast: Arduino) sind es dann
Wilhelm M. schrieb im Beitrag #7335477: > Gerhard O. schrieb: >> Der gcc 5.4.0 braucht übrigens nur 498 bytes >> Der gcc 7.3.0 braucht 586 bytes für das selbe Programm > > Mit gcc-12 (oder 13) und etwas Kosmetik in C++ (was Du ja oben verwendet > hast: Arduino) sind
-
Thread
Strings mit AVR - aber richtig
#7328738: > PR92606 mischt Strings im Flash mit Strings im RAM, daher muss diese > (Compiler-)Optimierung deaktiviert werden. Du meinst den Bug 92606: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92606 Und -fno-ipa-icf-variables ist ein Work-around für diesen Bug. Dein Patch wurde ja (leider)
92606: Ja. PR steht für "Problem Report", und es gibt eine fortlaufende Numerierung. https://gcc.gnu.org/PR92606 > Welche Optimierungen fallen denn noch weg, wenn -fno-ipa-icf-variables > gesetzt ist? Es fällt genau diese Optimierung weg: [code] -fipa-icf-variables Perform
-
Thread
Linux boot GNU/Grub Problem
verändert, jetzt also wieder eigener Desktop - Skyrim Start ein wenig holperig (nicht nur das, Optimierungen für Skyrim (z.B. fehlerhafte Quests auflösen) gibt es auch noch obendrauf) (fragt mich nicht, wo die jetzt herkommen). Skyrim selber ist nur Diashow, kann man nicht spielen. Auch dann nicht, wenn
upgegradet. Gnome Schach haben die Updates sichtbar gut getan. Aus der Perspektive der schrittweisen optimierung bin ich schon im grünen Bereich ;) Die Grafik selber, Steam und Wine werden noch ein paar Tage/Wochen/.. Baustelle sein. Die Linux-Steaminstallation/Funktion läuft aber schon OK.
-
Thread
GPL V3 und gekaufter Code
explizit noch eine Ausnahme bei ihrer Lizenzierung, die die Syscalls ausschliesst. Ganz ähnlich wie gcc auch, für die mit ihm kompilierten Programme. PS: Es ist "Linus Torvalds", nicht "Linus Thorwalds"
mehr wie das ausging. Vor etlichen Jahren bin ich bei deren 16-Bittern dem begegnet. Sie hatten GCC um eine proprietäre Optimierung angereichert, aber IIRC lief diese als separates Programm, closed Source. Ebenso die Lizenzprüfung.
-
Thread
uint32_t arm-none-eabi-gcc atomic?
ein uint32_t, wenn er denn aligned, ist, auf einem 32bitter wie ein Cortex-M bis auf weiteres mit gcc atomar. Das ist aber wie ich gelernt habe nicht garantiert. Und zumindest beim Clang hab ich da sehr interessante Optimierungen beobachtet (die ungewöhnlich, aber nicht dem Standard widersprechen
-
Thread
Zähl-Algorithmus
unsicheren Kopierfunktion die sich auf die 0-Terminierung verlässt. Dann noch Pointer Arithmetik. Die Optimierungen mit der 0-Kette und dem angepassten br bringen wenig, machen den Code dafür größer und kosten Eleganz. Aber trotzdem Lob (ernst gemeint). An den Details kann man ja noch feilen.
einem i5-6267U mit 2,90 > GHz. Auch interessant, hier mal mit einem 2,4Ghz ARM (RK3588). [c] gcc time ./test 8 2 25 75 o 563853888 Kombinationen gefunden real 0m5,894s user 0m5,873s sys 0m0,020s gcc -O1 time ./test 8 2 25 75 o 563853888 Kombinationen gefunden real 0m3,217s
-
Artikel
AVR-GCC-Codeoptimierung
wo's nur geht. Wirklich zeitkritische Funktionen und Interrupts als Assemblercode in separater Datei GCC-Optionen. Optimierungs-Level. avr-gcc kennt mehrere Optimierungsstufen: -O0 : Keine Optimierung des erzeugten Codes. Diese Optimierungsstufe optimiert den Resourcenverbrauch des Hostrechners und die
diese zu schieben, das ist meist deutlich schneller. Gute Beispiele findet man hier und hier. Optimierung der Ausführungsgeschwindigkeit. Hierzu gibt es schon eine Application-Note von Atmel. Diese AppNote bezieht sich auf den IAR-Compiler. Die darin genannten "Optimierungen" sind für avr-gcc größtenteils
-
Thread
AVR: ISR mit internal linkage: keine Linker-Fehlermeldung
könnte. Erweiter ./gcc/config/avr/avr.cc::avr_set_current_function() oder ähnliche Stellen, die dafür geeignet sind. https://gcc.gnu.org/git/?p=gcc.git;a=blob;f=gcc/config/avr/avr.cc;h=c193430cf073b00238c250f9a690b1a97c62f87a
Wie gesagt, alle globalen Optimierungen: -flto, -fwhole-program. oder wie die heißen mögen, z.b. bei clang/llvm. Prinzipiell ist es keine gute Idee, die Korrektheit eines Programms von Optimierungen abhängig zu machen. Für vanilla
-
Artikel
AVR-GCC-Tutorial/LCD-Ansteuerung
Hauptprogramm in sein Projekt aufnehmen. Dies geschieht beim AVR Studio unter Source Files im Fenster AVR GCC oder bei WinAVR im Makefile (z. B. durch SRC += lcd-routines.c). Wichtig ist außerdem, dass die Optimierung bei der Compilierung eingeschaltet ist, sonst stimmen die Zeiten der Funktionen _delay_us(
-
Thread
Überlauf in AVR mit C
keine - UBs zur Compilezeit > abgefangen werden. Naja, da gibt's schon ein paar, und da warnt ein gcc auch meistens.
Yalu X. schrieb im Beitrag #7310066: > Doch, z.B. der GCC. Das folgende Programm verhält sich je nach > Optimierungsstufe (-O0 oder -O1) unterschiedlich, was aber wegen des UB > völlig in Ordnung ist... Natürlich ist das GCC-Verhalten hier standardkonform
-
Thread
GCC Preprozessor Berechnungen und Forced Errors
hat, >> was erst der Compiler weiss. Und sizeof kennt erst der Compiler. > > Zumindest bei dem GCC weiss ich nicht, ob das so stimmt. Beim GCC ist der Präprozessor mit im Compiler eingebaut, aber dadurch darf sich dessen Verhalten natürlich nicht ändern. > In func2() (per const Variable) wird
Präprozessor nichts damit zu tun hat. Jupp, der ist raus. Die Operation sieht der nicht als Optimierung.