-
Thread
Projekt Fußtreter
Weinmann schrieb im Beitrag #2616457: > wie kann ich denn "checken" ob ein pin 1 oder 0 führt? [[AVR-GCC-Tutorial#Zugriff_auf_IO-Ports]] Gruß Oliver
was schon ne menge > platz schluckt Vor allem wenn man es falsch benutzt, also wenn man die Optimierung beim Kompilieren ausgeschaltet hat oder keine Konstanten als Funktionsargumente übergibt! Prüfe mal, ob das bei deinem Programm der Fall ist.
-
Thread
C Segmentation fault
Programm zeigt nur "Segmentation fault". Woran kann dies liegen? Idee? Ich nutze einen aktuellen gcc compiler unter ubuntu. Vielen Dank und Gruß, Thomas
Variablen häufig standardmäßig mit 0 initialisiert. Sowas testet man entsprechend mit maximaler Optimierung, damit genau sowas vom Compiler eben nicht gemacht wird. Das nebenbei. Was in Deinem Beispiel passiert ist im Endeffekt das gleiche was hier passieren würde mit "normalen" Variablen: [c]
-
Thread
gleitender Mittelwert
Excel-Tabelle verifizieren (siehe Anhang). Auf diese Weise simuliere ich ganze Regelkreise. Die Optimierung geht dann sehr einfach mit Parametervariation.
Pustekuchen schrieb im Beitrag #2618202: > Beim AVR-GCC wird für eine 'signed int' Variable (hier timer) folgender > Code erzeugt: > ... Also entsprechend wie beim PC. > Man sieht, dass durch asr r25 das Vorzeichen beim Schieben erhalten > bleibt
-
Thread
Problem mit ATtiny10
Verwendung von _delay_ms. Versuch mal einfach eine while(i--); schleife zum warten zu nehmen. Optimierungen sind an?! Die kleinen Tinys sind halt nicht so für die Programmierung mit C gedacht. Und gewöhne dir mal eine andere Schreibweise an: [c] PORTB |= (1<<PB0); _delay_ms(1000); PORTB &= ~
zugegriffen wird, sind die Probleme aber wieder da. Wenn's da keinen Fix dafür gibt, dann ist der AVR GCC hier einfach unbrauchbar. Nimm den AVR Assembler, der macht's richtig.
-
Thread
Speicher des Microcontrollers
Hier auch noch etwas dazu: http://www.mikrocontroller.net/articles/AVR-GCC-Codeoptimierung
anstatt eine Konstante ?!? Weil laufen tut das Programm ja, nur das ich ( vor dem anschalten der optimierung) zu wenig speicherplatz hatte... was sich jetzt ja auch erledigt hat dank eurer hilfe
-
Thread
Inline Assembler Wieso Contraints, ClobberList etc?
ist... dafür brauchst du die Listen. http://www.rn-wissen.de/index.php/Inline-Assembler_in_avr-gcc http://www.nongnu.org/avr-libc/user-manual/inline_asm.html
schließlich auch in deinem Assemblercode nicht schneller hin als der C-Compiler (sofern man ihm die Optimierung einschaltet natürlich).
-
Thread
Unterschiede WinAVR und AVRStudio ?
Source mit allen Vorteilen die damit einhergehen. Übrigens benutzt AVR Studio im Backend genauso AVR-GCC wie auch WinAVR (zumindest bei C Projekten). Der resultierende Binärcode dürfte demnach ziemlich gleich sein. Und ja, ich habe hier ein wenig übertrieben ;).
man dran rumbasteln. Habe ich aber nicht vor. > Übrigens benutzt AVR Studio im Backend genauso AVR-GCC wie auch WinAVR > (zumindest bei C Projekten). Der resultierende Binärcode dürfte demnach > ziemlich gleich sein. Interessante Vermutung. > Und ja, ich habe hier ein wenig übertrieben ;). Na,
-
Thread
MPLAB C18 Compiler Codeoptimierung??
Compilers. Du könntest auch die "Standard-Eval Version" Version des Compilers nehmen, da sind alle Optimierungen aktiviert, zumindest 60 Tage lang. Und selbst danach findet sich auch ein Weg den Zeitraum zu verlängern (BackUp, Date, VM, Patch)...
Ziffern, nicht gut. Da wird sehr viel gemacht was so einfach unnötig ist, da gibt es _erheblichen_ Optimierungs-Spielraum. So kann man die Berechnung einer einzelnen Ziffer der Zahl erheblich optimieren. Zuerstmal definiert man sich zwei int oder long int, je nach gewünschtem Zahlenbereich, plus einen
-
Thread
LED Multiplexing mit PWM
Software PWM kriegt man in ASM sehr gut hin - das ist eines der Beispiele wo ein C-Compiler mit der Optimierung an die Grenzen stößt weil z.B. C keine 1 Bit Variablen kennt. So lange man nur jede Ebene als Ganzen Dimmen will, ist die Softwarelösung auch bei 8x8x8 LEDs kein Problem. Will man da aber jede
C bietet ja zumindest sog. Bitfelder an, welche hier (https://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Bitfelder) auch beschrieben werden. Im Endeffekt passiert dabei doch das selbe, wie wenn ich es zu Fuß per Assembler mache. Einzelne Bits innerhalb eines Registers werden zu "Variablen".
-
Thread
ARM7 Bit setzen mit Konstante oder Variable
Wen es interessiert Mein gcc macht aus den folgenden Anweisungen folgenden Code. [CODE] // gcc mit Optimierung auf Speed #define Mask #0x00000001 FIO0SET = 0x00000001; 0x000052C0 E3E03103 MVN R3,#0xC0000000
einfach mit Instruktionen zählen:). Wenn es aber so ist wie du schreibst, dann bekommt die Ausgabe des gcc doch wieder einen Sinn. Beste Grüsse Geri
-
Artikel
ArithmetikBenchmark
meines Benchmarkprogramms. Ausgeführt wurde das Programm auf einem ATmega328p. Compiliert wurde mit avr-gcc 4.3.2 und avr-libc 1.6.2.cvs20080610-2. Das sind die Versionen, die bei einem aktuellem Debian (stand März 2010) mit geliefert werden. Compiliert wurde mit einer Optimierung für minimale Größe. Zum
die Berechnung relativ lang ist, letzteres gibt dem Compiler hingegen mehr Möglichkeiten für Optimierungen. Die Bits sind sizeof(datentyp)*8. {| class="wikitable" + Ergebnisse Datentyp Bits Berechnung Verwendete Funktion Ticks signed long long 64 a+b=c Inline 135 signed long long 64 a*b=c __muldi3 895
-
Thread
Struct per Uart Senden
Ok, das sehe ich ein. Scheint so, als hätte ich so eine Konstruktion noch nie eingesetzt seit der gcc das überprüft. Erstaunlich.
, das sehe ich ein. Scheint so, als hätte ich so eine Konstruktion > noch nie eingesetzt seit der gcc das überprüft. Erstaunlich. Das ist bestimmt der Optimierung zum Opfer gefallen ;)
-
Thread
Flash Speicher sparen
#2600618: > Aus dem Bauch heraus können das aber keine 8KB sein. Bist du sicher, > dass du die Optimierung eingeschaltet hast? Optimierung ist eingeschaltet (-Os). Ok, es waren nicht ganz 8kB.
Christian F. schrieb im Beitrag #2600633: > Optimierung ist eingeschaltet (-Os). Ok, es waren nicht ganz 8kB. Also bei mir sind das ohne Optimierung: Program: 6786 bytes (82.8% Full) (.text + .data + .bootloader) Data: 18 bytes (1.8%
-
Thread
Verständnisfrage zum Speicher
Ja, ich verwende einen 8bit AVR mit GCC und programmier ihn mit AVR Studio. Ich werde mir den Link mal anschauen, danke!
oder? (Es sind zu viele, als das sie als Array in den SRAM passen würden, daher mein Wunsch der Optimierung.)
-
Thread
Cortex M3 "hängt" bei Initialsierung - (wilde Zeilensprünge)
, das die Adressen auch schon wild durcheinander stehen. Versuchs mal die optimierung auszuschalten (-O0)
STM32F103VCT6 gcc compiler. Das andere Projekt ist auf dem exakt gleichem controller gelaufen, nur wie gesagt mit der minimalen Änderung der Hardware. Nun habe ich rausgefunden: - es scheint ein problem mit
-
Thread
Atmega8: I/O funktioniert nicht vollständig
Taster zu GND schalten) oder Pull-down Widerstände (wenn die Taster zu Vcc schalten) so wie im [[AVR-GCC-Tutorial]] beschrieben? Interne Pull-Up Widerstände benutzt du ja keine, wie im Code zu sehen ist. Hast du an den PB-Pins noch etwas anderes als die LEDs (und ihre Vorwiderstände) angeschlossen?
leichter prüfen, wenn du mal ein Lauflicht drüber laufen lässt (dann aber mit eingeschalteter Optimierung kompilieren) [C] #include <avr/io.h> #include <inttypes.h> #include <util/delay.h> int main(void) { uint8_t bit = 0; DDRD = 0b00000000; DDRB = 0b11111111; while(1)
-
Thread
Build/Rebuild problem
Ich habe diesmal eine "merkwürdigkeit" beim kompilieren meines projektes mit optimierung in avrstudio bemerkt: Ich habe in meinem projekt eine struktur, die quasi überall im code als globale variable verwendet wird. Wenn ich zu dieser struktur nun elemente hinzufüge, ist gcc offenbar
http://gcc.gnu.org/lists.html Die Macher des GCC sind dort. Nicht hier.
-
Thread
char array + itoa löst Reset aus
Absturz und es funktioniert alles wunderbar. Bei beiden Beispielen habe ich die Option s für die Optimierung des gcc angeschaltet. Die erste Version tut auch, sofern ich die Optimierung des gcc ausschalte. Kann mir einer erklaeren warum der erste Fall nicht tut? Gruss Matthias
-
Thread
Was bewirkt in C folgender Befehl
>> Warum sollte das Quatsch sein? gcc tut das, und das ist gut > if(CompilerOptimierung == 0) > { > KonstruktInMaschinenCodeUebernehmenAberUeberspringen(); > } > else > { > KonstruktEntfernen(); > } Wobei das Ausschalten
Gleitkommaberechnungen) gemessen und kein Mensch schaltet Optimierungen aus. Warum sollte man sonst so viel Kohle für z.b. IAR EWB ausgeben wenn gcc ohne Optimierungen auch alles "richtig" übersetzt.
-
Thread
Simulationsproblem über Konsole
Optimierung an? Der Compiler könnte die Schleife entfernen, da das Ergebnis von c vorrausgesagt werden kann.
Eigentlich willst du die Optimierung beim realen Programmieren nicht abgeschaltet haben. Aber seis drum. Welche Entwcklungsumgebung verwendest du? Im AVR-Studio stellst du die Optimierung bei den Projekt-Optionen auf -O0 (das ist
-
Thread
avrgcc erzeugt sinnlosen code?
Der GCC mach noch andere unsinnige Sachen. Ein Port zugriff wird erst an einer höheren Optimierung zu einem Befehl. Vorher holt er das Port Register, macht die Operation und schreibt dann das Register
Beitrag #2592333: > Es ist halt nur schade das alle AVR Compiler es vernünftig umsetzen, nur > der GCC erst ab einer höheren Optimierung. Das hängt sehr stark von deiner Vorstellung von "vernünftig" ab. Wer unbedingt Code ohne Optimierung nutzen muß, dabei aber trotzdem auf "vernünftige" Optimierungen
-
Thread
kurze Frage zur Optimierung
> Aber was macht der Compiler? Werden diese 4 Zahlen zur Laufzeit > verodert? Nicht wen Optimierungen an sind. > Oder sieht der Compiler, dass es sich um Konstanten handelt > und verodert sie gleich wärend des Kompilierens? Ja. Aber wie Joachim schon schreibt: Schau doch einfach selber
lex schrieb im Beitrag #2583668: > Aber was macht der Compiler? Der Compiler (GCC) faltet diese Konstante, und zwar auch bei ausgeschalteter Optimierung (-O0).
-
Thread
while-Schleife
Stefan schrieb im Beitrag #2582813: > Selbst gcc macht das, und das auch noch zurecht [c] #include <stdio.h> void x() { while(1); printf("Hallo Welt"); } [/c] macht der gcc zu: [code] .file "x.c" .text
borg schrieb im Beitrag #2586938: > Alle Warnungen bekommt man zumindest bei gcc weg, indem man vor main() > noch die Zeile einfügt:[c]volatile fn puts;[/c] Bei mir gibt es dann die folgende Warnung mit gcc Version 3.4.5 (sowohl bei Übersetzung mit -Wall als auch ohne):
-
Thread
Ansteuerung Schrittmotor mit ATmega8 macht Probleme
F_CPU eintragen, die gewünschte Zeit beim Aufruf angeben, sicher stellen, dass die Compiler-Optimierungen an sind und die Zeiten stimmen. Egal bei welcher Taktfrequenz. >>> [[AVR-GCC-Tutorial]] <<< [C] #define F_CPU 8000000UL #include <util/delay.h> #define STEP_DELAY 10 ....
MyAVR-Workpad Plus? Das ist kontraproduktiv. Wenn du richtig programmierst, brauchst du die Optimierung nicht abzuschalten. Du willst die Optimierung behalten! Also musst du richtig programmieren.
-
Thread
Variableninitialisierung beim GCC debug versus release Modus
sicherheitsrelevanten Informationen anderer Prozesse darin vorhanden sind. Da bei abgeschalteter Optimierung (-O0) prinzipiell /alle/ Variablem im Stackframe angelegt werden, bleibt natürlich ein großer Teil des Stacks dann auf diesen Nullen sitzen. GCC unterscheidet übrigens nicht zwischen "debug
Jörg Wunsch schrieb im Beitrag #2578915: > GCC unterscheidet übrigens nicht zwischen "debug mode" und "release > mode". Optimierung und Anlegen von Debuginformationen sind völlig > voneinander unabhängig; auch bei aggressivser Optimierung (-O2
-
Thread
STM32 ST-LINK gdb reset in eclipse
Moin, Also ich habe Yagarto mit dem 4.6.2er GCC bei mir, Mein GDB müsste aus dem Atollic 2.3.0 sein. Aber wenn der Atollic GDB bei dir mit dem 1.4.1 StLink Server geht dann nimm doch den. Die einzigen Probleme die ich habe ist das ich nach
sogar besser als Atollic, das springt bei mir der GDB wie wild durch die gegend. Da ist irgend ne Optimierung an die ich nicht finde ist mir aber auch egal. Also ich kann dir nur sagen das was in dem Chibios Guide steht funktioniert bei mir auf ner Win7 x64 Maschine mit Eclipse Indigo tatellos. sonst
-
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
Probleme bei VUSB- Bachelorarbeit
andere Frage: Wieviel Platz braucht Dein Programm auf dem Controller? Evtl. am Limit bzw. die Optimierungen nicht eingeschalten? Heap/Stackprobleme tauchen auch ab und zu so sporadisch auf!
Tobi L schrieb im Beitrag #2581993: >> Evtl. am Limit bzw. die Optimierungen nicht eingeschalten? >> Heap/Stackprobleme tauchen auch ab und zu so sporadisch auf! > > das hab ich noch nicht probiert kann dir nur sagen dass das hexfile auf > dem pc 5 kb einnimmt. dürfte
-
Thread
LPC2148 ARM7 Interruptroutine beendet nicht richtig
den Saurier und macht es eurer > Ansicht nach Sinn mal umzusteigen:)? Fall ja, auf was bitte? > gcc finde ich im Prinzip für meine Bedürfnisse schon brauchbar. GCC Varianten gibts reichlich, als freie Version beispielsweise Yagarto. Kostenfrei kommerziell mitsamt IDE von Atollic, wenn man kein
übersetztem Code ist für manche Überraschung > gut. Auch dies könnte so ein Effekt sein. Dann kann ich Optimierung mal gleich vergessen - oder? >GCC Varianten gibts reichlich, als freie Version beispielsweise Yagarto. >Kostenfrei kommerziell mitsamt IDE von Atollic, wenn man kein C++ >braucht. Als reine
-
Thread
Mäanderförmige Array-Indizierung?
und* y-Richtung halbwegs gleichmäßig zuschlagen kann. Bevor du das von Hand machst: Compiler wie GCC versuchen, Maxrix-Operationen so umzusortieren, daß die Cache-Lokalität erhöht wird. Um das zu erreichen, verwendet GCC zum Beispie CLooG, den "Chunky Loop Generator" http://www.cloog.org/
umzubauen, daß eine möglichst hohe Cache-Lokalität erreicht wird. Vielleicht kann der Compiler die Optimierung ja schon von hause aus, und du musst garnix dazutun...
-
Thread
Warum Zeiger auf Funktion?
es keine besondere Bedeutung hat, genauso wie hasenboppes keine besondere Bedeutung hat. Zitat aus GCC: http://gcc.gnu.org/onlinedocs/gcc/Standards.html >> The ISO C standard defines (in clause 4) two classes of >> conforming implementation. A conforming hosted implementation >> supports the
ist? Ich weiß nicht, worauf du damit jetzt hinaus willst? In dem Fall greifen natürlich alle Optimierungen, die auch für jede beliebige andere Funktion im Source greifen würde, inklusive Inlining, ersetzen von Variablen durch Konstanten, etc.
-
Thread
STM32F4xx: Fragen zum startup
UART2 zu machen, und mit einem Timer die Zeit messen für x Durchläufe. Bitte daran denken, dass der GCC je nach Optimierung evtl. Deinen Code auf nix zusammenstutzt, da alle Variablen nicht wirklich verwendet werden. Deshalb alles irgendwie zusammenzählen, und dann am Ende z. B. via UART ausgeben. volatile ist nicht hilfreich, da es den GCC von Optimierungen abhält. Bitte noch von "Template" nach "fpu-demo" oder so umbenennen. Ich würde es dann so zusammenbauen, dass "Auspacken", "make" zum Bauen für Linux genügt - es gibt hier immer
-
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
GCC-Option -mint8 vermeiden?
sizeof(int) gerechnet werden ist diese Variable nun 16 Bits breit. Der Rest folgt daraus. Diese Optimierung ist global, für alle Architekturen, und kümmert sich nicht um die Frage, ob eine Teilwortoperation möglicherweise billiger ist als eine Maschinenwortoperation. Für GCC hat das Maschinenwort auch
um eine 32-Bit Instruktion handelt. Diese Optimierung hat erst avr-gcc 4.7 (PR49939) Beispiel: [c] char c; void foo (char a, char b) { if (a) c = b; }[/c] compiliert mit avr-gcc -S -Os -mmcu=at90s8515 zu [code]foo:
-
Thread
UART String senden
FFFFFFFFFFFFFF STRING:. . FF [/code] Compiler/programer Anweisungen: [code] avr-gcc -mmcu=atmega8 -Wall -gdwarf-2 -Os -fsigned-char -I./ -o uart.out rs.c avr-objcopy -j .text -O ihex uart.out uart.hex avrdude -p m8 -P usb -c avrispv2 -U flash:w:uart.hex [/code] Bin für jeden
Hi, nimm mal die Optimierung -0s raus,evtl. hilfts. Der C-Code sieht (abgesehen vom Problem im Main) gut aus, da geb ich dem Vorposter recht. Ergo sollte der erste Versand klappen. Oder verschluckt hier irgendwas den
-
Thread
C Code optimieren
Beim AVR-GCC werden konstante Strings auch im RAM abgelegt. Es gibt zwar einen Würg-Around mit Macros für Flash-Arrays, aber das wird schnell unleserlich und schaltet auch wichtige Typprüfungen ab. Insbesondere
es hier, aber das hast du bestimmt schon gelesen ;) http://www.mikrocontroller.net/articles/AVR-GCC-Codeoptimierung#GCC-interne_Optimierung Riesige Sprünge gegenüber -Os bringt das aber nicht mehr. Oliver
-
Thread
zählt diese for Schleife 10mal?
optimieren? Ich wollte diese Aussage selbst tatsächlich auch nicht glauben. Daher hier mal harte Fakten (gcc (Gentoo 4.5.3-r1 p1.0, pie-0.4.5) 4.5.3) Ohne Optimierung: [code]int main(void) { 0: 55 push %rbp 1: 48 89 e5 mov %rsp,%rbp int i;
Schleife packen… Aber das wird in realem Code wohl so selten auftreten, dass sich eine solche Optimierung nicht lohnt.
-
Thread
avrstudio 5 simulator geht nicht richtig
ein tiny461. Debugger ist simulator. debugging infos sind im assembler und compiler auf max. optimierung ist aus. ich habe folgenden Code in der Main: [c] int main(void) { volatile uint8_t soi = sizeof(int); volatile void* t = &soi; //... } [/c] das lss zeigt mir, dass der
irgendein windowsprogramm, sondern um einen Teil der Entwicklungsumgebung, die sogar noch auf dem gcc basiert. Das meiste was sonst so unter gcc steht, ist hingegen generische C-Programmierung und hat mit der Toolchain überhaupt nix zu tun und gehört nochweniger da hin.
-
Thread
Transistortester AVR
Software/trunk). Die 1.04k Version ist im Software/tags Ordner als Zip-File abgelegt. Das Meckern des gcc Compilers muß an einer anderen gcc Version liegen. Wenn diese Compilerversion einen const haben will, kann man bei Zeile ~360 in Transistortester.h die Anweisungen mit "extern const" statt "extern
aber in der Arbeitskopie hinzufügen. Wenn neuere gcc Versionen weniger gut optimieren, ist es vielleicht keine gute Idee, diese zu benutzen. Grüße, Karl-Heinz
-
Thread
Umstieg 8->32Bit: Codergröße
je nach verwendeter Library ein deutlich grösserer Grundaufwand einzurechnen. So findet in manchen GCC-Umgebungen die Newlib Verwendung und allein die knabbert schon an deinen 16KB. Man kann die zwar vermeiden, hat aber dann kein fertiges printf. Proprietäre Umgebungen sind zwar sehr viel sparsamer
den CM3s deutlich weniger Platz im Flash belegt hat: Statt 32k waren es ca. 25k (ich verwende immer gcc -Os). Ich führe dies generell auf die Effizienz von thumb zurück, allerdings spielt bei mir vermutlich auch die fehlende Optimierung von PROGMEM-Strings beim atmega ein größere Rolle (aufgrund von vielen
-
Thread
GCC versus BASCOM - Pegelunterschiede
Korrekt erspäht. Ich lief damals von den PICs über. Ausschlaggebender Grund war die Verfügbarkeit des GCC für die ATMEL µCs. Der Kommentar war noch falsch, für das Pollin Eval Board muss es heissen: DDRD = ( (1 << PD5) | (1 << PD6)| (1 << PD7) ); /* PD5, PD6 und PD7 als Ausgänge */ Hier sind
ist riesengross. Nö. Alle Werte sind zur Compilezeit bekannt: F_CPU, U2X_BIT und BAUSRATE. GCC faltet die Konstanten fleissig und zuverlässig auch bei abgeschalteter Optimierung. > Es ist viel sinnvoller, UBRR als Konstante vom Compiler ausrechnen zu > lassen und dann nur diese Konstante
-
Thread
Problem mit Optimierung?
Hallo, ich bastl gerade unter Kubuntu 11.10 und aktuellem gcc mittels Eclipse_CDT an einem kleinen Programm. Ich lese eine Textdatei mittels fgets() aus. In meinen Textdateien steht in der ersten Zeile immer eine Zahl, danach folgen in den restlichen Zeilen irgendwelche Daten. Da ich die Zahl extra brauche lese ich diese aus und speichere sie ab, die restlichen Zeilen lese ich in einer while-Schleife aus. So lese ich meine Zahl aus: count = atoi(fgets(lineBuffer, 4, file)+2); Da ich count momentan zwar speichere, aber noch nicht weiter verwende optimiert mir der gcc die Zeile
-
Thread
Initialisierte Werte in IAR
nur bei der ersten Schleife erhalten, danach immer 0. Im zweiten Fall ist alles OK. Keine Optimierungen werden benutzt. Hat jemand gleiches Problem? Gruss Owen
merkwürdige Erscheinung in IAR erfahren. Dann bist du hier eigentlich falsch, denn das ist das GCC-Forum ... > Siehe Code unten. Der Code lässt sich so nicht compilieren/linken. Der Fehler ist, wie immer, in Zeile 42 zu suchen ... meint zumindest meine Kristallkugel. Kann natürlich sein
-
Thread
Takte pro Befehl
Bestfall vom Compiler automatisch durch memmove ersetzt, im schlechtesten Fall behindern sie die Optimierung.
fehlenden Semikolons nicht compiliert und nur ein Element weniger als das erste kopiert, erzeugt GCC ansonsten identischen Code.
-
Thread
LCD 16x2 an ATMEGA 8
weglassen: #ifndef F_CPU #define F_CPU 3686400 #endif In dieser Anleitung steht auch das die Optimierung beim Compilern eingeschaltet werden muss. Wo kann ich dies machen??? http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial/LCD-Ansteuerung
sehen...(lcd-routines.h, lcd-routines.c, LCD Beispiel 1) http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial/LCD-Ansteuerung
-
Thread
Compilieren mit anderer AVR-GCC Version liefert "falsches Ergebnis"
neuen Rechner gekauft - AMD 64 - und habe ein aktuelles Ubuntu laufen. Mit dem Ubuntu kam der avr-gcc 4.5.3 Vorher hatte ich den avr-gcc 4.3.5. Mit dem neuen Rechner, neuen Ubuntu und dem neuen avr-gcc habe ich mein Projekt wieder compiliert. Es gibt keine Fehlermeldungen und das hex, elf usw
du hast zu 99% einen Fehler im code und durch neue Optimierungen wirken sie sich jetzt aus. immer schön auf volatile und atomic operationen geachtet?
-
Thread
if then toogeln ?
ist klar, daß es sich um einen ATmega8 handelt. Zumindest ich habe noch keine Anwendung mit avr-gcc gesehen, die davon ausgeht, daß PORTB |= 1 evtl. nicht atomar übersetzt wird. Wie gesagt, ich mache diese Annahme auch in meinen (Hobby)-Anwendungen, aber bestimmt machen auch einige "Professionelle
Annahme ist durch nichts begründet ausser durch die Erfahrung, daß die Sequenz bei aktivierter Optimierung "bisher immer" auf SBI abgebildet wurde.
-
Thread
implizites modul init
://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html Damit kann sich ein Modul selbst initialisieren ohne daß dies von Hand in main geschehen muss. main sieht davon nix. Somit kann man auch mit avr-gcc
Constructors werden in GCC unterstützt, siehe obigen Link auf die GCC Dokumentation. Und: Bitte nicht constructor mit naked-Funktionen in init-Sections verwechseln! Letztere sind nicht zu anderen Architekturen portabel,