-
Thread
MINOS - Minos Is No Operating System
while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL); [/c] In nicc.c gefallen gcc einige "sprintf" nicht: gcc nimmt an, dass sprintf 34 bytes in den 33 bytes großen buffer schreibt. Man könnte nun einfach [c]unsigned char varname[MAX_VARIABLE_NAME_LEN + 2];[/c] schreiben, aber
einfach > unsigned char varname[MAX_VARIABLE_NAME_LEN + 2]; > > schreiben, aber evtl. irrt hier der gcc. Nein, der gcc irrt nicht. Korrekt wäre: [c] char varname[MAX_FUNCTION_NAME_LEN + MAX_VARIABLE_NAME_LEN + 2]; [/c] Begründung: Durch das Format "%s.%s" benötigt der String varname insgesamt
-
Thread
Modulo in C richtig
void) { int counter = 337; counter = counter++ % 10; return 0; } [/c] [pre] $ gcc -std=c99 -Wall -Wextra -o main main.c main.c: In function 'main': main.c:8:13: warning: operation on 'counter' may be undefined [-Wsequence-point] counter = counter++ % 10; ~~~~~~~~^~
void) { int counter = 337; counter = ++counter % 10; return 0; } [/c] [pre] $ gcc -std=c99 -Wall -Wextra -o main main.c main.c: In function 'main': main.c:8:13: warning: operation on 'counter' may be undefined [-Wsequence-point] counter = ++counter % 10; ~~~~~~~~^~
-
Thread
ATSAME54 bleibt in der startup_same54.c hängen
Aber das kann nicht das Problem sein, ist bei dir ja wirlich nur ein Standard-GCC-Projekt, da ist ja von dir gar nichts verändert... Versuch mal das hier:
durch... Da gibt es z.B. den Unterschied: -> .pfnNMI_Handler = (void*) NMI_Handler (bei dir im GCC Projekt) -> .pfnNonMaskableInt_Handler = (void*) NonMaskableInt_Handler usw. Irgendwie hört sich das an, als würde da Grundsätzlich etwas falsch laufen.
-
Thread
Dekrementieren vs. Subtrahieren (n-- vs n-1)
funktioniert einwandfrei. Warum denn das?! (die Funktion bekommt nur positive Zahlen übergeben) (GCC-Compiler)
einfache Schleife daraus, welche auch keinen Stack Overflow auslösen kann. Tatsächlich ist der GCC sogar schlau genug das für beide Varianten zu machen.
-
Thread
uC für 0,20€ CH552 / CH554 von WCH Billig Micro mit USB Funktion, Chip vorstellung
LGT8FX8D MD-328D In wie weit das Kopien sind, mag ich nicht beurteilen wollen. Aber der AVR-GCC kompiliert dafür.
work after downloading. The original hex file does download correctly. BTW I haven't used SDCC or GCC before so I am a novice here. Ray
-
Thread
Probleme beim Debuggen mit SW4STM32 und und F7Disco
du? Liest du eigentlich die Postings? Bei deinem ersten Versuch übersahst du, dass ich die Optimierungen ausgeschaltet habe, und schlägst vor die Optimierungen auszuschalten. Nun fragst du nach der Software, steht auch im Eröffnungspost, SW4STM32. Quelltext bringt auch nix, weil es Quelltextunabhängig
Semihosting nichts anfangen > kannst. BTW was bitte hat Kenntniss über die Einstellung der Optimierungen mit Semihosting zu tun?
-
Thread
uC Aufhängung technisch möglich?
ich nie ausprobiert, was > die in einem AVR-Programm veranstalten. Also bei mir meldet der AVR-GCC (hier in Version 4.8.1) einen illegalen OpCode für die MCU (Fehler wird geworfen) ;)
Suchst du eine Fehlerursache, oder eine Entschuldigung? Im ersten Fall lässt sich durch EMV-Optimierung noch das eine, oder andere erreichen.
-
Thread
PID-Regler: Wie schnell ist schnell genug?
Routine nochmal auf zwei anderen Boards laufen lassen. [code] STM32L031 @ 32 MHz (Cortex-M0+) gcc 6.3.1 -Os: 38,6 µs gcc 6.3.1 -O3: 39,5 µs gcc 7.2.1 -Os: 39,3 µs gcc 7.2.1 -O3: 39,8 µs Keil: 24,3 µs LPC1549 @ 72 MHz (Cortex-M3) gcc 7.2.1 -0s: 19,3 µs gcc 7.2.1 -O3: 9,5 µs [/code]
Die Keil Version ist mit dem mbed Online erstllt, der ist beim M0 immer noch deutlich besser als der gcc. Ist jetzt nicht ganz das PID Thema aber man sieht das die Compiler Optimierung hier auch noch eine Menge ausmachen kann. Die Testroutine ist die PID Funktion aus dem ersten Post die 1000x aufgerufen
-
Thread
Geteilt Rechnung vereinfachen in C
Optimizer nicht aktiv werden darf? Ansonsten kann man sehr bequem für Teile des Programms die Optimierung verbieten oder umschalten. #pragma GCC push_options #pragma GCC optimize ("O0") hier dein kritischer Code #pragma GCC pop_options
andere Konstante">>"noch eine andere Konstante". Das ganze nennt sich Barrett-Verfahren und wird vom GCC in der Tat vollautomatisch eingesetzt, sobald Optimierungen aktiv sind und es der Wertebereich erlaubt. Für deine Problematik, d.h. "Konstante"/"Variable" existiert meines Wissens nach kein derartiges
-
Thread
gcc Division negative int32 Zahl durch unsigned int32 ->Käse..
Holm T. schrieb im Beitrag #5607286: > auch wenn der gcc (5.4.0) nicht warnt. Mal mit -Wconversion kompiliert?
richtig gemacht. C++ von Borland macht es auch richtig. Ist wahrscheinlich wieder mal ein Feature von GCC.
-
Thread
Arduino: Größe eines Pointers
Joachim B. schrieb im Beitrag #5605937: > habe gerade mal geschaut: > "A little more on the issue: GCC pointers - of all types - are only > 16-bits in length. ..." Aufpassen! Das ist eine Aussage über *diese eine* Implementierung mit dem Namen avr-gcc. Es ist keine allgemeingültige Aussage über gcc
support embedded processors" http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1275.pdf Beim AVR-GCC gibt es konform dazu 24-Bit Pointer, die Daten in sowohl ROM als auch RAM adressieren können. Ist natürlich zur Laufzeit etwas aufwändiger. https://gcc.gnu.org/onlinedocs/gcc-8.2.0/gcc/Named-Address-Spaces.html
-
Thread
Unkomplizierte Berechnung oder doch schon Gleitkomma Berechnung?
optimieren. Oft ist es sogar besser, notfalls auf einen schnelleren µC zu wechseln, als Zeit mit Code-Optimierung zu vergeuden.
https://www.mikrocontroller.net/articles/AVR-GCC-Codeoptimierung#Prinzipien_der_Optimierung
-
Thread
STM32 Locking in C
Umsetzung ineffizient. W.S. schrieb im Beitrag #5604389: > da macht man so etwas per SVC. Ach ja, GCC-Leute kennen das ja nicht Gerade heute habe ich einen syscall-Mechanismus per SVC mit dem GCC implementiert. Nur weil du das nicht hinbekommst heißt das nicht dass das nicht geht. Wie das geht findet
32-Bit Zugriffe Atomar. Das _Atomic ersetzt aber auch auf 32-Bittern das Assembler-Speicher-Optimierungs-Barrier.
-
Artikel
PIC C-Compilervergleich
Unterstützt: PIC10/12/16 Preis (Standard/Pro): 495$ / 1195$ Beschränkung der Freiversion: Begrenzte Code-Optimierung, 45-Tage PRO Version Hi-Tech C for PIC18. Version: 9.80, MPLAB X 1.51 Unterstützt: PIC10/12/16/18 Preis (Pro): 1195$ Beschränkung der Freiversion: Begrenzte Code-Optimierung, 45-Tage PRO Version
X 2.05 Unterstützt: PIC24/dsPIC Preis (Pro): 995$ Beschränkung der Freiversion: Begrenzte Code-Optimierung, 60-Tage PRO Version Hi-Tech C for PIC24 & dsPIC. Version: 9.62, MPLAB X 1.51 Unterstützt: PIC24/dsPIC Preis (Standard): 895$ Beschränkung der Freiversion: Begrenzte Code-Optimierung, 45-Tage Standard
-
Thread
Arduino: Ist boolean intern als Bit oder byte (char) organisiert?
Der avr-gcc Compiler, den Arduino verwendet, belegt ein ganzes Byte für boolean Werte.
. Schuld ist also nicht der gcc, sondern das vieler Hinsicht unsägliche Grundkonzept von C. Auf der anderen Seite bemüht sich der gcc allerdings durchaus, mit Bitoperationen zu arbeiten, wenn das Zielsystem solche anbietet. Der
-
Thread
Padauk MCU für 0.038 USD aus Taiwan
Padauk sucht einen Compiler-Entwickler für die GCC-Toolchain, vllt. gibt es dann in Zukunft Konkurrenz zum SDCC :D https://www.104.com.tw/job/54bzn
. Jetzt müssen sie nachlegen :) Anscheinend geht es aber nicht spezifisch um GCC, das war wahrscheinlich nur als Beispiel genannt. (sofern man Google-Translate hier trauen kann)
-
Thread
AVR GCC: Problem mit Variable in Main und ISR
keine ISR's, die sind gewissermaßen ein "Hack". Daher geht bei der automatischen Optimierung gerne mal was verloren, was für ISR's wichtig wäre, nämlich diese Zuweisung. Mit "volatile" wird diese Optimierung verboten. Globale Variablen landen beim GCC übrigens immer im RAM, nicht (nur)
Register-Zuordnungen sind aber tatsächlich ziemlich > unüblich. Kennst du einen Compiler der so etwas macht? Der gcc kann es: https://gcc.gnu.org/onlinedocs/gcc-4.7.0/gcc/Global-Reg-Vars.html Ist aber schon ein exotisches Szenario.
-
Thread
Arduino: Typecast von float nach unsigned int Gesperrt
vielleicht hängt das Ergebnis von der Mondphase ab, vielleicht hängt es von den Compiler-Einstellungen (Optimierung!) und -Version ab. Man sollte sich also keinesfalls darauf verlassen und vorher den Bereich prüfen. Nutzt man den AVR-GCC mit avr-libc und avr-libm, was bei den AVR-Arduinos wohl der Fall ist
-
Thread
Gibt es einen Formelparser für C (Arduino)
Beitrag #5570538: > TC-EXE ist gerade mal 1234 KB > groß. Kennt es auch all die hochkomplexen Optimierungs-Algorithmen, welche der bei Arduino integrierte GCC unterstützt? Alle aktuellen Sprachstandards (C++17, C11)? Unterstützt die Plattformen AVR und Cortex-M? Liefert Bibliotheken und Beispiele für
Dr. Sommer schrieb im Beitrag #5570544: > Kennt es auch all die hochkomplexen Optimierungs-Algorithmen, welche der > bei Arduino integrierte GCC unterstützt? Alle aktuellen Sprachstandards > (C++17, C11)? Unterstützt die Plattformen AVR und Cortex-M? Liefert > Bibliotheken und Beispiele
-
Thread
C Anfängerfrage zu Pointern in Funktionen
schade das der gcc da nicht warnt, der ist ja schon sehr pedantisch was mögliche Fehler angeht. Aber die Verwendung des Wertes antelle des Pointers wird in den meisten Fällen zum Fehler führen sodass man eine falsche
gleiche Weise implementiert wie Zeiger - indem sie die Adresse des Zielobjekts enthalten. Die Optimierung schmeißt in deinem Programm dann sowohl für Zeiger als auch für Referenzen die zusätzliche Speicherung der Adresse raus. Arduino Fanboy D. schrieb im Beitrag #5566020: > Da empfinde ich deine
-
Thread
char Array für ultoa()
puts(ptr); puts(0); puts(NULL); } [/c] Kein Abbruch: [pre] stefan@stefanspc:~$ gcc -std=c99 test.c stefan@stefanspc:~$ [/pre] Zweiter Versuch: [pre] stefan@stefanspc:~$ gcc -std=c99 -Wall test.c test.c: In function ‘main’: test.c:7:4: warning: null argument where non-null
Hier: https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html mal die Option -fdelete-null-pointer-checks (besser mehrfach) studieren (die Auswirkungen sind - bzw. waren zumindest mir - nicht auf den ersten Blick
-
Thread
Welche Programmiersprache soll ich lernen?
unbekannten Programmiersprache anfangen wollen. In der zweiten Zeile steht dann: "It uses the GCC AVR tool chain and will be compatible with GCC regarding calling conventions etc." Aus offensichtlich pragmatischen Gründen orientiert sich FPC an der GCC-AVR-Tool-Chain. Dagegen ist ja im Prinzip nichts zu sagen, aber dann kann ich doch genau so gut direkt bei *allen* GCC-Werkzeugen, einschließlich des C-Compilers, bleiben. rhf P.S.: Die Art und Weise des "Inline-Assemblings" finde ich allerdings deutlich schöner gelöst als im GCC-C-Compiler. http://wiki.freepascal.org
-
Thread
/var/log/debug für Joachim B.
https://forum-raspberrypi.de/forum/thread/4046-var-log-in-eine-art-ramdisk-auslagern-weitere-optimierungen-bezgl-logs/
rücken können. Es ist im Anhang zu finden. Um es zu verwenden muss man erst libfuse-dev, libfuse2 und gcc installieren. Dann kompilieren: [code] gcc -std=c11 -Wall -Wextra -pedantic -Werror -lfuse src/redirfs.c -o redirfs [/code] Danach kann man es so verwenden: Nach /dev/null: [code] ./redirfs
-
Thread
OOP SourceCode
du musst dich mit virtual tables rumschlagen, in denen Einsprungadressen verwaltet werden. Der GCC ist open source, schau doch einfach mal da rein, welchen Aufwand es bedeudet, das umzusetzen. BTW: Was meinst du mit JSON-Syntax? JSON ist ein Dateiformat zum Austausch von Daten, das hat mit
> Crossover. Der parst den Source, teilt das in Blöcke und Abschnitte auf (und kann damit optimierungen machen), und setzt das ganze "statisch" und Wörterbuch-Mäßig für die Zielhardware und dessen Register und (Stack) Eigenheiten um, und spuckt es letztendlich Binary aus. Also mal ganz ohne fremde
-
Artikel
AVR Checkliste
: die Blinkfrequenz ist dann achtmal langsamer. Allerdings muss man auch hier aufpassen. Siehe AVR-GCC-Tutorial: Warteschleifen. Erscheinen im Terminalprogramm kryptische Zeichen anstatt ordentlichen Buchstaben (z. B. ü statt A), liegt das zu 99,9% an einer falsch eingestellten/erzeugten Baudrate im
Bei der Initialisierung der UART beachtet, wenn das für den verwendeten AVR notwendig ist, siehe AVR-GCC-Tutorial/Der UART: Die UART-Register. In den Tutorials für Assembler und GCC wird die Nutzung recht gut erklärt und mit Beispielen erläutert. Testprogramm. Im folgenden Programm muss angepasst werden
-
Thread
stm32f103-bluepill-peripherie
Danke für eure Ausschweife, das löst aber mein Problem nicht. Kann von euch einer mit gcc arm inline Assembler in C programmieren? Eine schreibe und eine lese Routine für die stm32 Register. Für so etwas änliches wie ein HEX-Dumper mit der Möglichkeit der Änderung.
ich mich freuen wenn Carl zeigt, wie man das mit dem inline Assembler richtig macht, ohne weg Optimierung. Leider ist meine Begrifflichkeit nicht mehr so gut wie früher. Beim lesen der GCC inline Assembler Anleitung fing sich bei mir irgendwann der Kopf zu drehen an. Nochmals Danke an alle
-
Thread
Maximale Quellcodedateigröße?
#5885919: > Da C Compiler grottig langsam sind Ca. 14000 Zeilen/s (clang -O2) bzw. 12500 Zeilen/s (gcc -O2) (mit -O3 kaum langsamer) für ein reales Beispiel (epan/proto.c aus Wireshark) auf einem mäßig schnellen Laptop würde ich jetzt nicht als "grottig langsam" bezeichnen. Welchen Compiler, der so
richtig zu interpretieren, zum anderen haben die Meldungen (zuerst bei Clang, dann denn auch bei GCC) in des letzten Jahren sehr viel an Aussagekraft gewonnen. Vielleicht hast du von dieser ENtwicklung nur noch nichts mitbekommen.
-
Thread
neuen Datentyp (10-bit) zur Speicheroptimierung erstellen
nicht mal 8 Bit um mehr als 1 Bit am Stück schieben. Er kann auch 4 Bit und 8 Bit am Stück und GCC weiss das. ;-) Solange die Shiftcount konstant ist, und der Datentyp nicht zu breit, gibt GCC sich respektable Mühe, effizienten Code auszuwerfen.
A. K. schrieb im Beitrag #5517177: > GCCs Optimierung der Shifts für AVR betrifft 16-Bit Daten. Das ist > hierfür breit genug. > > Ein besserer µC ist dafür freilich von Vorteil. Wenn der Dividieren > kann, dann geht auch die erwähnte und sparsamste
-
Thread
Programmlogik bei Einsatz von zwei PCF8574
produzieren, die man einfach hätte vermeiden können. https://www.mikrocontroller.net/articles/AVR-GCC-Codeoptimierung#Prinzipien_der_Optimierung >Nachher steht man da und sucht nach dem Übeltäter und sieht den Wald vor >lauter Bäumen nicht mehr. Ich sag nur Division mit Variablen :-( Auch die
-
Thread
SAMD21 "startet" nicht mehr
Kai P. schrieb im Beitrag #5498531: > Debuggen > klappt nur sinnvoll ohne Optimierung: -O0 Moderne Compiler kennen -Og (Optimierung für Debugging). Bei -O3 oder -Os würde ich mir vorher den Assembler Output anschauen (-save-temps=obj -fverbose-asm) - ansonsten kann man den oft
Hey Jim, Danke für den Hinweis auf "-Og". Der GCC unterstützt das ab Version 4.8, also 2013. So lange hab ich schon nicht mehr ins GCC Manual geschaut... Fragt sich, warum Atmel Studio in der Konfiguration Debug den Default immer noch auf -O1 hat
-
Thread
xmega Taktfrequenz
schrieb im Beitrag #5494536: > Warum habe ich solch lange Schaltzeiten bei 32MHz? Welchen Optimierungs-Level hast Du aktiviert? Poste doch bitte auch Deinen Compiler-Aufruf. Grüßle Volker Nachtrag: Ohne Optimierung funktioniert der Zugriff auf das geschützte Register für die Taktumstellung nicht, wird also aktiviert sein. Mein avr-gcc erzeugt für die Schleife folgenden Code .L3: std Z+5,r24 std Z+6,r24 rjmp .L3 Wobei jeder Assembler-Befehl 2 Taktzyklen benötigt und die Schleife somit 187,5ns benötigt
-
Thread
"State Machines": Anzahl States minimieren oder maximieren?
> SomethingElse = 20 > } State_t Mit solchen Lücken, macht man sich fix die Switch/Case Optimierungen kaputt. Es degeneriert zu einer if Kaskade.
Fanboy D. schrieb im Beitrag #5494611: > Mit solchen Lücken, macht man sich fix die Switch/Case Optimierungen > kaputt. Es degeneriert zu einer if Kaskade. Zeig mir doch mal bitte 'nen Beispiel dafür.
-
Thread
Warum Pascal/Delphi/Lazarus oft unbeliebt?
sich macht. Man kann C wie Pascal Statement für Statement übersetzen. Statement-übergreifende Optimierung darf man dann aber nicht erwarten. Compiler wie GCC und LLVM sind auf hochoptimierten Code konzipiert. Compiler speziell für Mikrocontroller implementieren das nicht in gleichem Umfang.
noch arg in den Kinderschuhen. So ist der erzeugte Assemblercode meist nicht viel besser als der vom GCC mit komplett ausgeschalteter Optimierung (-O0). Am auffälligsten hierbei ist, dass Variablen aus dem RAM oft unnötigerweise mehrmals kurz hintereinander in Register geladen werden. Vielleicht hat
-
Thread
IDE mit Fokus auf Assembler für Umsteiger AVR -> STM32
benötigt aber 3 um zu reagieren. Möchte mal sehen, ob du das genauso gut optimieren kannst wie der GCC ;) mfg
ist. Hier hat der gcc noch sehr viel Luft, um wirklich brauchbar zu werden. Andere können das sehr viel besser... Das Problem beim gcc ist wohl: die Entwickler wollen dies offensichtlich garnicht. Nur verwichste Ideologen
-
Thread
Arduino Präprozessor Pin Change Interrupt und Version automatisch zuweisen
www.microchip.com/webdoc/avrassembler/avrassembler.wb_preprocessor.html Options for the C compiler avr-gcc Machine-specific options for the AVR http://www.nongnu.org/avr-libc/user-manual/using_tools.html http://public.beuth-hochschule.de/~kempfer/skript_c/Kap10.html Mit "trickreich
irgendwie kann. Ansonsten wäre das nun ein guter Grund, mal Linux auszuprobieren. Dort fühlt sich gcc sowieso mehr zuhause und läuft auch viel schneller.
-
Thread
Code unleserlich schreiben um Zeilen zu sparen.
-Bitter gibt. Ich habe meine eigene Realisierung, die bestimmte Optimierungen bzgl. der intern verwendeten DT macht. > Wobei gcc7.3 komplett C++17 kann, man also nicht wirklich Angst vor > Alpha-Versionen haben muß, wenn man ganz up TO Date sein will, > z.B. mit "
MinGW / CygWin hat gcc-8.1 (C++2a)
-
Thread
MXE11 - Unix auf dem Mikrocontroller
C Compiler der recht schnell (und überhaupt) auf ner 4MHz CPU läuft wird ja auchnoch gesucht. Den GCC 4 auf MIPS Compilen und laufen lassen wird sicher seeeeehr schnell ;)
SPC56EL, die STM32-Versionen kamen erst später dazu. Deswegen gibt es für den SPC auch eine ASM-Optimierung, die immerhin fast doppelt so schnell ist wie die Variante in reinem C. > Wie schafft es denn mini Unix ohne MMU Prozesse nachzuladen und zum > laufen zu bringen? Swapping, wie halt bei
-
Thread
AVR-C Anweisungsreihenfolge NICHT dem Compiler überlassen..
en.cppreference.com/w/c/atomic http://en.cppreference.com/w/c/atomic/atomic_thread_fence https://gcc.gnu.org/onlinedocs/gcc/Extended-Asm.html
Output-Parameter gelten immer als geclobbert (werden logischerweise immer überschrieben). Lies einfach mal die gcc-Doku zum Inline-Assembler.
-
Thread
switch(Funktion()) möglich?
#5419713: > Keine Ahnung, woher ich das habe. Soso. > Es gilt jedenfalls nicht nur für den > gcc, soviel ist sicher. Überhaupt nichts ist sicher. Das ist _kein_ garantiertes Verhalten. Auch der gcc generiert if-else-if für switch, wenn er sich dazu entscheidet.
> baue und nicht einen WinAvr2010 benutze? Nein, denke genaues Lesen ist angesagt: https://gcc.gnu.org/onlinedocs/gcc/Labels-as-Values.html
-
Thread
Devision und Restbildung
Stelle korrekt angezeigt. Die 1. bis 3. Stelle verändert sich nicht. Was mach ich falsch? C, AVR GCC Bert
Rückgabewert zum C89-Standard gehört, ist das auch kein unportables Gefrickel. Nachtrag: Hab dem GCC mal wieder zu wenig zugetraut. Mit Optimierung macht er dasselbe aus mV/1000, mV%1000 ... also lohnt es nicht, umständlich mit der "div"-Funktion zu hantieren
-
Thread
Bitstatusabfrage Macro - ist das sicher?
und Variante 1 selber auf > Variante 2 umschreiben, aber darauf würde ich mich nicht verlassen. GCC/amd64 macht das bei eingeschalteter Optimierung. Aber auch ich würde das lieber bleiben lassen. Bei GCC/AVR könnte das bei abgeschalteter Optimierung auf ziemlich schaurigen Code rauslaufen. Das
Variante 1 selber auf >> Variante 2 umschreiben, aber darauf würde ich mich nicht verlassen. > > GCC/amd64 macht das bei eingeschalteter Optimierung. Aber auch ich würde > das lieber bleiben lassen. Bei GCC/AVR könnte das bei abgeschalteter > Optimierung auf ziemlich schaurigen Code rauslaufen.
-
Thread
8h Timer mit attiny85 - Genauigkeit ohne Quarz
Beitrag #5405579: > Der Compiler IST > kostenlos! Nur gibt es damit halt keine Optionen zur Code-Optimierung. Was nutzt Compiler ohne Code-Optimierung? Das ist Müll.
verfügbarem Flash und RAM. Müll sicher nicht aber es nervt/ärgert einen schon. Die haben da den GCC ja auch nur etwas(?) modifiziert. Wirklich gebraucht, habe ich die volle Optimierung nur, wenn ich einen PIC16F84 mit C vergewaltigt habe. :)
-
Thread
Warum wird aus einem right-shift eines uint8_t ein 16-Bit arithm.-shift beim avr-gcc
steht, dass eine Promotion durchgeführt werden muss. Also haben wir hier eine fehlschlagende Optimierung. Da es bei den älteren gcc-Versionen geht, ist es wohl ein Regression.
Doch, ich werde den Bug eintragen ;-) Aber: für den avr-g++ und nicht für den avr-gcc. Denn: Asche auf mein Haupt, ich habe das Beispiel im Language-Mode C++ übersetzt. Übersetzt man es im Language-Mode C, dann findet die Optimierung auch statt. Nun: DAS ist echt merkwürdig.
-
Thread
Programmablauf simulieren, vorm Compilieren
du sie mit Add Watch ins Watch-Fenster bringst. Hilfreich ist es ggf., die Übersetzung ohne Optimierung durchzuführen, sonst sind manche von dir definierte Variablen gar nicht vorhanden: wegoptimiert.
sie mit Add Watch ins Watch-Fenster bringst. > > Hilfreich ist es ggf., die Übersetzung ohne Optimierung durchzuführen, > sonst sind manche von dir definierte Variablen gar nicht vorhanden: > wegoptimiert. Da habe ich mich missverständlich ausgedrückt - meinte; mitten im Programmschreiben, mal eben
-
Thread
[AVR GCC] "Speicherfresser" finden?
https://www.mikrocontroller.net/articles/AVR-GCC-Codeoptimierung
Falles du es nicht eh schon machst. Den Compiler auf Codegröße optimieren lassen (gcc -Os) Details: https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html
-
Thread
n++ hier oder dort?
Hängt das Ergebnis beim gcc von der Optimierungsstufe ab?
z.B. für eine andere CPU eine andere Reihenfolge erzeugen, weil der Optimierer dort anders arbeitet. gcc hat z.B. Optimierungen die auf Heuristiken beruhen (-fguess-branch-probability) und bei profile-guided Optimierung ist das Ergebnis im Grunde zufällig, wenn es von nicht vollständig reproduzierbaren
-
Thread
static const PROGMEM in eigenes File auslagern
, also wohl GCC und damit auch LTO. (GCC-Versionen ohn LTO gab es natürlich auch, aber die haben eher ein H-Kennzeichen) > Mal ganz abgesehen davon ist es auch nicht "dreckig", wenn man Dateien > inkludiert, die
Compilers oder zusätzlicher Anweisungen an diesen (PROGMEM). Ich kann mir vorstellen, dass ganz ohne Optimierung das knallhart als Variable abgelegt wird. In C++ ist const ja etwas anders, als in C. Vermutlich macht hier aber bereits der gcc einen Strich durch die Rechnung. Aber nur darum geht es. Const
-
Thread
AVR Inline Assembler - Problem mit Funktionsparameter
das jemand? Alternativ schaue ich mir das die Tage mal im Disassembler an). Allerdings ist diese Optimierung fürs Debugging schwierig... Daher will ich solche Blöcke durch Inline Assembler ersetzen. Von Assembler habe ich leider recht wenig Ahnung und vom C-Compiler noch weniger... Bisher habe ich mir
); 1. Fehler: R30 wird gesetzt, ohne dass der entsprechende Seiteneffekt beschrieben ist. GCC geht also davon aus, dass sich der Wert in R30 nicht ändert und könnte einen Wert darin gespreichert haben, der durch das asm zerstört wird. 2. Fehler: R30 wird im 1. asm nicht verwendet, GCC könnte
-
Thread
Warum übersetzt GCC-Compiler so unterschiedlich?
freq_zaehler ist unsigned long, phase_index ist unsigned int, Atmel AVR 8-bit GNU Toolchain 3.6.0.1734 (avr-gcc-5.4.0.exe), AVR Studio 4.19 Vielen Dank im voraus für eine Erklärung.
schrieb im Beitrag #5375814: > 0x00008000 Das ist ein long (32bit) (1<<15) ist ein int. Optimierungen sind eingeschaltet?
-
Thread
C++ Librarysammlung?
jede einzelne Version inkompatibel ist, ja. Die Änderung an std::string ist C++ selbst Schuld, nicht GCC/libstdc++.
einzelne Version inkompatibel ist, ja. Die Änderung an > std::string ist C++ selbst Schuld, nicht GCC/libstdc++. Da stimme ich auch zu.