-
Thread
STM32 USB Übertragungsproblem mit Code von S.F.
dann geht uns jetzt beiden wieder besser :-) Spiel grad mit der Compiler-Optimierung rum: sobald die Optimierung ausgeschaltet ist, läuft die Sache. Bei -Os (size) gehts mit max. 10 chars, bei -O3 enumeriert das device nicht korrekt.
Alex schrieb im Beitrag #6630997: > Spiel grad mit der Compiler-Optimierung rum: > sobald die Optimierung ausgeschaltet ist, läuft die Sache. > Bei -Os (size) gehts mit max. 10 chars, > bei -O3 enumeriert das device nicht korrekt. Das nützt nur leider keinem was,
-
Thread
wie "erzwinge" ich eine 16bit*16bit = 32bit Multiplikation?
Ich caste mir mit AVR gcc gerade den Wolf, aber es will nicht klappen: Ich brauche eine Multiplikation von zwei uint16_t, das Ergebnis davon hat 32 bit Breite. Von diesem will ich ferner nur die obere Hälfte weiterverwenden
der Thread ist etwas entstellt, wo sind denn die Postings von Andreas Kaiser (a-k) hin? Zu der gcc-Optimierung: Sowas kann man nur bauen, wenn es einen Weg für den Compiler gibt das zu erkennen. Wie sagt man ihm also korrekt, das er 16*16->32 multiplizieren soll? Mich wundert offengestanden schon
-
Thread
_delay_ms(xxx) Fehler unter Linux-Code::Blocks
avrlibc funktionieren seit Anfang der Zeitrechnung nur mit Konstanten (und nur mit eingeschalteter Optimierung). Oliver
funktionieren seit Anfang der > Zeitrechnung nur mit Konstanten (und nur mit eingeschalteter > Optimierung). Und es gibt auch auf beiden Systemen eine Warnung bei der Kompilierung...
-
Thread
Benötigter Speicherlatz auf verschiedenen Kontrollern
War die Code-Optimierung im AVR-Studio eingeschalten? Diese ist nämlich unsinnigerweise defaultmässig auf Off [Optimizaton: -O0], ich empfehle mindestens [Optimization: -O1] zu verwenden. (Höhere Optimierungsstufen
Ok, danke. Die Optimierung habe ich als AVR-Neuling noch nicht gekannt. Das hat etwas gebracht. Danke! Kresley
-
Thread
bringt einfache Zeigerei einen Performance-Vorteil?
konventionelle Art gelesen werden, also etwa so: [c] x = array[i]; [/c] Bringt es mit dem Gespann GCC / Atmega überhaupt irgend einen Vorteil, wenn man das so umschreibt? [c] x = *(array + i); [/c] Ich vermute NEIN, wollte aber sicherheitshalber mal fragen...
> konventionelle Art gelesen werden, also etwa so: > x = array[i]; > Bringt es mit dem Gespann GCC / Atmega überhaupt irgend einen Vorteil, > wenn man das so umschreibt? > x = *(array + i); Das ist exakt das gleiche. Beide Schreibweisen sind zu 100% äquivalent, und das hat auch nichts damit
-
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
Was passiert bei einem Überlauf
und das mischen von C mit Assemblercode ist auch nicht Standard sondern z.B. eine Besonderheit von GCC und anderen. Da aber die Hauptfrage ja war: "Die geht doch dann auf 0 und sonst nichts, oder?" und man diese mit Ja beantworten muss, spielt das alles garkeine Rolle.
Konstrukt auflösen, weil vielleicht alles zur Compilezeit bekannt ist oder sonst eine andere beliebige Optimierung. Und dann kommt bei dem SREG nur nur zufälliges Gemüse raus. Die einzige Möglichkeit ist es sowohl das add als auch das lesen des carry bits im inline-assembly auszuführen.
-
Thread
AVR-GCC: globale Variable: "volatile" oder "static volatile"
Hallo, AVR-GCC: Komme gerade etwas ins Schleudern, denn ich verstehe nicht den Unterschied zwischen nur "volatile" und "static volatile" bei globalen 8-Bit Variablen (atomarer Zugriff also garantiert!), die in ISRs
tun, können also getrennt voneinander betrachtet werden. Volatile: der Compiler darf keine Optimierungen mit dieser Variable vornehmen. static (Bei Variablen innerhalb einer Funktion): Variable behält Wert zwischen zwei Funktionsaufrufen static (bei globalen Variablen): Variable nicht als Symbol
-
Thread
Wie lange dauert ein Prozessschritt?
Wenn Optimierungen eingeschaltet sind, wird der Compiler die Berechnungen nicht zwangsläufig zwischen den Zuweisungen an PORTA durchführen. Die Initialisierung von Erg greift auf volatile Variablen zu und wird deshalb
Andreas B. schrieb im Beitrag #1973049: > Wenn Optimierungen eingeschaltet sind, wird der Compiler die > Berechnungen nicht zwangsläufig zwischen den Zuweisungen an PORTA > durchführen. Die Initialisierung von Erg greift auf volatile Variablen > zu und
-
Thread
Arduino Code Frage - Variablenzuweisung?
den der Prozessor vorgelegt bekommt, und der wiederum stammt aus dem Compiler, in diesem Fall der GCC. Und was der GCC alles macht (deine Frage im speziellen) um den Prozessor anzuweisen kann man in seiner (GCC) Dokumentation nachlesen ... da alles ziemlich streng nach Vorschrieft "gehandhabt"
Du kannst doch dafür die Optimierungen selber einstellen, ob es weg geht beim compilieren oder ob er den leeren Schrott behalten soll. Gruss
-
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
gcc c++ 3d Vektoren Standard?
Schreiben ist es in der Regel nicht getan, da fehlt dann auch noch die Validieren, Dokumentation, Optimierung etc.), oder Du setzt Dich mal einen halben Tag hin und ließt die Dokumentation einer Library, die so etwas kann und dann hat Dein Werkzeugkasten wieder ein wertvolles Werkzeug mehr.
Compiler. Dann noch ein include, und fertig. In einer Woche kann man alle 9000 Compiler Flags vom GCC lernen, Gott weiß warum du so lange brauchst um das einzige benötigte Flag -I zu finden, bzw. die Doku in der der pkg-config Aufruf steht. Die Installation von eigen ist sogar noch einfacher als die
-
Thread
Standard Funktion überschreiben
dem Compiler ermöglicht, dass er mit ,,Insiderwissen'' über die Standardbibliothek spezielle Optimierungen ausführen darf. So ersetzt der GCC beispielsweise: [c]printf("Hello world!\n");[/c] durch [c]puts("Hello world!");[/c] Für die avr-libc kann ich dir aber sagen, dass du die Funktion vfprintf
dachte bisher, dass die Standardbibliothek eine ganz normale Bibliothek ist, von deren existenz der gcc gar nichts weiss. Es muss doch zum Beispiel auch möglich sein ein putchar() oder ähnliches zu überschreiben, wenn ich nicht auf der Konsole sondern auf ein Display ausgeben möchte. Ansonsten bleibt
-
Thread
Inlineassembler für ARV-GCC: Habe Schwierigkeiten mit den "Constraint Modifiers"
Hallo zusammen, ich habe folgendes Problem: ich möchte jedes 2. Bit aus einem 16-Bit-integer (unsigned) in einen 8-Bit-integer (unsigned) schreiben. Da dies sehr sehr häufig gemacht werden muss habe ich mir ein paar Gedanken gemacht wie man hier etwas "tunen" könnte. Mein bisheriger Code erledigt das recht zuverlässig, nur leider recht langsam. [c] uint16_t in; uint8_t out; for( uint8_t i=0; i<8; i++ ) { if( in & (1<<14) ) out++; out<<1; in<<2; } [/c] Mein vielleicht schnellerer Ansatz sieht folgendermaßen aus: [c] uint16_t in; uint8_t out=0, out2; for( uint8_t i
-
Thread
Taktiken zum Debuggen bei Release Builds
ReleaseWithDebugInfo-Builds erstellen. Das ist genau das was du hier willst, einen Release-Build (mit Optimierungen, ohne Asserts), der Debug-Symbole hat sodass du einen Stacktrace bekommst. Ich denke das ist hier die erste Strategie.
aber nicht sagen. Evtl. verbessern sich auch die Ausgaben, wenn Debug-Infos aktiviert sind. Beim GCC etwa ist garantiert, dass bei Aktivierung / Deaktivierung von Debug-Info der gleiche ausführbare Code generiert wird. Wenn das bei deinem Compiler nicht der Fall ist ist das natütlich blöd... Evtl
-
Thread
Externes RAM am STM32F4 - wie Variable drin platzieren?
im Debugger sah für falsch. Hallo A.K., volatile hatte ich gewählt, damit mich die Code-Optimierung nicht bei meinem Schreib-/Lese-Test stört.
Startadresse schreiben Genaues vielleicht hier: http://www.scoberlin.de/content/media/http/informatik/gcc_docs/ld_3.html
-
Thread
int byteweise setzen
auf die neue > (wie meins). ;-) Jepp. Zu Beachten auf AVR ist allerdings [[Compilerfehler#avr-gcc]]
, sollte man die Finger lassen. Früher oder später wird dann wieder rumgeheult "Compilerfehler: GCC macht falschen Code bei Optimierung". Johann
-
Thread
EEMEM landet aber im RAM
von EEMEM im ROM landet und beim Start vom versteckten init-code ins RAM kopiert wird. Ist die Optimierung nicht angeschaltet oder hat das Array einen vorgeladenen Wert, den du uns nicht zeigst? Den so muss er den Inhalt eigentl. nicht kopiert, sondern nur mit 0 initialisiert werden.
Keine Ahnung, ob es jetzt am Studio 6.0, am WinAVR/GCC liegt, ich mache es jetzt so: [c]EEMEM uint8_t static t[1024];[/c] Der Speicherverbrauch fürs EEPROM wird zwar jetzt nicht mehr angegeben, ist mir aber auch wurscht.
-
Thread
Wie komfortabel ist C auf ATmega?
Also für den AVR gibt es einen gcc, ich würde an deiner stelle gleich nach winavr suchen, da sind alle programme zusammen. ich hab bisher mit zwei debuggern gearbeitet, einmal den von atmel, avrstudio 4.x und vmlab, damit kann man auch
den c18 von microchip selber ist frei, man kann nur nicht die zusatzfunktionen verwenden(bessere optimierung) ich habe mit dem AVR angefangen und finde es ist ein guter einstiegsmicrocontroller, sowohl als C als auch assambler mfg Azrael
-
Thread
sram benutzen, aber wie?
hey! kann mir jemand den zugraff aufs interne 1k sram des mega8 mit c mailen? verwende gcc (winavr 2006) und fange mit den asm routinen oben nix an. wie schreib ich ein byte (aus einer char-variable) ins sram und wie krieg ichs wieder raus? (in c!) danke und gruss, peter
im internen SRAM. Die Adressvergabe passiert automatisch. In einigen Fällen können sie durch Optimierungen durch Register ersetzt werden oder gar ganz wegfallen.
-
Thread
Problem mit abfrage ob "I" in SREG gesetzt ist ...
..) -------------------------- Geht es evtl besser anders/Eleganter ? Ich benutze WinAVR / gcc.
Nein, eine Optimierung auf BRIE hat offenbar noch keiner geschrieben. Sollte aber eigentlich machbar sein.
-
Thread
Befehle werden übersprungen
> Offensichtlich werden sie wohl wegoptimiert. Weshalb man fürs debuggen günstigerweise die Optimierung abschaltet.
Hat der GCC mittlerweile eigentlich einen Deppenmodus der die wilkürliche Verwendung von == und = automatisch korrigiert und aus einem Vergleich eine Zweisung und Vice versa macht??
-
Thread
.bss Overlaps previous section
Leider gibt mir diese eine Fehlermeldung beim Compilieren aus. Ich nutzte Ubuntu 10.04 mit dem Avr-Gcc aus den Synaptics Quellen. /usr/lib/gcc/avr/4.3.4/../../../avr/bin/ld: master.elf: section .bss vma 0x800108 overlaps previous sections make: *** [master.elf] Fehler 1 Kann dieses Problem mit
Spiel mal ein bisschan mit der Optimierung rum. Wurde kein fertiges hex oder elf mitgegeben? mfg mf
-
Thread
Geeigneter Cortex M3 für Projekt gesucht
es da denn mit der Unterstützung ähnlich wie bei der STM32 Beischreiibung aus? Sprich wenn ich mit GCC und Eclipse arbeiten möchte? Gruß Carsten
Die IDE zum LPCxpresso basiert auf Eclipse und verwendet auch den gcc Compiler (in angepasster Form? Zumindest die Standard Libraries sind angepasst, nennt sich dort redlib). Ob man ein eigenes Eclipse mit GCC so einfach verwenden kann weis ich nicht. Den das Problem
-
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
C programmieren wie die grossen Jungs
falsch man "programmieren" kann und es doch noch irgendwie funktioniert... Aber solbald man die Optimierung im Compiler einschaltet und der Compiler "XYZ ist nicht definiert" aus dem Standard ernst nimmt, kracht es.
gcc entschliesst sich bei [C] int main() { for( unsigned char i = 0; i < 10; ++i ) Ziffer[i] = '\0'; foo( Ziffer ); } [/C] das i zu eliminieren und das ganze mittels Z-Pointer und
-
Thread
avr gcc, xmega 128a4, switch-Anweisung
genauer einkreisen / beschreiben, mache ich hier selbst einen Fehler (DAU?) und falls es ein Bug in gcc ist, wo kann ich das melden?
eine Optimierung, behoben in v8: https://gcc.gnu.org/PR81075 [*] Alle Versionen bezogen auf FSF. Wolfgang schrieb im Beitrag #5306849: > Und dann hangelt sich der Compiler halt so durch das switch-Statement
-
Thread
triviales Problem mit include - aber ich sehe es nicht
P.s.: Optimierung ist ausgeschaltet (None -O0)
Aufruf "gcc -v ..." hilft auch.
-
Thread
printf (" \n"); geht printf (" %s, %d \n", string, int); geht nicht
Flash-Speicher lassen und auch von dort ausgeben (siehe http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Array_aus_Zeichenketten_im_Flash-Speicher ). Ich persönlich verzichte auch immer auf printf etc. weils einfach den ganzen code so aufbläht.
beiden printf()s wird der Compiler vermutlich in puts() umwandeln (was aus seiner Sicht eine Optimierung ist, da puts() ja schneller geht als printf()). Wie sehen denn die genauen Compiler- und Linker-Kommandozeilen aus? Übrigens: [[Bildformate]] Screenshot als JPG sieht einfach grässlich
-
Thread
uint32_t arm-none-eabi-gcc atomic?
ein uint32_t, wenn er denn aligned, ist, auf einem 32bitter wie ein Cortex-M bis auf weiteres mit gcc atomar. Das ist aber wie ich gelernt habe nicht garantiert. Und zumindest beim Clang hab ich da sehr interessante Optimierungen beobachtet (die ungewöhnlich, aber nicht dem Standard widersprechen
-
Thread
Ernstzunehmende Programme in BASCOM
ist aber nicht mehr mit einem Ein- oder Zweipasscompiler machbar. Das ist 'ne lahme Ausrede. Ein GCC ist auch ein Einpasscompiler. Beweis: [pre] % avr-gcc -Os -x c -mmcu=atmega8 -o - -S - #include <avr/io.h> #include <avr/interrupt.h> uint16_t adcval; ISR(ADC_vect) { adcval = ADC;
sondern das ist eine Art Standard-Prolog/Epilog, durch die Sonderrolle dieser Register für den AVR-GCC bedingt. Ja, das ist verschenktes Optimierungspotenzial.) Wenn GCC jetzt ein BASIC-Frontend hätte, könnte er auch in dieser Sprache vergleichbares Optimierungspotenzial anbieten, denn die
-
Thread
Problem mit globaler Variable und dem CTC-modus
Toni schrieb im Beitrag #1829108: > Und zwar speichert GCC diese auf dem flash. Die Variable wird vom Startupcode im RAM angelegt. Stichwort .DATA Variablenbereich. Im Flash ist lediglich der erste Wert (0) mit dem die Variable initialisiert wird. Was
Toni schrieb im Beitrag #1829108: > Und zwar speichert GCC diese auf dem flash. Das glaube ich eher nicht. Die liegt im RAM. > nun dauert ein einziger zugriff auf die variable geschlagene 10 zyklen. Hast du evtl. vergessen, die Optimierung einzuschalten
-
Thread
USB bei VMBOx Frage
auch mit allen MSP430 IDEs und Debuggern verwenden, einschließlich CCE 4.0 und dem sowieso freien GCC+GDB.
Compiler und dem NoIce mit Olimex JTAG Tiny arbeiten. Es ist ein altes Design mit einer keinen CPU. Der GCC Compiler liefert dafür viel zu großen Code. Er passt überhaupt nicht rein trotz scharfer Optimierung. Der Compiler und NoIce selber geht in der VM, nur der Olimex JTAG Tiny läßt sich nicht sicher
-
Thread
delay Funktion in AVR Studio
richtige Oszillatorfrequenz eingestellt? Muss sehr nahe bei den Optimierungen sein ;)
avr-gcc.exe -mmcu=atmega16 -Wall -gdwarf-2 -std=gnu99 -DF_CPU=14745600UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT main.o -MF dep/main.o.d -c ../main.c Hier, nur
-
Thread
Bit Array in C
kennen diese Spielchen alle. Und noch ein paar mehr, von denen DU noch nie gehört hast. Dreh die Optimierung deines Compilers auf und wenn es möglich ist, eine Division durch etwas Besseres zu ersetzen, dann macht das der Compiler. So etwas ist eine (triviale) Standardoptimierung seit über 45 Jahren. Wenn
_t div(int8_t x) { return x/4; } uint8_t udiv(uint8_t x) { return x/4; } [/c] Mit gcc Optimierung -Os übersetzt gibt es das: [code] 00000000 <div>: 0: 87 fd sbrc r24, 7 2: 8d 5f subi r24, 0xFD ; 253 4: 85 95 asr r24 6: 85 95
-
Thread
Zeilennummerierung beim HLL Debuggen
sowohl mit JTAG-MKII als auch mit AVR-ONE auf, es ist vermutlich durch die Zeilennumerierung des GCC begründet, welche durch irgendwas durcheinandergerät. Gruß Thomas
wirklich aufgerufen, was am Disassembling leicht zu erkennen war. Das ist hier auch keine Folge von Optimierungen etc. da gcc mit -O0 nach meinen Erfahrungen ziemlich 1:1 das in Assembler darstellt, was man in C vorgegeben hat. Es scheint irgendwie eine Folge von Preprozessormakros zu sein. Nach einigen Umstellungen
-
Thread
Interesse an Alternative zu BASCOM?
OOP sein soll. Tendenziell wohl eher "nur" ein grafischer Editor, der am Ende C++-Quelltext für den gcc-Compiler ausspuckt.
Abhilfe schaffen, ist dann aber immer noch > Lichtjahre von dem kompakten Code weg, den z.B. der gcc generiert. genau aus dem grund würde ich an deiner Stelle einen VB->C compiler bauen. Das hat den riesen Vorteil, dass du dich 'nur' um die Codegenerierung und die Objekte kümmern musst. Die optimierung
-
Thread
Ungleichmäßiger Takt mit ISR
auf internen Oszylator mit 8MHz (CKSEL=0100 SUT=10). Verwendetes Programm wie angehängt. Code optimierung -00. Für eine PID Reglung möchte ich eine konstante Zykluszeit haben die unabhänig von der Laufzeit des Programms ist. Zumindestens solange die Ausführung des Programms kürzer als die Zykluszeit
Hoppla, wenn Du für gcc etwas bezahlt hast, dann hast Du was falsch gemacht - nur spenden lasse ich durchgehen ;-) Viele Grüße, Stefan
-
Thread
Quellcode vom µC ziehen?
"Decompiler" funktionieren nur in der Theorie, mit einfachen Programmen die ohne Optimierung übersetzt wurden. Sobald Optimierungen eingeschaltet waren (z.B. -O2 oder -Os beim gcc), hat das Decompilat überhaupt nix mehr mit dem ursprünglichen Source-Code zu tun.
-
Thread
Atmel Studio 7 Variablenverwaltung
wird er letzte Wert (11) in die Variable zurück geschrieben. Du hast zwei Möglichkeiten, diese Optimierung zu unterdrücken: a) Durch Deaktivierung sämtlicher Optimierungen (gcc Parameter -O0) b) Indem du der Variable das Schlüsselwort "volatile" voran stellst. > Testweise habe ich in Zeile 48
-
Thread
Einfache "for" Schleife funktioniert nicht
nicht > heißt das es deswegen nicht funktionieren darf. Doch, genau das. Insbesondere mit Optimierung. Ansonsten überleg mal, was eine Beendigung von main() für einen Sinn ergibt.
lernen ;-) Hat mit µC nichts zu tun, ist eine C-Compiler-Sache. Wenn Du im Visual Studio die Optimierung einschaltest oder unter Linux z.B. mit "gcc -O2" compilierst wird sehr wahrscheinlich auch nicht passieren was Du wolltest.
-
Thread
Attiny45 Programmierung
>ob ich den attiny auch mit C programmieren kann http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial Rest: Google "Attiny 45 Arduino programmieren" Frage zu den Pins steht im Datenblatt oder auch im ersten Link.
triffts schon eher. Im vergleich zu irgendwelchem durchschnittlichen Standardcode wird man nach C-Optimierung sicher keine 3-4 fache "Leistung" durch Assembler bekommen.
-
Thread
Unterfunktionen in Section verbannen
Section gelegt. Das willst du doch? Es schafft bestenfalls die Voraussetzung für eine solche Optimierung, die dann in den binutils geschehen kann.
ffunction-sections -fdata-sections CFLAGS += -Wl,--gc-sections CFLAGS += -Wl,--relax[/pre] avr gcc-Version 4.3.5 (GCC)
-
Thread
avr-size: Wie groß ist das Programm denn nun wirklich?
bytes. Wie passen nun die drei Werte zusammen? Übrigens sind die Werte bei avr-size *.o für den gcc 4.1.0 abhängig von der Optimierung, wobei manche Dateien bei -O1, manche bei -O2 und manche bei -Os die kleinsten Werte haben. Ich hätte gererell bei -Os die kleinsten Größen erwartet.
der gcrt aus der avrlibc. und dann nicht zu vergessen die instruktionen aus der libgcc.S, die vom gcc bereitgestellt und auch in finalen .elf gelinkt wird. bye kosmo
-
Thread
Atmega128 delay.h
die delay.h Funktionen gehen nur, wenn der GCC das MIT Optimierung übersetzt, ansonsten brauchen die VIEL zu lang. Also mal checken, ob der GCC auch mit -Os o.ä. aufgerufen wird.
-
Thread
If-Phaenomen
Guten morgen! Schalte mal die Compiler-Optimierungen aus und probier nochmal. Gruß Martin
klappt es auch. Weitere Møglichkeiten findest du hier: http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Zugriff_auf_IO-Ports.
-
Thread
arm-elf-gcc float = double?
Ich verwende den arm-elf-gcc mit WinARM. Ich verwende den AT91SAM7A3, ein ARM7 ohne Floating-Point Unit. D.h. gleitkommaberechnungen müssen sowieso emuliert werden. Im Tutorial hier: http://www.mikrocontroller.net/articles/ARM-elf-GCC-Tutorial wird behauptet, doubles werden mit 64 bit gespeichert, so wie es auch IEEE-754 (http://de.wikipedia.org/wiki/IEEE_754) vorsieht. Leider musste ich nun feststellen, dass double-variablen
-
Thread
Compiler für ARM7 (LPC2xx / AT91SAM)
Der GCC wird für sehr viele professionelle ARM-Projekte eingesetzt. Ich habe keine Zahlen, aber es würde mich nicht wundern wenn es der am weitesten verbreitete ARM-Compiler wäre. Mit den Open-Source-Debuggern
aber es ist nicht immer ein Spaß. Eine komplette IDE mit Debugger gibt's von Rowley (verwendet den GCC als Compiler), kann man auch vor dem Kauf 30 Tage testen.
-
Thread
DS18S20, Atmega8 und Winavr
Matthias V. wrote: > Die Delays hab ich mit dem Speicheroszilloskop kalibriert. Sobald du die Optimierung des Compilers einschaltest sind die Schleifen weg. Versprochen. Nur solange du mit -O0 arbeitest werden sie funktionieren.
Ich habe mal eine deiner Schleifen nachgezählt. uDelay(0) frisst beim GCC 4.1 bereits ca. 43 Takte. Bei 4.3 sind's noch ein paar mehr. Mit welcher Taktfrequenz arbeitest du?
-
Thread
Anfänger: While-Schleife auf Atmega8
Atmega8 aufgebaut. Das Testprogramm funktioniert einwandfrei, und jetzt wollte ich, bevor ich das GCC-Tutorial durchgehe, noch einmal meine Uralt-c-Kenntnisse auffrischen. An PC0 und PC1 hängen 2 LEDs und die wollte ich ganz doof durch 2 while-Schleifen, in denen auf 60000 gezählt wird, abwechseln
Langsamer ja, liegt daran das es noch nie richtig funktioniert hat. Grund: Optimierung. Für Zeiten würde ich immer einen Timer nehmen, die delay Funktion kenne ich nicht. Fürs basteln reicht es die Compiler Optimierungen ausschalten. Mit der Option -O0. Alternative kannst solche