-
Thread
Alignment des ARM7
Bitte mehr Infos: Welcher Compiler, welche Optimierung (-O), relevante Quelltextausschnitte, Testläufe
Typen uint8_t, uint16_t und uint32_t aus stdint.h verwenden. Zum Thema Attribute http://gcc.gnu.org/onlinedocs/gcc-4.1.1/gcc/Type-Attributes.html#Type-Attributes
-
Thread
ISR viel zu mollig
schrieb im Beitrag #2920217: > Was liefert den der Compiler mit aktivierten > Geschwindigkeits-Optimierungen Pro- und Epilog normaler ISRs sichern / restaurieren /immer/ R0, R1 und SREG, unabhängig vom Optimierungsgrad oder sonstigen Optionen, siehe http://gcc.gnu.org/PR20296 Bjorn Haase dazu
back-end does not easily permit to improve this case Zu Deutsch: Es ist sehr aufwändig, diese Optimierung in avr-gcc einzubauen. I.w. bedeutet es, einen Großteil des avr-Backends von GCC neu zu schreiben, nur um eine handvoll Instruktionen zu sparen. Wenn du dir anschaust, wieviel Entwickler dazu
-
Thread
Arduino const struct
er dein struct-Konstrukt so weit optimieren, dass derselbe Code rauskommt. Muss er aber nicht. gcc macht's so. Allerdings nur, wenn erstens die Optimierung auf mindestens -O1 eingestellt ist und 2. er bei jeder Verwendung die gesamte struct inclusive ihrer Initialisierung zu sehen bekommt. Ich
das nur mit constexpr einigermassen > gesichert. Meiner bescheidenen Erfahrung nach macht der gcc das mit const sehr zuverlässig. Oliver
-
Thread
Atiny2313 Problem mit AVR Studio?
Ich hab es grad mal bei mir durchgejagt: Ohne Optimierung: 3932 Bytes Code (Speicher zu 192% gefüllt) Mit -Os: 242 Bytes (11,8% voll), Größe des Hex-Files: < 1KB Also: Schalte die Optimierung ein und es sollte gehen.
ok, Danke lag wohl an der Optimierung ;-)
-
Thread
WinAVR auch ohne Union optimierter Code möglich?
asm-Sequenzen. Zudem ein Bugreport für die neueste GCC-Version (4.5.2 bzw. 4.6.0) machen, damit diese Optimierung vielleicht irgendwann Teil von avr-gcc wird. Innerhalb von avr-gcc ist das Problem, daß es keinen Königsweg betreffs Subreg-Lowering gibt
und je nach Verschalterung sieht ein Backend andere Pattern und ist nicht auf deren Verarbeitung/Optimierung vorbereitet -- zumindest ist's im avr-Backend so.
-
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
Wieso funktionieren Decompiler immer deutlich schlechter als Compiler?
W.S. schrieb im Beitrag #5991481: > OK, die Programmierer des GCC waren bislang auch zu blöd, zu kapieren, > wozu das CS:IP-Format und der dazugehörige Blocktyp im .hex eigentlich > gedacht ist Der GCC arbeitet überhaupt nicht mit dem Hex Format. Wenn schon
dieser $10-LCD-„Scopes“ mit einem ATmega64 nach C zurückübersetzt. Das ging, weil der ohne Optimierung übersetzt war. Da war es tatsächlich möglich, mit etwas trial und error einen C-Code zu schreiben, der zu identischem Assembler-Code kompilierte. gcc erzeugt ohne Optimierung ganz gut erkennbare
-
Thread
Frage zu Programm Optimierung (Größe)
von mir: http://pastebin.com/BaS1BAEE Und die LCD Lib von hier. Im Makefile habe ich auch die Optimierung auf Größe gestellt, aber erhalte wie erwähnt, die 7,3 Kb.... Daher auch meine Frage ob jemand weiß, wie ich das Programm noch optimieren kann. Weil laufen tut es, aber ich finde es doch sehr komisch
Float braucht etwa 1kB. Beim AVR-GCC: double = float Sprintf ist recht teuer und mit float nochmal deutlich teurer. Peter
-
Thread
Vertauschen von drei Variablen
dass der Überlauf niemals stattfindet und den Code denentsprechend optimieren. Aktuell z.B. hat gcc 4.8.0 eine Optimierung, bei der ein SPEC Benchmark wegen undefiniertem Verhalten kaputt geht: http://blog.regehr.org/archives/918
Mac schrieb im Beitrag #3100604: > Aktuell z.B. hat gcc 4.8.0 eine Optimierung, bei der ein SPEC Benchmark > wegen undefiniertem Verhalten kaputt geht: > > http://blog.regehr.org/archives/918 "GCC pre-4.8" - Soweit ich das verstanden habe, hat der
-
Thread
Interupt programmierung eines Atmega8 mit AVR Std. 4.18
Wenn ich das tue,F7 drücken, bekomme ich 3 Fehlermeldungen: c:/winavr-20090313/bin/../lib/gcc/avr/4.3.2/../../../../avr/bin/ld.exe: Warning: size of symbol `runden_nr' changed from 1 in Kreisel-de.o to 2 in kreisel-de-ct.o c:/winavr-20090313/bin/../lib/gcc/avr/4.3.2/../../../../avr/bin/ld.exe
Wie bekomme ich das mit der Optimierung raus?? Und zu Fehler 1 es ist ein unsigned char.
-
Thread
Lauflicht in C
while(1){ for(;;){ loop_until_bit_is_set(UCSRA, UDRE); UDR = 0x41; } } [/c] gcc version 4.1.1, -O0 (optimierung aus) avr-size output mit for-loop: text data bss dec hex 92 0 0 92 5c mit while-loop: text data bss dec
hmmm... interessant. ich hab mit AVR Studio 498 Build und AVR-GCC bei Optimierung -Os der MCU ist ein Mega8; da hab ich (nur durch Änderung der Schleife) 2 Byte einsparen können. Allerdings muss ich dir Recht geben, jetzt gerade ein kleines Stück Code kompiliert
-
Thread
[C-Code Optimierung] RDM responder
Parameters Datenfeld additive Checksumme Es gilt dabei MSB first. Leute, die mir bei der Optimierung helfen, werde ich gern mit als Autor aufführen (wenn gewünscht).
das ein Fehler von mir.) Zum indirekten Zugriff: Ich hatte zuvor mit Pointern gearbeitet, der GCC scheint den jetzigen Zugriff aber lieber zu mögen... (Es sei denn, ich habe Denkfehler gemacht und dadurch Overhead verzapft.) Deinen Link habe ich vor meinem Thread schon durchgearbeitet - er
-
Thread
Assembler Grundlagen (einbinden) (ATxmega128A1 + AVR Studio 5)
jetzt in Assembler programmieren, und > irgendwie in meinen jetzigen C Code einbinden. Bei der GCC Toolchain gibt es dafür das AVR GCC Inline Assembler Cookbook. Dein Vorhaben ist aber weit über Anfängerlevel! An deiner Stelle würde ich unbedingt versuchen das Problem komplett in C in den Griff zu
Das bereits erwähnte AVR GCC Inline Assembler Cookbook erklärt das. Das ist allerdings nicht anfängerfreundlich - es ist halt kein Thema für Anfänger. Es kann helfen, aus zwei Quellen gleichzeitig zu lernen. Im Roboternetz-Wiki
-
Thread
AVR-GCC: Frage zu Constant Folding / Constant propagation
#3247954: > Frage: Kann man sich auf dieses Verhalten verlassen? Der Compiler darf im Rahmen von Optimierung das Ergebnis nur dann ändern, wenn auch ohne Optimierung unspezifizierte oder undefinierte Schritte auftreten. Sind jedoch alle Schritte von der Sprache klar definiert und spezifiziert, dann darf sich das Ergebnis durch die Optimierung nicht verändern.
-
Thread
C32 Compiler für PIC32
können. Nur kann man GCC natürlich auch ohne Microchips Hack verwenden, mit voller Optimierung und völlig legal. Wie das dann allerdings mit Integration in die Entwicklungsumgebung, Debugging und der rechtlichen Seite der Library
Interessant... Hat da jemand Erfahrung ob der GCC mit MPLAB und ICD2/3 problemlos läuft und wie das mit der rechtlichen Seite der Library aussieht? Der GCC Compiler ist kostenlos, oder? Gruß chris
-
Thread
goto verpönt - was dann nehmen?
im Beitrag #4532523: > in ASM umsetzen. Damit gewinnt man > (angesichts der idiotisch miesen Optimierung des AVR-Compilers) mehr. ist das so? hier meinen aber einige assembler Spezis anderes, so schlecht soll der gcc nicht mehr sein! Ich selber staune immer wie gut der gcc optimiert mit -0s
>Heinz L. schrieb: >> in ASM umsetzen. Damit gewinnt man >> (angesichts der idiotisch miesen Optimierung des AVR-Compilers) mehr. >ist das so? Nein. Das ist nur die Meinung eines gesicht, namens- und ahnungslosen Heinz. Das ist modern . . . >Ich selber staune immer wie gut der gcc optimiert
-
Thread
Delay bei ATtiny4
Code nicht optimiere. Aber dadurch braucht PORTB=0x00; auch mehrere Befehle. Wenn ich wieder die Optimierung einstelle, dann wird meine Schleife einfach wegoptimiert...
man diese brainf**ck Architektur abfragen kann... http://distribute.atmel.no/tools/opensource/avr-gcc/gcc-4.5.1/32-gcc-4.5.1-avrtiny10.patch
-
Thread
Zukunft von C# Gesperrt
Berechnung (nicht Ein- und Ausgabe) > viermal so lange gebraucht wie C Die Zeiten waren 10s in C mit gcc gegen etwas über 40s in Java mit Eclipse. Dabei machte es fast keinen Unterschied, ob die Optimierung ein- oder ausgeschaltet war. Mit anderen Suchbereichen habe ich das auch probiert und das Verhältnis
i686-apple-darwin9-gcc-4.0.1 Also anscheinend gcc 4.0.1 JavaSE 1.6.0_29-b11-402 Eclipse Indigo Release 1
-
Thread
RAM-Bankswitching - wie am geschicktesten mit GCC auf AVR?
Ein paarmal schon, erst kam die Idee, dann die Anpassung an den Kontext. Du hast deshalb die Optimierung der Offsetrechnung übersehen ;-). Es gibt keinen Grund (address&0x7FFF) 32bittig zu rechnen.
die Variante über Speicheradressen via union schneller ist, als die geschickte Ausnutzung der Optimierung von Schiebebefehlen. Denn wenn die union im Speicher liegt handelt sie dir einen Stackframe ein. Bei AVRs nicht zu empfehlen. Es hilft allerdings, wenn man vom Sourcecode her weiss, dass avr-gcc
-
Thread
Erweiterte LCD-Ansteuerung Code zu groß!!
Sorry dass ich Frag, aber wie mach ich denn die Optimierung und wo im Programm schreib ich das rein?
> -Os an? Nein aus höchstwahrscheinlich - Ich vermute mal gaanz stark dass er die Optimierungen ausgeschaltet hat. Das ist die einzige Variante bei ders zu groß wird: [code] $ rm *o ; for opt in 0 1 2 3 s ; do for f in *c ; do avr-gcc -Wall -mmcu=atmega8515 -DF_CPU=1000000UL -O$opt -c
-
Thread
Suche Assembler für 32-bit ARM
Da der GCC keinen Binärcode erzeugt, sondern Assembler-Quellcode, wirst du im Gefolge eines auf GCC basierenden Entwicklungsssystems immer auch den passenden Assembler finden.
Einfach die Quelltext-Datei *.S nennen und dem GCC übergeben.
-
Thread
Ideen um CRC-Routine zu beschleunigen? (AVR, gcc)
von Hand in Assembler und optimier die nach bestem Wissen und Gewissen. Dann vergleich mal, was der GCC ausspuckt -- evtl. gibt dir das noch ein paar Anregungen. Wird dann natürlich als Inline-ASM verbaut.
Mach mal ne for-schleife draus und schalt die Optimierung ein, i = 12 würde ich als konstante definieren. dann kann der Compiler da eventuell was besseres draus bauen.
-
Thread
Atmega SPI Geschwindigkeit (Arduino schneller als C?)
ist doch Geschmackssache. Jede hat ihre Vor- und Nachteile. @Leo C. "E:\Atmel Toolchain\AVR8 GCC\Native\3.4.2.939\avr8-gnu-toolchain\bin\avr-gcc.exe" -v Using built-in specs. COLLECT_LTO_WRAPPER=e:/atmel\ toolchain/avr8\ gcc/native/3.4.2.939/avr8-gnu-toolchain/bin/../libexec/gcc/avr/4.7.2/lto-wrapper.exe
schreiben sind. Nur, wenn man 32..128kb mit weiterem sinnvollem Code füllen will, dann ist das via GCC einfacher und schneller. Die Optimierungs-Algorithmen mögen viel simpler sein, aber die Geschwindigkeit und Ausdauer mit der der GCC sie runterspult sind manuell nicht erreichbar. Nicht immer nur Einzelteile
-
Thread
(No)-Aliasing for fun and performance
all-alias-typen char (und Typaliase dafür) und std::byte verwenden. Für die Spielfreudigen: https://gcc.godbolt.org/z/QMQW2c Oder die Datei im Anhang verwenden.
> im char*. Mehrstellige Funktionen sind böse, aber Output-Parameter sind ok? Und fehlende Optimierungen aufgrund von aliasing ist das kleinste Problem mit char*.
-
Thread
Linux auf dem Rückmarsch
Maschinensprache übersetzt, ist das eine Abkürzung für "Assemblersprache". Zum Beispiel arbeitet der GCC meines Wissens mit maschinenunabhängigem Zwischencode, auf dem er Optimierungen durchführt, bevor er maschinenspezifischen Code generiert. Natürlich kannst Du nun hingehen und z. B. die "Register
das eine Abkürzung für > "Assemblersprache". Ja, das ist so. > > Zum Beispiel arbeitet der GCC meines Wissens mit maschinenunabhängigem > Zwischencode, auf dem er Optimierungen durchführt, bevor er > maschinenspezifischen Code generiert. ..auf dem er wiederum Optimierungen durchführt und
-
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
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
Optimieren von ungenutzter Variable verhindern
optimiert die Variable raus. Wie kann ich dieses Verhalten am besten unterbinden, ohne jedoch auf Optimierungen zu verzichten? MfG Hexfile
main.c:270: warning: passing argument 1 of 'putnum_uh' makes integer from pointer without a cast avr-gcc -mmcu=attiny85 -Wall -gdwarf-2 -std=gnu99 -DF_CPU=10000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT util.o -MF dep/util.o.d -c ../util.c avr-gcc -mmcu
-
Thread
ISR effizient verteilen
Endpoint-spezifischen Handler vermerkt sind und verzweige dann nach Bedarf. Ich arbeite mit C (avr-gcc). Kann ich diese spezifischen Handler in die ISR inlinen, auch über Dateigrenzen hinweg? Was muss ich dem gcc dafür mitteilen? Oder muss ich den Preis eines indirekten Funktionsaufrufs in der
Beitrag #4973380: > automatisch? Denn das kann ich mir nicht vorstellen. Ich weiß nicht, ob der gcc das tut. Aber ich halte es nicht für unmöglich. Es müss(t)en halt mehrere Optimierungen zusammenarbeiten. Ich denke aber, dass eher das switch rausfliegen wird und Arithmetik auf die Tabelle angewendet
-
Thread
AT91SAM7S: einheitlicher Startup-Code
: single gcc-Version 4.1.0 Wer dazu Informationen hat, bitte bescheidsagen! Schöne Grüße, Clemens
Nutze bisher selbst zwar C++ kaum auf µC, aber man kann nie "zuviel" wissen. Die unzulaengliche Optimierung ist mir bisher nicht aufgefallen. Das Interesse an "C++ mit arm-elf-gcc" ist realtiv gross (Forenbeitraege, e-mails). Am Einfachsten duerfte es sein, "Vorher/schlecht" und "Nachher/gut" an einem
-
Thread
Impulse mit Interrupt zählen
fehlen sämtliche Kommentare. Der Rat mit "Assembler neu schreiben" ist natürlich Quatsch. Optimierung kontrollieren; ggf. Listingfile ansehen. Gruss
einer 1 für diesen Pin im PORTx Register eingeschaltet. [[AVR-Tutorial: IO-Grundlagen]] [[AVR-GCC-Tutorial]]
-
Thread
Compilerfehler?
Compilerfehler" sitzen vor der Tastatur ;-) Der hier scheint echt zu sein. Mit eingeschalteter Optimierung (-O1 oder -Os) wird die Berechnung von bandwidth in sdram_speed_test() nicht ausgeführt, ohne Optimierung geht es. [c] time = TCD0.CNT; PRINT("DMA transfer time is %u timer clocks.\
Falk B. schrieb im Beitrag #4493858: > Mit eingeschalteter Optimierung (-O1 oder -Os) wird die Berechnung von > bandwidth in sdram_speed_test() nicht ausgeführt, ohne Optimierung geht > es. Die 0 sollte auch bei abgeschalteter Optimierung ausgegeben werden, nur
-
Thread
Digikey teurer, Vivado unter Jahresabonnement, kostenlose Compiler von Microchip uvam
Hallo, aha Danke. Mir war nicht bewusst das gcc die PICs nicht unterstützt. Ich dachte immer gcc unterstützt alles, weil jeder mitmachen kann. Vielleicht hätte sich Microchip aus jetziger Sicht lieber im gcc einbringen sollen. Wer weiß.
im Beitrag #8072251: > was ist denn überhaupt der Vorteil vom MPLAB X Compiler gegenüber dem > gcc? Soweit ich weiß gab es nie einen. Im Gegenteil: Die haben einige Optimierungen aus ihrer Kopie des avr-gcc entfernt, um sie gegen Lösegeld zurück zu bringen. Ich fand das schon immer sehr frech.
-
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
Eclipse Atmelstudio6.2 unterschiedliche Codegrössen ?
mein Projekt ca. 7Kb gross. Das passt noch auf ein Atmega88. Baue ich das Projekt mit Eclipse und avr-gcc sagt mir avr-gcc das mein Projekt um 1052 Bytes zu gross ist. Habe die Optimierung schon geprüft ist in beiden Fällen -Os also Optimierung auf Grösse. Auf den ersten Blick sehe ich bei den Compilerflags
von Atmel hat nichts mit der von AVR-GCC zu tun. Atmel GCC 3.4.5 basiert letztenendes auf GCC 4.8.1
-
Thread
GCC ignoriert Zuweisung in struct
0x0003 CBI 0x15,2 Entspricht cbi(PORTC,2); RJMP PC-0x0005 d.h. gcc ignoriert einfach meine Zuweisung. Jetzt bin ich etwas ratlos. Ich hoffe, es kann mir von euch jemand helfen. Gruss, Andreas
Hi Andreas, vermutlich hat der GCC zuviel wegoptimiert. Werden die Werte in der Structure servo1 irgendwann nochmal verwendet? Versuch mal ein volatile vor die struct zu schreiben, also: volatile struct { u08 high:8; u08 low
-
Thread
avr-libc alternativen
Nutzen dieser funktionen in vielen fällen gering ist. @Johann L. >Die aktuelle Release-Serie von GCC (4.8) unterstützt auch den >ATxmega128A3U, ebenso AVR-Libc 1.8.0. Was gcc betrifft kann ich das nur bestätigen. AVR-Libc 1.8.0 http://download.savannah.gnu.org/releases/avr-libc/ Funktionirt
weil diese einige Bugfixes genenüber der 1.8.0 Release enthält, ohne die eine Distribution mit avr-gcc 4.7+ nicht sinnvoll ist.
-
Thread
Timer ISR beenden
timer_min = 0; timer_hour++; } } [/c] so sieht die Timer_ISR (AVR GCC mit Tiny 26) bei mir aus. Wie man erkennen kann, soll hiermit ein Stunden-, Minten- und Sekunden-Timer realisiert werden. Mein Frage nun: Muss ich die ISR noch irgendwie beenden, so wie bei normalen
int main(void) { foo(42); bar(42); return 0; } [/c] [pre] % gcc -Wall -Wextra -ansi -pedantic -c foo.c foo.c: In function `main': foo.c:12: warning: implicit declaration of function `bar' [/pre] Wie zu sehen ist, wird foo() ordentlich als Funktion mit "old
-
Thread
Optimizer Warnung bei SDCC
Code mit eingeschalteter Optimierung nicht läuft, dann ist er fehlerhaft (= verstößt gegen den Standard).
Rabe schrieb im Beitrag #3731765: > Wenn Code mit eingeschalteter Optimierung nicht läuft, dann ist er > fehlerhaft (= verstößt gegen den Standard). Bei korrekt arbeitenden Compilern muss das so sein. Bei GCC wohl keine Frage. Bei SDCC würd ich das aber nicht unterschreiben
-
Thread
Drehgeber und Tastenentprellung für Arduino
richtig kompilieren. Weil hier ja die Rede von "Arduino" ist, denke ich, dass es sich dabei um den gcc (avr-gcc ?) handelt. Normalerweise wird der gcc (die Compiler) im Laufe der Zeit immer "standard-konformer" und findet auch mehr Fehler. Insgesamt also ein Indiz dafür, dass nicht der Compiler das Problem
kompilieren. > > Weil hier ja die Rede von "Arduino" ist, denke ich, dass es sich dabei > um den gcc (avr-gcc ?) handelt. Normalerweise wird der gcc (die > Compiler) im Laufe der Zeit immer "standard-konformer" und findet auch > mehr Fehler. Insgesamt also ein Indiz dafür, dass nicht der Compiler
-
Thread
Unterschied JAVA & C++
Das kann man keineswegs so pauschal sagen. Die Laufzeitumgebung von Java ermöglicht diverse Optimierungen, von denen C++ nur träumen kann; zB dass das Java Programm immer für den CPU des Nutzers optimiert (just-in-time kompiliert) wird und diesen somit optimal nutzt, während die meisten C++ Programme
Das kann man keineswegs so pauschal sagen. Die Laufzeitumgebung von Java > ermöglicht diverse Optimierungen, von denen C++ nur träumen kann; zB > dass das Java Programm immer für den CPU des Nutzers optimiert > (just-in-time kompiliert) wird und diesen somit optimal nutzt, während > die meisten
-
Thread
uC führt Code nicht aus, wenn in if-Abfrage zuvor zu viel Code ist?
bisschen größer ist, es funktioniert! Aber warum verhält sich ein Programm bei unterschiedlichen Optimierungen komplett anders? :O
K. schrieb im Beitrag #3615789: > Aber warum verhält sich ein Programm bei unterschiedlichen Optimierungen > komplett anders? :O Häufigstes Problem: du hast ein "volatile" vergessen und der Compiler optimiert anders...
-
Thread
STM32F4 CoOS
. 6 Posts weiter oben) ======================================================================= GCC HOME: C:\CooCox\gcc\bin compile: [mkdir] Created dir: C:\CooCox\CoIDE\workspace\STM32F4_Discovery_CoOs\Debug\bin [mkdir] Created dir: C:\CooCox\CoIDE\workspace\STM32F4_Discovery_CoOs\Debug
\arch.o ..\obj\misc.o ..\obj\sem.o ..\obj\hook.o ..\obj\usart.o -L..\.. -lm [cc] c:/coocox/gcc/bin/../lib/gcc/arm-none-eabi/4.6.2/armv7e-m\libgcc.a(unwind-arm.o): In function `get_eit_entry': [cc] unwind-arm.c:(.text+0x144): undefined reference to `__exidx_start' [cc] unwind-arm.c
-
Thread
Blackfin, Assembler, Parallelität, GCC und Optimierung
Hallo, ich sitz gerade vor einem Blackfin BF537 Board und weiß gerade nicht, wo ich so richtig anfangen soll. Was ich bisher gemacht hab: Das Board ist eine LeanXCam mit Micron Kamera-Chip. Samples, in C compiliert, laufen dort und eine eigene DeBayer-Funktion klappt auch, obwohl ich den Eindruck bekomme, dass der GCC weit weg von Optimal ist für einen DSP. Daher meine Frage: - Geh ich recht in der Annahme, dass der GCC keine Ahnung von Parallelität und guten DSP-Code für den Blackfin hat? - Heißt das, dass man eigentlich immer in Assembler programmieren muss, wenn man was haben möchte
-
Thread
Warnungen vermeiden
In der formalen Analyse von Programmstrukturen sind Compiler wie GCC den Programmierern oft überlegen. Er hat nur dann keine Chance, wenn bestimmte Bedingungen nicht auftreten können, also beispielsweise eine Variable immer einen bestimmten Wert hat, aber das nur
war der Code mit Initialisierung um gerade dieses überflüssige LDI länger. Also schadet es der Optimierung in keinster Weise. Peter
-
Thread
Startfragen zu GPU Programmierung C++
OpenCL ist aber sehr C > ähnlich und besser für GPUs und deren Paralellisierung geeignet. In GCC gibt's eine HSA (Heterogeneous System Architecture), hier als Präsentation von 2015: https://gcc.gnu.org/wiki/cauldron2015?action=AttachFile&do=get&target=mjambor-hsa-slides.pdf Inzwischen ist das im Hauptzweig von GCC gelandet.
-
Thread
avr-gcc -O3 optimiert Variablen und If-else statements weg
Hallo, ich habe ein Problem, das mit den letzten Nerv kostet... Ich verwende den avr-gcc mit dem -O3 Schalter, also hoechster Code-Optimierung. Das moechte ich prinzipiell auch dabei belassen, jedoch habe ich Stellen im Code, die vom Compiler wegoptimiert werden und somit das Programm falsch
90 pop r1 94: 18 95 reti [/c] Ich würde auch dazu raten, immer Optimierung -Os zu nehmen. Andere Optimierungen erzeugen deutlich größeren Code ohne merkbar schneller zu sein. Hier sieht man z.B., daß der Epilog (16 Byte) verdoppelt wird, nur um ein RJMP (2 Zyklen) zu
-
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
Doku für Warning / Error messages?
Problem hast, dann frage konkret (sinnvollerweise auch mit dem zugehörigen Quellcode-Schnipsel) hier im GCC-Forum.
Compiler bleiben. Es gibt absolut keinen Grund, warum du selbst solche vermeintlichen Low-Level Optimierungen von Hand machen musst oder sollst. Im schlimmsten Fall, so wie hier, trickst du dich damit nur selber aus. Im besten Fall hast du eine Optimierung erzielt, die der Compiler auch ohne dich hinkriegen
-
Thread
C++ auf einem MC, wie geht das?
://gcc.gnu.org/wiki/LinkTimeOptimization
Anspruch ist ja, daß meine Bibliothek eine ebenso effiziente Programmierung ermöglicht wie C mit dem GCC als Referenz. Daher konzentriere ich mich bei Feinheiten wie der Optimierung auf den GCC. > Ich sehe 3 möglichkeiten: > 1) die klassen nicht Instanzieren > 2) als constexpr declarieren > 3)