-
Thread
ARM (STM32F4) - eigene Interrupt Routine-> umbiegen des Funktionspointer
wenn du gcc verwendest, funktioniert auch ein "alias"-attribute [code] alias ("target") The alias attribute causes the declaration to be emitted as an alias for another symbol, which must be specified. For
Dr. Sommer schrieb im Beitrag #4870258: > Wenn du den GCC verwendest und LTO aktivierst, wird beim Linken noch ein > Optimierungsschritt durchgeführt. Dabei werden u.a. (fast?) alle > Funktionen geinlined, die nur 1x aufgerufen werden. Somit verschwindet
-
Thread
NUCLEO-L432KC Blinky Projekt mit 11kB Speicherverbrauch
Optimierung -Os Striping Symbols -s -Wl,--gc-sections und -ffunction-sections -fdata-sections -flto Bin ich auf 5704 statt 11048bytes Keil Compiler vom Kollegen liefert 4008bytes
erstmal der größte Brocken der Libraries dazu gepackt. GCC ist ein bisschen größer, aber trotzdem noch in Ordnung. Bisher war das um die 30% mehr Speicher.
-
Thread
ATMega328P low power funktioniert nicht
eines Portbits mit einem sbi aufs PIN-Reg.. Den erhält man aber nur mit OR bei eingeschalteter Optimierung. Da dann nämlich kein RMW ausgeführt wird.
in einer Version so wie sich der Programmierer das vermutlich gedacht hat, und das auch erst seit GCC Version 2.X?, als die SBI-Optimierungen dazugekommen sind. Welches nun das "Richtige" oder "Falsche" Verhalten ist, mag jemand mit tiefem Verständnis des C-Standards entscheiden, mir jedenfalls ist
-
Thread
String-Array und malloc
, sondern implementieren sie selber, direkt im Compiler. Hier mal eine Liste der Funktionen, die GCC bereits eingebaut hat: https://gcc.gnu.org/onlinedocs/gcc-6.3.0/gcc/Other-Builtins.html#Other-Builtins In dieser recht großen Liste ist auch strcpy enthalten.
immer mit Nullen füllt. Wozu sollte /das/ denn gut sein? Wenn du partout keine der Compiler-Optimierungen bezüglich der Bibliothek haben willst, kannst du ja auch im freestanding mode compilieren. /Ich/ jedenfalls finde die Optimierungen sinnvoll und benutze daher den hosted mode selbst auf
-
Thread
Wiederholende Initialisierung von Variablen - Speicherplatz
was speziell bei längeren Funktionen übersichtlicher ist. Außerdem erlaubt es dem Compiler mehr Optimierung. Vorteil beim Anlegen im Funktionskopf: Man sieht auf Anhieb, wieviel Stack die Funktion verbraucht. Interessanter wird folgender Fall: [c]void foo(int bar) { if (bar) { char
Problem, sich das Teil lokal zu installieren und dann eine andere Compilerversion anzugeben, z.B. avr-gcc >= 7.0).
-
Thread
Registeroptimierung von Assemblercodes
zubereiten. Für einen realen Prozessor oder was theoretisches? Im ersteren Fall: Compilerbau/Code-Optimierung ist zwar ein sehr schönes Feld, aber alles andere als einfach. Gerade das Optimieren ist alles andere als trivial. Angefangen mit brauchbarem IR (Intermediate Representation, bspw. GIMPLE beim gcc
ihr solltet euch mal grundlegende Gedanken über das Projekt machen und was ich erreichen wollt. Optimierung nur der Optimierung willens macht nur Arbeit und bezweckt genau gar nichts. Man muss sich das schon sehr gut überlegen...
-
Thread
return uart_rx() | (uart_rx() << 8);
Falk B. schrieb im Beitrag #4871653: > Premature optimization is the root of all evil. Mit Optimierung hat das nix zu tun, eher mit "Know your Language!"
Johann L. schrieb im Beitrag #4871869: > Mit Optimierung hat das nix zu tun In der Vorstellung mancher Menschen schon: "Wenn ich möglichst wenig Code schreibe, dann ist das optimal. Also quetsche ich möglichst viele Anweisungen in eine Zeile, anstatt
-
Thread
Boost.preprocessor library
Okay dann hast du da andere Erfahrungen gemacht. Nun, wenn du dir so sicher bist dass der Fehler im GCC liegt, kann dir hier vermutlich auch keiner helfen. Nun gut, du hast ja auch keine konkrete Frage gestellt.
Im Prinzip ginge es auch mit C Mitteln ohne constexpr, dann müsste man sich aber auf die Optimierung des Compilers verlassen, dass die Berechnungen zur Compilezeit stattfinden.
-
Thread
Bitmanipulation beschleunigen
(ret). > >>das erwarte ich als Selberverständlichkeit von einem Compiler. > > Das macht der gcc ja auch ohne den Hack, der macht es nur noch einen > TICK schneller. Ist eine OptimierungsoptimierungOptimierung. Ich würde > sie einfach weglassen. Offensichtlich hilft man dem GCC beim Optimieren
Eingabe und Ausgabe hat; gcc weiß nach dem asm also nicht mehr, dass out=0 ist, und daher kann die o.g. "Optimierung" nicht angewandt werden. Wenn man aber wirklich darauf angewiesen ist, dass der Code diesen Grad an Effizienz
-
Thread
SSD1306/1309 Library zum Darstellen von Text auf OLED Displays
kompilieren, es gibt aber Warnungen : [code] -------------- Build: Debug in EmcExcelRelay (compiler: GNU GCC Compiler for AVR)--------------- Checking if target is up-to-date: make.exe -q -f makefile Running command: make.exe -f makefile -------- begin -------- avr-gcc (GCC) 4.7.2 Copyright (C) 2012
Einschaltaugenblick zu sehen, dann nur noch die Artefakte ) Ich habe auch mit der Compilerversion avr-gcc (GCC) 9.2.0 versucht. Das Ergebnis war aber gleich. Vielleicht hatte jemand ein ähnliches Problem ? Danke im Voraus. Jan [Mod: C- und code-Tags ergänzt.]
-
Thread
Servosteuerung 30 A - H-Brücke verstärken?
Die Vorlage für den Servocontroller von ELM-Chan ist Assembler. Deswegen die Entschdeidung für gcc. Da kann ich (hoffentlich) leichter mischen.
ist Assembler. Und uralt. Die Welt hat sich weiter gedreht. >Deswegen die Entschdeidung für gcc. Da kann ich (hoffentlich) leichter >mischen. Mach mal.
-
Thread
Literatur C++ für C-Programmierer bzw. C++ Internals
Die Seite könnte helfen: https://gcc.godbolt.org/ Gruß Herby
kannst ja gerne dem Optimierer beim Arbeiten zugucken und wirst alsbald feststellen, dass der Optimierungen kennt und anwendet, die du auch nach drei Flaschen Lambrusco noch nicht nachvollziehen kannst :-) Du wirst feststellen, dass der Linker immer noch genauso linkt, wie früher. Nur die Namen der
-
Thread
avr-gcc: Optimierung: mehrere RCALLs erzeugt
lediglich dazu, 6 Bytes Platz auf dem Stack für dein lokales Array zu schaffen. Das dient der Optimierung der Codegröße, da es das mit lediglich zwei Instruktionen schafft. Alle anderen Möglichkeiten wären größer.
geschickterweise erwähnt, dass sich um so einen handelt: N. G. schrieb im Beitrag #4840491: > wird mit avr-gcc -s -Os -mmcu=avr6 Ich hatte anfangs auch gedacht, dass da doch eigentlich noch 2 Bytes fehlen, und dann hab ich obige Zeile gesehen.
-
Thread
avr-gcc: Optimierung von indirekten Funktionsaufrufen
Hallo Forum, Mir ist beim schreiben einer Library ein mögliches Optimierungsproblem aufgefallen: Testcode: [c] typedef unsigned char uint8_t; extern uint8_t (*fp)(uint8_t); void foo(uint8_t (*param1)(uint8_t)) { fp = param1; } void bar(void) { fp(0xFF); fp(0xFF); } [/c] kompiliert mit avr-gcc -S -Os -Wall -mmcu=avr6 test_fp.c zu [c] foo: sts fp+1,r25 sts fp,r24 ret bar: lds r30,fp lds r31,fp+1 ldi r24,lo8(-1) eicall lds r30,fp lds r31,fp+1 ldi r24,lo8(-1) eijmp .ident "GCC: (GNU) 5.3.1 20160106
-
Thread
avr-gcc 4.8.1: Fehler durch Optimierung / inline function
lernen. ;-) Meine Ergebnisse so weit: 1. M.E. stimmt das obige Listing für USI_UART_start mit Optimierung genau mit dem C Quelltext überein, Zeile für Zeile. Das ohne Optimierung dagegen... ist etwas verwirrend. Da müssen wohl noch ein paar andere Programmteile verbacken sein. 2. Im *.lss mit Optimierung
37e - 380 und 392 - 3aa Das sieht eigentlich auch nicht verkehrt aus. In der *.lss ohne Optimierung finde ich jedoch nicht einmal die Schreibzugriffe auf 0x01. Wie wird denn das hier gemacht? Ich habe nun gcc-avr 4.9.2 installiert. Mit Optimierung bekomme ich dasselbe Fehlerbild. Und ohne
-
Thread
Atmel Studio Disassembly
Quelltext öffnen, der zum Programm gehört. Und du musst das Programm mit Debug Symbolen und minimalen Optimierungen (Gcc Optionen: -g -O0) compilieren, ansonsten stimmt der Maschinencode nicht mit dem Quelltext überein so dass der Debugger nichts Sinnvollen anzeigen kann. Ich arbeite nicht mit dem Atmel Studio
-
Thread
Unklarheiten bei einem C Programm
nicht verstanden hat, daß es >> völlig sinnlos ist, Nullen durch die Gegend zu schieben. >Ohne Optimierung ergibt das ein paar verschleierte NOP ;-) Nope, das gibt nicht mal ohne optimierung NOPs, Konstanten löst bereits der C-Präprozessor auf.
setzt er eine 8 ein. Der Compiler bekommt die 3 und die 5 niemals > zu sehen. das schein mein GCC andere Meinung zu sein.
-
Thread
DTMF decoder
Durchgang) >Die Kernroutine ("int32_t = int32_t * uint16_t / 65535") war in >Assembler, der Rest in GCC. Ich kam auf rund 6 Millionen Takte pro >Sekunde. Also Kinderkram für einen ATMega. :-) Heißt das 37%@16Mhz Auslastung? Klingt gut. Vielleicht könnte man auch auf Assembler verzichten.
Deinem vorigen Post habe ich entnommen, dass die Multiplikation in Assembler geschrieben ist. Macht der GCC die Optimierung automatisch? Würde es etwas bringen, "inline" davor zu schreiben? >Der Code funktionierte zwar 1a auch mit realen Telefonatmitschnitten, >aber der Spezialbaustein MT8870 ist perfekt
-
Thread
Optimiert der Compiler Formeln?
konstante Ausdrücke schon bei der Compilierung berechnet werden. Es gibt auch noch weitergehende Optimierungen, aber da wirst du schon nachschauen müssen, was für Code für deine Zielplattform erzeugt wird. Oliver
kann, dass das Ergebnis nach der Umformung für alle Variablenwerte dasselbe bleibt. Zumindest der GCC würde dann die gewünschte Umformung vornehmen.
-
Thread
128 Bit Risc
der doku auch klar wird. z.B. http://www.felixcloutier.com/x86/PADDQ.html Ausserdem ist der AVR-gcc assembler ziemlich ungeeignet für etwa mov edi, [ebp+16] oder umgekehrt. oder mov rax, qword ptr [rbp+rdx*4] Wenn ich wüsste, wie man masm code in gcc einbindet, wäre ich schon weiter.
#4831334: > Dieses gas schau ich mal an. der GAS ist sicherlich der Assembler, der beim g++ bzw. gcc mit dabei ist!
-
Thread
Arduino als uC für Bachelorarbeit, schädlich für Bewerbung?
Hardwareentwicklung geht sondern der Controller nur Mittel zum Zweck ist. Beispiel: das Kernthema ist die Optimierung eines Regelalgorithmus, außerdem soll ein zeitnah ein ein prototypischer Demonstrator geschaffen werden. Wer hier nicht zur schnellen Lösung greift (so diese die technischen Anforderungen erfüllt
will ja der TO nicht. Und ich glaube das der Umstieg von der Arduino-IDE und arduino-lib zu C mit AVR-gcc schon ein zu grosser Schritt für den User ist der nur Arduino kennt. Klar kann man für sich sagen, das man auf die Fähigkeit selbstständig Schaltungen zu entwickeln keine Wert legt obwohl man sich
-
Thread
4/8-Hamming-Code nach Integer konvertieren
Meine Lösung hatte ich ja schon im Eröffnungspost geschrieben. Ich wollte eigentlich nur Tipps zur Optimierung haben, naja, Pustekuchen! Ich kann aber durchaus mit meiner Lösung leben. Vielen Dank und schönen Gruß, Thomas
Makefile einzubauen ist auch keine Quantenphsik... alles was du brauchst ist ein Host-Compiler wie z.B. GCC.
-
Thread
Wieviel Zeilen Code passt in 64 kB Flash Rom ?
Compilier mal den gleichen Code für unterschiedliche Architekturen und dann mal mit und ohne Optimierung, dann schreib mal in eine Zeile 1000 Befehle mit ; getrennt oder nur einen in je 1000 Zeilen. Dann guck mal wieviele Zeilen ASM Code aus deinem C Code gemacht wurden.
natürlich kann man sich mit Bibliotheken das Binary nahezu beliebig aufblähen. Auf STM32 schmeißt GCC am Ende etwa 128kB an Binärcode raus, optimiert auf Geschwindigkeit, nicht auf Größe. Das eigentliche Image ist noch deutlich größer, aber das sind inkludierte Binärdaten und kein Code. Einige kB
-
Thread
Suche Empfehlung für Mikrocontroller
klassischen PWM in Hardware und DANN kann man weiterreden. https://www.mikrocontroller.net/articles/AVR-GCC-Codeoptimierung#Prinzipien_der_Optimierung Das gilt auch für Hardware! >Die PWM ist ja nur ein Aspekt. Auf der anderen Seite der Todo-Liste >steht noch die Kommunikation via Ethernet aus ...
werden), mach erstmal eine einfache Umsetzung deines Konzepts und miss nach. Dann kann man über Optimierungen reden.
-
Thread
40 Bit in 5 Bytes abbilden mit Bitfeld
jetzt geklärt wäre, noch was anderes: Mathias G. schrieb im Beitrag #4801393: > } __attribute__((gcc_struct)) tx_data; ... ich glaube nicht, daß das Attribut gcc_struct auf ARM irgendwas (geschweige denn, was Sinnvolles) tut. Das würd' ich weglassen.
auch probiert - bringt nicht wirklich was. Ich habe es auch mal ausprobiert: Mit arm-none-eabi-gcc 6.2.0 und __attribute__((packed)) und ohne das gcc_struct-Attribut (das auf dem ARM sowieso keine Bedutung hat) ist die Struktur 7 Byte groß, d.h. es verbleiben keine ungenutzten Bits.
-
Thread
DIY Frequency Counter mit 10 bis 12 Digits?
ohne TFT lassen sich bei Bedarf 192 KB RAM für eine statistische Auswertung nutzen. Selbst ohne Optimierung und bei entsprechend hoher Eingangsfrequenz (testweise 10 MHz) lassen sich 50000 Messungen/s (lückenlos, mit reduzierter Auflösung) erreichen. Ob das (mir) etwas nutzt, wird sich allerdings zeigen
doppelt solange wie bei 32 Bit. Man kann das auch ausrechnen: 2 x 32 = 64 ;-) > 64Bit Float kann der GCC fuer den AVR direkt nicht, mit einer > zusaetzelichen LIB eventuell ja aber auch seeehrrr langsam. Man muß ja nicht für alles den GCC nehmen. Und wie zuvor, dauert eine double Operation etwas mehr
-
Thread
Locala variable wird weg optimiziert, Coocox + GCC
unterschiedlich verhalten. Diese function kommt aus die WS2812 lib von UB. Alles anderes functioniert. Ohne optimierung gehts auch. Selbst wenn ich diese variable volatile (local) definiere, wird n noch immer wegoptimiert ?? Diese Function wird nur beim "Init" aufgerufen, so jetzt wird die nicht verwendet. Wie kann
debuggen geht (meist) nicht. Deshalb zeigt Dir der Debugger auch die falsche Stelle an. Nimmst Du die Optimierung raus, wird der Fehler aber nicht mehr auftreten - so wie es UB auf seiner Webseite auch beschreibt. Deshalb: Lass die Optimierung drin, definiere ws2812_dma_status als volatile und alles wird
-
Thread
STM32F405 int64_t lehren
Mein Nucleo F411RE läuft auch mit u/int64_t ohne irgend eine lib mit gcc. Auch ohne mathlib.
Os -flto --specs=nano.specs --specs=nosys.specs -nostartfiles -Wl,--gc-sections -Tsrc/STM32F401XE/gcc_linker.ld -lm -Wl,-Map=build/hello_world.map Ich verwende den offiziellen gcc von Arm auf Launchpad.
-
Thread
Informationen zu C vs C++ / aka Futter für die Diskussion
Ah gut zu wissen. Muss demnächst mal checkn ob das keyword im gcc oder clang trunk schon existiert.
anschauen): https://www.youtube.com/watch?v=KJW_DLaVXIY Die entsprechenden Warnungen sind im gcc-trunk schon umgesetzt, was ich sehr lobenswert finde.
-
Thread
Neue 8-Bit Tinys vorgestellt: 417/814/816/817 Gesperrt
Atmochip handelt es sich bei diesen Tinys intern um XMegas: http://lists.gnu.org/archive/html/avr-gcc-list/2016-11/msg00002.html
MPLAB arbeiten müssen, noch will ich mich mit kastrieren Compilern zufrieden geben wenn es anderswo GCC für lau gibt.
-
Thread
DOS-COM mit bcc erzeugen (16bit),
nie ankommen, aber das ist wohl Compiler-Magie...) Der Compiler wird einfach keine so gute Optimierung haben wie das, was du von GCC oder Clang kennst. > DOS INT:int main() { > asm("mov ah, 0x02"); // ASCII 127 an Cursor schreiben > asm("mov dl, 127"); > asm("int 0x21"); > } > Disassembly
-
Thread
Wieso gibt es keine gute Programmiersprache?
nicht zu Potte kamen hats schonmal eines meiner Projekte verzögert. Da ist es mir lieber was zum GCC zusammenzugoogeln. Und GCC Supportfirmen gibts wie Sand am Meer, musst nur mal gidf.de aufrufen.
Daniel A. schrieb im Beitrag #4786453: > Das passt nicht Zusammen. avr-gcc ist soweit ich weiss gratis. Wenn man > auf einer noch supporteten Version ist, [...] Das war einfach ein reales Beispiel, in diesem Fall mit dem GCC. GCC ist gratis, der Bug war schon längst gefixt
-
Thread
mal wieder: Spass mit Linux Gesperrt
Möglichkeiten es gibt, ändert eine und mißt, ob die Anforderung besser erfüllt wurde oder nicht. Optimierung ist und bleibt eine mühsame, aufwändige Angelegenheit. > Dann mag gar sowas wie Spaß an Linux aufkommen. Man muß sich gar nicht so gut auskennen, um Spaß an und mit Linux zu haben. Man muß
zu wissen, dann reagiert man irgendwann entsprechend. Das ist genau dasselbe wie mit den etlichen "GCC-Bugs", die hier immer wieder gemeldet werden und die in ausnahmslos allen mir bekannten Fällen nichts mit dem GCC, sondern nur mit dem Code dessen zu tun haben, der sich beschwert hat. Da gibt es dann
-
Thread
RS485 bus mit Fleury Uart
when using SBI or CBI instructions.[/c] Auch wenn das normalerweise nicht geht, hat mir der gcc dies einmal so übersetzt (MEGA644): [c] UCSR0A &= ~(1 << MPCM0); /***************** cbi 0x0b, 0 //*** lss [/c]
sagen, dass ich den Code einst weilen nur als Debug compiliert habe. Was haltet ihr von der Optimierung mit den Baudraten Quarzen? Grüße Markus
-
Thread
AVR führt Programm nicht aus, wenn zusätzliche Funktionen definiert sind
Das ist exakt das, was ich mit avr-gcc übersetzt habe.
Das Programm ist nur ein Test, dementsprechend _wirklich_ vollständig oben abgebildet. Die Optimierung habe ich zumindest nicht bewusst ausgeschaltet, ich habe den Schalter -Os von avr-gcc verwendet. Dass die Funktion test() nicht ausgeführt wird, ist Absicht. Du sprichst von "Wegoptimierung",
-
Thread
[AVR] ADC Register lesen avrgcc
in der Reihenfolge ... Ich wollte nur sicher gehen, dass das so passt und dass mir irgendeine Optimierung nichts versaut :) [c] uint16_t adc_val = ADCL | (ADCH << 8); [/c]
https://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#16-Bit_Register_.28ADC.2C_ICR1.2C_OCR1x.2C_TCNT1.2C_UBRR.29
-
Thread
MSP430 Programmierung in C - Doku
Clemens L. schrieb im Beitrag #4778485: > Der TI-Compiler (oder gcc) hält sich an die entsprechenden C- und > C++-Standards. Ich werde mich fügen.
Ich habe mit MSP430 noch nie zu tun gehabt, daher kann ich dir nur empfehlen, die Optimierung einzuschalten oder im Zweifelsfall eine eigene printf-Implementation zu benutzen.
-
Thread
avr-gcc: Optimierung von Addition uint8_t + int8_t
Hallo, mir ist gerade aufgefallen, dass avr-g++ (im Gegensatz zu avr-gcc) folgendes nicht durchoptimiert: [c] volatile signed char s; volatile unsigned char i; int main() { s += i; } [/c] avr-g++ macht daraus: [pre] volatile signed char s; volatile unsigned char i; int main() { s += i; 7c: 80 91 60 00 lds r24, 0x0060 ; 0x800060 <_edata> 80: 20 91 61 00 lds r18, 0x0061 ; 0x800061 <s> 84: 90 e0 ldi r25, 0x00 ; 0 86: 82 0f add r24, r18 88: 91 1d adc r25, r1 8a: 27 fd sbrc r18, 7 8c: 9a 95 dec r25
-
Thread
GCC-ARM -O3 (nicht-)Performance
auch Pragmas, mit denen man den GCC zu Optimierung nur ausgewählter Code-Passagen anweisen kann. Das habe ich auch gemacht - nichts Wildes, nur z.B. eine oft aufgerufene Funktion mit einem Shellsort, die ich per Pragma auf -O3 gesetzt
Pechtreffer gehabt, während andere da ein glücklicheres Händchen hatten? Wie sind Eure Erfahrungen mit ARM-GCC, -O3 und Cortex-M?
-
Thread
wie variablenadresse in einer eff datei ändern?
aber 0x810712, was > eine Adresse im EEPROM darstellt. Und dann haben wir da auch noch die Optimierung des GCC. Wenn eine Variable einen file-static scope hat und außer der Intialisierung in der Deklaration nur gelesen wird, dann ist GCC so schlau, das Ding in die readonly-Sektion zu verfrachten,
0x810712, was >> eine Adresse im EEPROM darstellt. > > Und dann haben wir da auch noch die Optimierung des GCC. Wenn eine > Variable einen file-static scope hat und außer der Intialisierung in der > Deklaration nur gelesen wird, dann ist GCC so schlau, das Ding in die > readonly-Sektion zu
-
Thread
Wann kommt FPGA Technik für Consumer Notebooks / PCs
kommt mir noch schwerfälliger vor, da hätten wir eigentlich schon längstens den Sprung nötig, den GCC für die SW-Entwicklung hatte. Lichtblicke gibt's zwar schon, seien es die div. pfiffigen HDL-Ansätze per Python, oder die yosys-Toolchain. Irgendwie muss nur noch ein besseres Verständnis für OpenSource
dann passende Karten stecken (gfs mit FPGAs) und die passend konfiguriert sind. Das betrifft die Optimierung sowohl in Richtung Performance, Noise, Sealing und Power. Beispiele sind Systeme für den Betrieb in großer Hitze, in explosionsgefährdeten Bereichen, bzw hermetisch abgeschirmte Rechner für Operationsräume
-
Thread
Mikrocontroller in C++ oder C Programieren
sein liebstes syntaktisches Konstrukt in C++ sei: "}" Zum Experimentieren ist übrigens http://gcc.godbolt.org/ wirklich gut geeignet. Wer dort allerdings den neueren avr-gcc (> 6.2) drin haben möchte, muss sich das lokal aufsetzen. VG
daher kann es gut sein, dass der Compiler es doch nicht ohne weiteres frisst. Die Info war aus dem GCC Bugzilla: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=49171#c13 Bei GCC Version 4.7 funktioniert es aber noch reibungslos bei mir. Ist aber zugegebenermaßen auch hoffnungslos veraltet. Eventuell
-
Thread
Optimierung -Os versus -O1
ein, warum -Os pauschal bevorzugt wird. Kennt >jemand den Grund? Es gibt keinen. Wähle die Optimierung die dir am besten passt.
Unterprogrammen nennt sich "Code Factoring" oder beim Keil C51 "Common Block Subroutines". Der GCC macht kein Code Factoring (und wenn doch, gäbe es ganz sicher eine Option, um es unabhängig von anderen Optimierungen abzuschalten). Es gab zwar vor vielen Jahren einen Anlauf in diese Richtung, die
-
Thread
AVR und C++ - ein Versuch
volatile uint8_t port; const uint8_t pin; }; [/c] Wie sich heraus stellte, kann der avr-gcc in Version 4.8.1 die Optimierungen der PC-Variante gleicher Version noch nicht. Es wird also noch eine Weile dauern, bis man die Tips aus dem Video auch umsetzen kann. Die Klasse mit dem Zeiger braucht
with-plugin-ld=ld.gold --with-system-zlib --with-isl --enable-gnu-indirect-function Thread model: single gcc version 6.2.0 (GCC) [/code]
-
Thread
C-Frage zu einem Warning in einer if-Anweisung
nicht unbedingt offensichtlich), daß sich Zeiger überlappen können. Das verhindert bessere Optimierungen, weil der Compiler dereferenzierte Werte nicht in Registern halten, sondern immer aufs Neue lesen muß. Leider sind nicht alle gcc Versionen mit einer gleich guten Erkennung gesegnet, wann das
ein Aliasing zu übersehen (insbesondere bei Code für performante De/Serialisierung) ist hoch. Und GCC warnt quasi nur bei den (offensichtlichen) Fällen, wo es keine Probleme gibt. Die wirklichen Probleme sieht er aber nicht, wie auch. Mein Empfehlung: Bei Optimierungen (-O2 und mehr) immer -fno-strict-aliasing
-
Thread
Timer Interrupt STM32F103
also LEDS usw alles raus. Du kannst das im Debugger gut sehen. Ich arbeite mit Embitz 1.0 und dem GCC. Ich empfehle Dir den Code erstmal mit O0 zu kompilieren und dann schrittweise zu optimieren. In meiner Firma sind Optimierungen per Coding Richtlinien ganz verboten und das aus gutem Grund. Ich
Diesen Zirkus hatte ich auch mal. Es lag letztlich daran, dass ich mit > den Optimierungsstufen des GCC Murks gebaut hatte. Schaltete ich die > alle ab lief es wieder. Das liegt in 99% der Fälle nicht an den Optimierungsstufen, sondern an Fehlern im Quelltext. Die Lösung ist dann nicht, die Optimierung
-
Thread
AVR als EPROM benutzen (C-Optimierung)
[/c] Nur eigentlich wollte ich es ohne asm machen. Jemand eine Idee wie ich den C-Compiler (gcc) dazu bekomme es ohne die unnötigen OR zu machen? Mit nem Union wirds noch 3 Takt länger...
Man kann sich im Compiler-Explorer den generierten Code sofort ansehen: http://gcc.godbolt.org/ Leider unterstützt der Compiler-Explorer nur gcc-4.5.3 für den AVR, für die IA32/IA64 bis zur aktuellen Version 6.2. Ich kann eigentlich jedem nur empfehlen, sich das mal anzusehen
-
Thread
for(;;) bedeutung?
Geschwindigkeitsvorteil in manchen Fällen keinen Unterschied zum Bibliotheks-printf merkt. 2. Der GCC macht zwar kleinere Optimierungen, indem er, wo dies möglich ist, den printf durch einen putchar- oder puts-Aufruf ersetzt, eine Optimierung in Anbhängigkeit von den Argumenttypen ist aber (
Compiler muß das selber handhaben - SELBER! verstehst du das? Du weißt aber, dass er das im Falle von GCC auch tut? Hier eine Liste der im Compiler eingebauten Standardfunktionen: https://gcc.gnu.org/onlinedocs/gcc-6.2.0/gcc/Other-Builtins.html#Other-Builtins Soviel dazu, sich erstmal zu informieren.
-
Thread
C code UART Atmega und Optimierung
Hallo Leute, habe für einen ATMega folgenden Code erstellt, kann ich da noch was optimieren? ich bin leider Anfänger in Sachen C Programmierung und wollte jetzt etwas Hilfe. Vielleicht lässt sich da noch was verbessern... [c] #define FOSC 16000000 #define F_CPU FOSC #define BAUD 9600 #define MYUBRR FOSC/16/BAUD-1 #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> #include <string.h> #define UART_MAXSTRLEN 32 volatile uint8_t uart_str_complete = 0; volatile uint8_t uart_str_count = 0; volatile char uart_string[UART_MAXSTRLEN + 1]
-
Thread
STM32F7 GCC Speicherzugriff Optimierung
Hallo, Ich spiele grade an einem einfachen Ringbuffer auf einem STM32F7 rum. Hierbei habe ich festgestellt das der Mikrocontroller ein enorm hohen Teil (ca 50%) meiner "Rechenzeit" mit dem auslesen aus dem Buffer beschäftigt ist. Die aufzurufende Funktion gibt einen wert aus mit einem delay zurück und sieht folgendermaßen aus: #define BUFFER_SIZE 11499 float RingBufferDelay(int delay) { int offset = 0; if (delay< 0) offset = buffer.write + delay- 1; else offset = buffer.write - delay- 1; while (offset < 0) offset += BUFFER_SIZE; return data[channel][offset]