-
Thread
Atmel Studio 6 beim Einzelschritt Debuggen asynchron
Schalte mal die GCC Optimierungen komplett ab.
Habe die Optimierung ganz ausgestellt, bringt aber nichts. Anbei ein kleiner Code-Auschnitt als Screenshot: Der Programmcursor steht am gelben Pfeil, aber es wurde schon die Routine lcd_command(0x01) abgearbeitet
-
Thread
Mehrere Files linken (Commandline, AVR-GCC)
atmega32 -g (Klappt, kleine Objects erblicken das Licht dieser Welt ;-) Zum Linken rufe ich den AVR-GCC mit den Optionen -mmcu=atmega32 -combine BLA.OBJ Main.OBJ -o GO.ELF auf, der meckert aber: Main.C:(.text+0x6de): undefined reference to `CBlaBla' Schon ein kleiner Hinweis wäre traumhaft
Im Moment benutzt du wegen der Endung der Quelltexte den C++ Compiler compile.bat [pre] avr-gcc -c -Wall -Os -mmcu=atmega32 -g main.c avr-gcc -c -Wall -Os -mmcu=atmega32 -g bla.c avr-gcc -mmcu=atmega32 -combine bla.o main.o -o go.elf [/pre] main.c [C] #include <avr/io.h> #include <stdio.h
-
Thread
AVR-GCC: Wie float im Flash?
Ich muß einen float aus dem Flash auslesen, leider gibt es aber nur pgm_read_dword und damit kriege ich folgende Warnung: DISPLAY.C:35: warning: dereferencing type-punned pointer will break strict-aliasing rules Der Code: [c] float gain_uout; *(long*)&gain_uout = pgm_read_dword( EEP_GAIN_UOUT ); [/c] Wie kann ich die Warnung beseitigen? Peter
-
Thread
ATMega32 Stack overflow. Wie vermeiden/analysieren?
Hallo, ich bin bei meinem C-Programm (GCC) für den ATMega32 auf ein Problem gestoßen. Es ist immer an der gleichen Stelle hängen geblieben. Das Problem ist sogar mit dem AVRStudio Simulator reproduzierbar. Das ganze liegt wohl an der Stack
von Peter: > c = a + b; > > besser: > > a += b; Die ehutigen Compiler, zu denen auch der GCC gehört, optimieren so etwas ohnehin in "Grund und Boden" ;-) - zumindest insofern die Optimierung nicht abgeschaltet ist! Genaue Auskunft, wieviele lokale Variablen (die bekanntlich auf dem Stack landen
-
Thread
Mehrere Anweisungen hinter einem Define
gekommen: Eine Funktion nur als "inline" zu definieren bringt garnichts. Mit eingeschalteter Optimierung wird der gcc sie sowieso inlinen, wenn er der Meinung ist es bringt was. Und andersherum wird er sie nicht inlinen wenn der Code deswegen zu groß wird (z.B. bei mehreren Aufrufen), trotz "inline
(durch optimieren der Operation und wegfallen des Aufrufs&Parameter-Übergabe -Overhead) macht der GCC das nicht immer. Daher muss man sich mit __attribute__((always_inline)) behelfen. In C++11 ist sogar eine Standard-Notation dafür vorgesehen (um Compiler-unabhängig zu sein) aber die unterstützt GCC
-
Thread
STM32 Kompilat größer als erwartet
startup/startup_stm32.s Building file: ../startup/sysmem.c Building file: ../src/main.c Invoking: MCU GCC Assembler Invoking: MCU GCC Compiler Invoking: MCU GCC Compiler /home/stefan/Programmierung/STM32_Workbench/Blinker/Release /home/stefan/Programmierung/STM32_Workbench/Blinker/Release arm-none-eabi-as
startup/sysmem.c Finished building: ../src/main.c Building target: Blinker.elf Invoking: MCU GCC Linker arm-none-eabi-gcc -mcpu=cortex-m3 -mthumb -mfloat-abi=soft -specs=nano.specs -specs=nosys.specs -T"/home/stefan/Programmierung/STM32_Workbench/Blinker/LinkerScript.ld" -Wl,-Map=output.map -Wl
-
Thread
sigma delta dac in c
so um die 100kHz. Faktor 10 bringt da qualitativ viel. Stellt sich nur die Frage, mit welcher Optimierung komiliert?
chris schrieb im Beitrag #3129573: > Stellt sich nur die Frage, mit welcher Optimierung komiliert? Ach so, das habe ich ganz vergessen zuschreiben: Die angegebenen Ergebnisse gelten für die Optimierung mit -O2. Bei -Os wird der Code etwas langsamer und etwas kleiner. Die Unterschiede
-
Thread
AVR: UART + ADC, Feinheiten und Fragen
ich damit gut arbeiten kann. Ich habe mich jetzt durch diverse Tutorials (hier vor allem das AVR-GCC) und Bücher gewurstelt und habe 2 ADC-Kanäle am laufen die über UART an meinen PC gesendet werden. Der Quelltext dazu ist oben als Anhang eingefügt. Da ich diesen Text zu Übungszwecken verwende habe
Strukturierte Programmierung auf Mikrocontrollern]] https://www.mikrocontroller.net/articles/AVR-GCC-Codeoptimierung#Prinzipien_der_Optimierung "Verfrühte Optimierung ist die Wurzel allen Übels!" > sind grobe Fehler drin die man als > "erfahrener" C-Programmierer nicht machen sollte? >#
-
Thread
attiny2313, LCD, 4-Bit, C, Einzelne Zeichen falsch
mal vorneweg: Ich sehe Text ! Verwendet habe ich (nach zig eigenen Tests) den SourceCode aus dem GCC-Tutorial. Angepaßt auf meine Pins (Port B). Mein Problem liegt nun darin, das bestimmte Zeichen nicht richtig angezeigt werden, allerdings in seltsamen Konstellationen. Das hier ist mein Hauptprogramm
0 wenn der Aufruf aus einer Schleife kommt. Darum hatte ich vermutet, das es irgendwas mit Optimierungen & Compiler zu tun hat.
-
Thread
Webserver macht einfach nichts mit der 1.39er Source
nicht braucht.(?) Naja. Hier dann mal meine Shellausgabe: [pre] -------- begin -------- avr-gcc (GCC) 4.1.0 Copyright (C) 2006 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR
warning: "ISR" redefined In file included from main.h:16, from 3c5x9.c:49: /usr/lib/gcc/avr/4.1.0/../../../../avr/include/avr/interrupt.h:96:1: warning: this is the location of the previous definition 3c5x9.c:730:7: warning: no newline at end of file Compiling: rtl8019.c avr-gcc -
-
Thread
Welchen WINAVR nehmen ?
Sieht bei mir gut aus, ich hab das .lst mal drangehängt. Ist mit -Os und gcc 4.01 für einen Tiny26 übersetzt.
Gut, und welcher Compiler wird dann von der IDE aufgerufen? Wohl wieder dieser Hobby-Frickel-gcc. :-)
-
Thread
Arduino IDE 2.3.2 was dauert so lange ?
Hinter der Arduino-IDE steckt ja ein GCC. Und der ist unter Windows auf dem gleichen Rechner erheblich langsamer als unter Linux. Warum das so ist erschließt sich mir aber auch nicht. Auf meinem Testsystem war damals "nur" der Windows Defender
Betriebssystem komplett neu kompilieren muß, behindert das den workflow doch ganz beträchtlich. Das der gcc unter Windows deutlich langsamer agiert als unter Linux, auch und gerade bei solchen Winzprogramme, die auf einen AVR passen, ist altbekannt. gcc arbeitet beim Compilieren halt mit unzähligen Dateien
-
Thread
Assembler oder C
professionelle Softwareentwicklung findet in Assembler statt, höchstens noch ein paar zeitkritische Optimierungen. C ist nicht schwer zu erlernen und man spart sich solche unnötigen Verrenkungen wie "low bytes anfügen und dann durch 4800 teilen". Was soll das? Warum sollte man sich das Leben unnötig kompliziert
8051 compiliert. Der Code war jeweils auf den >entsprechenden Controller optimiert (keine ASM-Optimierungen). Der >Unterschied in der Codegröße war minimal und vernachlässigbar. Es wird immer Projekte geben, die die Vorteile der einen (oder anderen) Architektur besser nutzen. Wobei die Codegrösse
-
Thread
Ich verstehe diesen Code nicht
Absprachen" halt auch durch Personalunion. :) Beispiele dafür kannst du bei Georg-Johann Lays Arbeit an AVR-GCC und AVR-LibC finden.
Analyse des Laufzeitverhaltens und darauf aufbauender Optimierung. Ist aber nach meiner Erfahrung eher wenig nutzbringend. Bringt meistens nur bei großen Maschinen was, wenn Caches zu optimieren sind. Sonst nix. Drittens hatte (und hat vermutlich bis heute
-
Thread
Wofür Propeller von Parallax ?
frontends/c/cgram.y frontends/c/cgram.y: Warnung: 3 Schiebe/Reduzier-Konflikte [-Wconflicts-sr] gcc -g -Wall -I. -I./build -DFLEXSPIN_BUILD -o build/lexer.o -c frontends/lexer.c gcc -MMD -MP -g -Wall -I. -I./build -DFLEXSPIN_BUILD -o build/symbol.o -c symbol.c gcc -MMD -MP -g -Wall -I. -I./build -DFLEXSPIN_BUILD -o build/ast.o -c ast.c gcc -MMD -MP -g -Wall -I. -I./build -DFLEXSPIN_BUILD -o build/expr.o -c expr.c gcc -MMD -MP -g -Wall -I. -I./build -DFLEXSPIN_BUILD -o build/dofmt.o -c util/dofmt.c gcc -MMD -MP -g -Wall -I. -I./build
-
Thread
function c asm bedeutung
geinlinten Funktion, so daß result immer auf 16 Bit expandiert wird -- im Gegensatz zum Makro. (avr-gcc ohne -mint8)
korrekt initialisiert würden. Problem ist der Mittelteil, wo zig Transformationen und Optimierungen geschehen. Die tausenden von Stellen im GCC dahingehend zu erweitern und zu testen ist ne echte Strafe und ein eigenes, auf mindestens 1 MJahr anzulegendes Projekt. Und wenn man damit fertig wäre
-
Thread
UART-Fehler :(
Warteschleife z.B. _delay_ms(10) nach jedem Zeichen auf. http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Warteschleifen_.28delay.h.29
von 0.5 Herz. Und weil es wichtig ist: Die Zeiten stimmen nur dann, wenn im Compiler die Optimierung eingeschaltet ist.
-
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
Bascom Compiler Geschwindigkeit
zusammencomiliert hat. Zusätzlich bekommt man bei FastAVR noch ein Assemblerlisting, was ggf nötige Optimierungen "von Hand" mächtig vereinfacht. Ausserdem kann man so überprüfen wie sinnvoll der Compiler arbeitet. bye Frank
Na das ist ja wirklich langsam. Der ARM-GCC braucht auf meinem 1.3 GHz G4 Notebook für den MP3-Player-Code (53 Dateien, ergibt 120 kB Flash) nur 30 Sekunden.
-
Thread
Buchempfehlung C++ und MCUs
treiben muss und die Codegröße nicht weiter ansteigt? Wohlgemerkt mit normalen Mitteln was die avr-gcc Toolchain bietet.
nicht genutzt werden, musst du auch mal erklären. Abgesehen davon, daß der Compiler die bei der Optimierung einfach rauswirft. Das einzige, was bei virtuellen Funktionen in Zusammenhang mit Arduino-AVR wirklich stört, ist die unschöne Platzierung der vtables im SRAm durch den avr-gcc. Irgend etwas
-
Thread
SPI will auf AVR nicht laufen
nicht sein! Nicht ohne Grund sind die SPI Register als volatile deklariert. Also sind sie von Optimierungen ausgeschlossen.
kann ein solcher Fehler auch nicht auftreten. Wie schon gesagt... Mit einem halben Dutzend AVR Gcc Toolchains getestet.
-
Thread
µC von 0 auf lernen. ASM oder C?
PIC gibt es GCC basierende Compiler. (Wobei es ja auch geschmackssache ist ob jemand gcc favorisiert oder nicht. Nicht für jeden ist das der Nabel der Welt) 2. Die freien Compiler von Microchip sind -nach ablauf
wenn Wilhelm am Internet teilnehmen kann, dann hat er sicherlich > auch eine Plattform, auf der der GCC läuft. Es geht nicht um *auf*, sondern *für*... Auf einem AVR läuft auch kein GCC, aber der GCC kann AVR-Code generieren. > Wenn er wirklich keine Plattform hat, der arme Mensch... Es gibt ja auch
-
Thread
[anfängerfrage] wo finde ich die includedateien und wie ordne ich neue zu
sqlite3 (habe ich bereits installiert), > wie kann ich die NEUE hinzufügen, dass ich eben nicht > gcc readFomDb.c ?!sqlite3.h!? -o neuesTool > gesondert aufführen muss reicht das diese in richtigen Ordner abzulegen!? Vielen Dank
okay,... der richtige befehl war: gcc write2db.c -o write2db -lsqlite3
-
Thread
C++: VS2017 kompiliert viel langsamer als VS2015?
gemacht? Zusatz-Infos: -Ja ich weiss das Windows und das VStudio ganz ganz schlecht sind und mit dem GCC und Linux sowas nicht passiert wäre, leider kann ich die Vorgaben nicht ändern :)
gelöst haben, aber die > Ursache des Problems →VS2017← nicht loswerden. Äh, ja... unter Linux/GCC/Clang baut die Software auch nicht super schnell und zusätzlich ist es eben leider nicht das Kunden-System also was hilft dein Statement?
-
Thread
avr-libc: relocation truncated to fit
8k Eine weitere Möglichkeit zur Umgehung bestimmter libgcc-Funktionen wäre die Funktionen in den gcc-optabs umzubenennen; das geht schmerzfrei im AVR-Teil. Dann wäre immer noch eine __addsf3 in libgcc, aber avr-gcc würde Aufrufe zu zB __avrlibc___addsf3 ausgeben, falls zB nicht -mno-avr-libc gesetzt
> Eine weitere Möglichkeit zur Umgehung bestimmter libgcc-Funktionen wäre > die Funktionen in den gcc-optabs umzubenennen; das geht schmerzfrei im > AVR-Teil. Ehrlich gesagt: lieber wäre es mir, wenn wir die Autoren der avr-libc- Funktionen davon überzeugen könnten, das wirklich dem GCC-Projekt
-
Thread
Programmiersprachen jenseits von "C"
fand ich > ganz gut, ist aber aus der Nische Militär/Raumfahrt nie herausgekommen. Ada (gnat/gcc) funktioniert gut für populäre µCs & OSs.
Geschwindigkeit erreicht Wie schafft der das ohne die hochkomplexen Optimierungsalgorithmen welche bspw. der GCC für C und C++ nutzt?
-
Thread
stm32F4Discovery mit Coocox Beispielen und Quickstart
arm-none-eabi-gcc: error: unrecognized command line option '-Wl' BUILD FAILED
Zu 1. ja, es ist eine freie IDE, der Compiler GCC-Toolchain auch.
-
Thread
PIC Assembler Probleme
So als Tip wegen Optimierung wen die werte des PORT bekant sind bei der ausfürung ein: movlw B’00000000’ movwf PORTC ist wesentlich schneller als: bcf PORTC, 1 bcf PORTC, 1 bcf PORTC, 1 bei erster variante wird
Nochmal was zur Optimierung. Ich kenn diesen Prozessor nicht genau, aber bei anderen PICs gibts auch den ANDLW Befehl. Die Idee ist den Wert 0011xx1100 (0 wo gelöscht werden soll, 1 wo nicht beeinflusst wird) zu laden und
-
Thread
GCC als Crosscompiler für ARM auf ARM
also bei debian auf arm ist der gcc-arm-none-eabi dabei https://packages.debian.org/jessie/gcc-arm-none-eabi
.eh_frame *(.eh_frame) .gcc_except_table *(.gcc_except_table .gcc_except_table.*) .exception_ranges *(.exception_ranges .exception_ranges*) .tdata *(.tdata .tdata.* .gnu.linkonce.td.*) .tbss *(.tbss .tbss.* .gnu.linkonce.tb
-
Thread
Mehrere Quelldateien, inline und __attribute__((always_inline))
#include "header.h" inline void bar(void) { // Do something. } // ... [/c] Der GCC bricht das Kompilieren mit [pre] bfin-elf-gcc -I./include/ -g -mcpu=bf537 -std=gnu99 -Wall -pedantic -Os -save-temps -Winline -c -o A.o A.c events.c: In Funktion »foo«: ./include/header.h:
Blick ins ASM-Listing bestätigt das ordnungsgemäße Inlinen (BTW: Jedoch nicht bei abgeschalteter Optimierung, was imho nicht zur Aussage in der Doku passt). Nochwas am Rande. Wenn ich das __attribute__((always_inline)) entferne meckert er: [pre] bfin-elf-gcc -I./include/ -g -mcpu=bf537 -std=gnu99
-
Thread
Probleme mit Optimierung bei CCE für MSP430
Hallo, kennt sich jemand mit den optimization Einstellungen in CCE aus? Ich habe das Problem, dass mein Programm für einen MSP430f2272 mit level 0 und 1 problemlos läuft, sich aber bei level 2 irgendwo aufhängt (lässt sich nicht durch debuggen finden). Gibt es irgendwo eine Übersicht über die unterschiedlichen Level und was jeweil genau optimiert wird?
-
Thread
Maximale Programm-Größe laut size-of
Optimierung ist in der Makefile auf OPT = s, also auf Größe optimieren. _delay_ms hab ich auch schon an anderen Stellen wie für die Initialisierung des LCD verwendet, dann müsste die eine Library immer schon dazugelinkt werden. Das ist der ganze Auszug: -------- begin -------- avr-gcc (GCC) 4.1.2 (WinAVR 20070525) Copyright (C) 2006 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or
-
Thread
Merkwürdiges STM32 Verhalten
Optimierungsflags verwendet werden. Findet sich unter Projekt -> Properties -> C/C++ Build -> Settings -> (GCC oder G++ compiler) -> Optimization Wenn das dort auf -Og steht, probier es mal mit -O0 aus. -Og führt im Gegensatz zu O0 schon Optimierungen durch, versucht aber noch gut debuggbar zu sein, aber
Optimierungen abschalten. Der Kompiler hat die Zeile/den Code wegoptimiert.
-
Thread
"Memory Barrier" in C99
sorgen, dass entsprechende Funktionen siese Eigenschaft haben, etwa indem man interprozedurale Optimierungen deaktiviert.
angegeben oder Seiteneffekte beschrieben werden können, firmal existiert also noch nicht einmal eine GCC Memory Barrier wie asm("" ::: "memory").
-
Thread
pow() Flash-speichersparend ?
in die 200 Bytes zu pressen, indem man ihn in Assembler nachzuprogrammiert. Das wäre aber eine Optimierung von fast 50%, was sicher nicht ganz leicht zu schaffen ist. Wesentlich einfacher ist es wahrscheinlich, das restliche Programm (ca. 3900 Bytes) mit ein paar Optimierungen auf C-Ebene um etwa
Speicheranzeige herbekommt weiß ich nicht. Darum hab ich hier 4.18, die letzte 4er mit direkter avr-gcc Integration.
-
Thread
Welches strcpy ist schneller?
Ich fände einen Vergleich mit strlen interessanter. Weil da mehr Spielraum für Optimierung des Algorithmus besteht. Bei strcpy muss jedes Zeichen kopiert werden. Untere Schranke für die Komplexität ist also O(n). D.h. die Optimierung beschränkt sich allein auf die Details der Rechnerarchitektur
#6489398: > Ich fände einen Vergleich mit strlen interessanter. Weil da mehr > Spielraum für Optimierung des Algorithmus besteht. Bei strcpy muss jedes > Zeichen kopiert werden. Untere Schranke für die Komplexität ist also > O(n). D.h. die Optimierung beschränkt sich allein auf die Details der >
-
Thread
Cordic-Algorithmus in AVR-Assembler
einmal > ganze Register verschiebe. Interessant wäre, das ganze so zu schreiben, daß es auf das avr-gcc ABI passt, d.h. daß man die Funktionen komfortabel von avr-gcc aus aufrufen und in C/C++ Programmen verwenden könnte. Dann enthält das Programm einen Fehler, von dem ich aber nicht weiß, ob er sich
> nennen oder kurz die Konformitätsregeln beschreiben? http://www.rn-wissen.de/index.php/Avr-gcc/Interna#Registerverwendung http://avr-libc.nongnu.org/user-manual/FAQ.html#faq_reg_usage Johann
-
Thread
avr-gcc: Wie Daten alignen?
ich, sowas wäre per __attribute__((align(.))) machbar. Das ist doch maschinenunabhäbgig? Aber avr-gcc emittiert kein .align ins .s, weder die 4.x noch die 3.x. Zweitens wäre das ganz hübsch für ne bestimmte Optimierung, weil dann an Bit 0 der Adresse zu sehen ist, ob von einem geraden oder ungeraden
(.vectors)) /* For data that needs to reside in the lower 64k of progmem. */ *(.progmem.gcc*) *(.progmem*) . = ALIGN(2); __trampolines_start = . ; ... [/pre]
-
Thread
switch() Merkwürdigkeiten
Das muß eine GCC-spezifische Sache sein. Hab eben mal in mein IAR-Programm geschaut. Der macht das nicht. Michael
"Das muß eine GCC-spezifische Sache sein." Ja stimmt, deshalb hab ichs ja im GCC-Forum geschrieben :-) Um genau zu sein, es ist der AVR-GCC Version 3.3.2 Peter
-
Thread
Display fällt in unregelmäßigen Abständen aus
Hab die Optimierungen mal umgesetzt und werd das ganze bei Gelegenheit mal auf den Käfer packen. Bei der PROGMEM optimierung bin ich mir unsicher, muss ich da nicht pgm_read_byt verwenden um da dann drauf zuzugreifen
nachgelesen und gesehen, dass da ein Adressoperator fehlt, läuft jetzt erstmal mit den ganzen Optimierungen. Mal schauen ob er immer noch zu schwachsinn übergeht oder nicht. Florian
-
Thread
wert mappen, wie casten?
Der Kenner heißt gcc. Mit gewünschter Optimierung kompilieren, und Code anschauen. Mein Prognose, was am schnellsten ist, will ich noch nicht verraten ...
Klaus W. schrieb im Beitrag #6861798: > Der Kenner heißt gcc. > Mit gewünschter Optimierung kompilieren, und Code anschauen. > > Mein Prognose, was am schnellsten ist, will ich noch nicht verraten ... So ist es! Optimiert wird ganz am Schluss - notfalls
-
Thread
AVR-GCC: Kein Zugriff auf Strukturmember
Hi! Ich habe die folgende C Structure definiert: [c] typedef uint8_t ringbuffer_addr_t; typedef struct{ uint8_t len; uint8_t head; uint8_t tail; uint8_t capacity; uint8_t *cont; } ringbuffer_t; [/c] und folgenden (vereinfachten) Testcode [c] int main(void){ ringbuffer_t buf; buf.capacity = 256; //breakpoint hier }[/c] egal was ich auch versuche, ich kann die Variable capacity nicht verändern, sie bleibt bei ihrem Initialwert. Ein Debugscreenshot hängt an diesem Post, der das Verhalten bestätigt. uC ist ein ATMega168P. Habt ihr eine Idee woran es liegen
-
Thread
Normierungs-Trick oder Float Berechnung?
new Noch einmal, wenn Du 'float' brauchst, dann nimm 'float'. Die ganzen 'int' oder 'long' Optimierungen bringen eventuell ein bißchen mehr Geschwindigkeit, was aber nicht zwingend sein muß. Bei 'long' wir mit 32 Bit gerechnet, bei 'float' jedoch nur mit 24 (für die Mantisse), was durchaus schneller
verwenden. Wenn Du es ganz genau machen willst, kannst Du auch noch mit verschiedenen Compiler-Optimierungs-Einstellungen testen. Entweder systematisch alle Kombinationen einiger weniger Optimierungen ausprobieren, oder mit einem genetischen Algorithmus die beste Kombination aus einer vielzahl (alle)
-
Thread
Fehlermeldungen im AVR Studio
Die "register" Anweisung stammt aus grauer Vorzeit in der die Compiler noch (fast) keine Code-Optimierung beherrschten, Du kann diese Anweisung getrost weglassen, die heutigen Compiler erledigen die Code-Optimierung für Dich! ...und hier noch etwas weiterführende Literatur: http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial Gruß Markus
-
Thread
Grundsätzliche Frage zu Compilern / Arduino IDE im besonderen.
Schalte mal die Optimierung vom Linker ein, dann werden nur noch die verwendeten Funktionen eingebunden.
/ ist. <http://www.rapidtables.com/code/linux/gcc/gcc-l.htm> Der Sinn davon ist Compilerlaufzeit zu sparen (bei popeligen uC Projektchen nicht relevant) und Qualitätssicherung: eine einmal auf Herz und Nieren, also Funktion und Laufzeitverhalten
-
Thread
LCD Display initialisiert nicht
verwende die subroutinen aus dem lcd tutorium Welches? [[AVR-Tutorial: LCD]] (Assembler) oder [[AVR-GCC-Tutorial/LCD-Ansteuerung]] Ich vermute die C Version. Dann wäre deine Pinbelegung die unveränderte aus der Includedatei lcd-routines.h. > wenn ich den strom einschalte sollten ja > eigentlich
beliebte" Probleme: Falsche Taktquelle oder Teiler-durch-8 3. bei Benutzung von delay.h mit Optimierung kompiliert werden Der Praxistest mit genau blinkender LED zeigt im Erfolgsfall, dass alle vier Punkte richtig erfüllt sind. > genau, die c version. sind recht einfache routinen und ich habe
-
Thread
Was macht der Compiler bei Rechnungen mit defines?
auch gar nicht in > der Frage. Sondern ob der Kompiler (10/2) ausrechnet, oder nicht. Ja (bei GCC). > Oder macht das auch der Präprozessor Nein. Der macht Textersatz. Ist "10/2" der gleiche Text wie "5"? Um das Prä-Compilat erzeugen (bzw. nicht löschen zu lassen) geht mit GCC etwa gcc -g3 -save-temps main.c
-
Thread
"static const" Objekt "wegoptimieren"?
Dass es in der 1. Version der "port_optimal.cc" "richtig" funktionierte ware pure Freundlichkeit vom GCC, das so zu optimieren.
Wenn man die volle Optimierung vom Kompiler zulässt: Ja, es ist egal, denn der Kompiler wird das gewünschte Optimum (Größe/Geschwindigkeit) rausholen. Wieviel man letztlich braucht, entscheidet der Programmierer, wie "verschwenderisch
-
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