-
Thread
Lightweight WS2811/WS2812 Library
Hauptprogramm. Die LIB ist die aktuelle aus dem Git. Hier mal die Meldungen beim Compilieren. AVR gcc ist 4.8.3., aktuell aus Opensuse Leap 42.2. [code] -------------- Build: Release in Stripe_ATMega8 (compiler: GNU GCC Compiler for AVR)--------------- avr-gcc -Wextra -Wall -DF_CPU=16000000UL
Label. Das wird durch den Doppelpunkt deklariert "%=" erzeugt einen unique identifier. https://gcc.gnu.org/onlinedocs/gcc/Extended-Asm.html [code] " lsl %[dat], #1 \n\t" // [ 4] => OK " str %[maskhi], [%[set]] \n\t" // [ 5] => OK " bcs one%= \n\t" // [ 6]
-
Thread
Zugriff auf SP *vor* Funktionsaufruf
__builtin_frame_address könnte helfen: http://gcc.gnu.org/onlinedocs/gcc-4.7.2/gcc/Return-Address.html
man es mit Assembler machen. Eine Möglichkeit hatte ich im letzten Post adressiert. Wenn man den GCC durch den eines anderen Herstellers ersetzt, ergeben sich natürlich völlig neue Mögllichkeiten.
-
Thread
Zu große Daten oder Code
der Code im Anhang Deine selbstgestrickten Verzögerungschleifen funktionieren nicht wenn die Optimierung eingeschaltet ist, nutze _delay_ms() vom AVR GCC. http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Warteschleifen_.28delay.h.29
Ja Ich habe einen 20MHZ Quarz. Wenn ich die Optimierung einschalte dann blinkt gar nichts mehr! Ohne Optimierung blinkt es irgendwo im Millisekunden Bereich. Es könnte sein dass der Controller abstürzt. Leider habe ich gerade kein Oszi um zu sehen wie
-
Thread
AVR clock prescaler (CLKPR) und gcc-Codeoptimierung
Bit (CLKPCE) auf 1 alle anderen auf 0, im zweiten Zugriff stellt man den Teilungsfaktor ein. Mit avr-gcc code sieht das etwa so aus: [c] CLKPR = (1<<CLKPCE); CLKPR = 1;[/c] Sofern man Code-Optimierung benutzt (gcc Schalter -Os), funktioniert das auch wie erwartet, verwendet man keine Optimierung
prescalers wird einfach nicht geändert. Den Grund dafür kann man im Assemblerlisting finden. Mit Optimierung erhält man: [avrasm] ldi r24,lo8(-128) ; tmp44, out 70-32,r24 ; ,, tmp44 ldi r24,lo8(1) ; tmp46, out 70-32,r24 ; ,, tmp46[/avrasm] Ohne Optimierung wird daraus: [avrasm]
-
Thread
Schleifen erklären?
lange nicht in der Lage, über das Thema Optimierung nachzudenken. Du musst erstmal die Grundlagen und Praxis GRÜNDLICH lernen. Dann kann man irgendwann mal was optimieren. http://www.mikrocontroller.net/articles/AVR-GCC-Codeoptimierung#Prinzipien_der_Optimierung
Architektuir überlässt da eine sinnvolle Definition festzulegen. Wenn du denkst, das was du im [[AVR-GCC-Tutorial]] über Integer gelesen hast, sei alles was man über diesen Themenkreis und dem darüberliegenden Themenkreis 'Datentypen' wissen muss, dann hast du dich kräftig geschnitten. Das [[AVR-GCC-Tutorial
-
Thread
delay: nop() als Schleife ausführen?
assembler schon gar nicht. Wie weit man dem Disassembler trauen kann (compiliert mit -S), weiß ich nicht. gcc und ohne Optimierung. Ich nutze die aktuelle LPCXpresso-Umgebung auf einem Cortex M0, 12 MHz. Mein bisher bester Versuch [c] inline void delay_us(uint32_t us) { LPC_TMR32B1 ->TC = 0;
das auch so erkennt und entsprechend optimiert. Aber natürlich Quatsch und ohne eingeschaltete Optimierung ja sowieso unmöglich. - Zuerst dachte ich, daß der mögliche Überlauf des frei laufenden Timers nicht berücksichtigt wäre. Ist aber ganz schön clever gemacht! Einziger Nachteil durch die Konstanten
-
Thread
Simulation einer for-schleife (Software SPI)
(byte &(1 << (7-i))) { Ist ungünstig. Besser so. http://www.mikrocontroller.net/articles/AVR-GCC-Codeoptimierung#Schiebeoperationen >Letzendlich soll eine Art Software SPI realisiert werden. Sieht OK aus. > Der Simulator >von Atmel geht allerdings bei i=0 nicht mehr in die if-Bedingung
im Simulator oder im >Code liegt. Möglicherweise am Simulator. Schalte mal im Compiler die Optimierung aus, in den Projektoptionen.
-
Thread
GCC Codeoptimierung: Probleme
Hallo, ich bin langsam am Verzweifeln. Vieleicht kann mir ja jemand von euch helfen. Ich habe ein Projekt für einen AtMega644p mit dem AVR Studio 4.19 in cpp geschrieben. Es sind einige Variablen mit "extern" in einer Header Datei deklariert, die ich in mehreren cpp Dateien einbinde. So haben alle Cpp Dateien Zugriff auf diese Variablen. In der Cpp datei mit der main() Funktion sind die Variablen auch implementiert worden. In den Variablen können Werte von 0 bis 255 gespeichert werden. An Hand dieser Werte wird mit einem Timer0 in einer ISR ein PWM Signal auf angeschlossene RGB LED generiert
-
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
pgm_read_byte Problem
Flash != EEPROM Definiere entweder Deine Variable "volatile" oder schalte zum debuggen die Optimierung aus. mfg
wieder bei dem "pgm_read_byte" Befehl stehen und nichts passiert mehr. Was genau meinst du mit "Optimierung ausschalten" wie mache ich das ?
-
Thread
SPWM auf Atmega8, bitte um Feedback hinsichtlich Optimierung
Feedback >bitten, was am Code optimiert werden könnte. http://www.mikrocontroller.net/articles/AVR-GCC-Codeoptimierung#Prinzipien_der_Optimierung >(1) Ich möchte meine Programmierkenntnisse festigen, verfeinern und >ausbauen Gut. Deine Sinustabelle gehört NICHT in eine Headerdatei sondern
den PROGMEN, sonst verschwendet man nur sinnlos RAM. http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Programmspeicher_.28Flash.29 Deine Funktion void CarrierCalculation(void) hat einen irreführenden Namen, das ist eine Initialisierung, sonst nix. [[Strukturierte Programmierung auf Mikrocontrollern
-
Thread
Intrinsic Funktion _bittest langsamer?
Ok, Standard ist gcc, deshalb habe ich es mal angenommen, weil du keinen Comnpiler nennst. Was ist mit dem Assembler-Code?
absdf and ;; negdf respectively, so they can never be disabled entirely. [/pre] (aus ggg-4.7.2/gcc/config/i386/i386.md)
-
Thread
Makefile Grundlagen - Frage
[c]prog: main.o foo.o bar.o gcc -o prog main.o foo.o bar.o main.o: main.c gcc -c main.c foo.o: foo.c gcc -c foo.c bar.o: bar.c gcc -c bar.c[/c] Bei diesem Beispiel verstehe ich nicht ganz wozu ich die erste
einfach ein Shell-Skript verwenden. Erkan schrieb im Beitrag #3089990: > Kann man außerdem das: > gcc -o programm main.c foo.c bar.c mit > gcc -o programm main.o foo.o bar.o gleichsetzen ?? Allgemein ja, denn gcc enthält selber ein paar Regeln, um aus Dateinamen die passenden Aktionen zu ermitteln
-
Thread
Ideenfindung für modulares Software Konzept
DEFS) all: $(PRG).elf echo Makefile of $(PRG) all done # Linken $(PRG).elf: $(OBJ) avr-gcc -mmcu=$(MCU) -Wall -Os -Wl,-Map,$(PRG).map -o $@ $^ $(LIBS) $(PRG).o : $(PRG).cpp avr-gcc -c $(CFLAGS) $< -o $@ %.o : ../Lib/%.s avr-gcc -c $(ASFLAGS) $< -o $@ %.o : ../Lib/%.cpp avr-gcc -c $(CFLAGS) $< -o $@ [/code]**** Ende Lib/makedefs Das Makefile holt dann Quellen aus Lib und speichert die Prozessor
-
Thread
TIPP: Atxmega DFU-Bootloader auf eigenen "Boot-Pin" verbiegen (direkt im Hex-File)
nachdem ich vergeblich versucht habe den DFU-Bootloader so abzuspecken, dass man ihn auch mit AVR-GCC kompilieren kann damit er in den 4KB Bootbereich des Xmega32A4U passt (weniger als 6K schafft man offensichtlich mit avr-gcc nicht), habe ich einen anderen Weg gefunden den Boot-Port für meine Ansprüche
Die Optimierungen habe ich eingeschaltet. Siehe Anhang.
-
Thread
Hat schon jemand den LPC810 getestet?
nicht > schon durchweg auf solche Zwerge optimiert. Zumindest beim GCC geht das schon ziemlich gut.
ging's wohl in 6 bytes. Der Cortex M0 hat kein Bitbanding. Der CM0+ optional. > Zumindest beim GCC geht das schon ziemlich gut. Es sei denn zu ziehst unversehens die Newlib mit rein. Bei Freeware-Entwicklungsumgebungen passiert das schnell mal.
-
Thread
c code optimieren
der langsamsen 8 Bit Gurke nur ein handvoll Takte. http://www.mikrocontroller.net/articles/AVR-GCC-Codeoptimierung#Prinzipien_der_Optimierung
-
Thread
Verständnis TImer und Main-Loop
anschaltet? Der startet von allein. Das Programm sollte das Tonarray immer wieder abspielen. Optimierungen am Programm können natürlich noch viele gemacht werden...
mit dem Beispiel von Tutorial abe res kommt immer die fehlermeldung: in der pgmspache.h /usr/lib/gcc/avr/4.7.2/../../../avr/include/avr/pgmspace.h|1067|error: unknown type name ‘uint_farptr_t’|
-
Thread
Debounce und Filter per PChg-Isr
Man muß auch berücksichtigen, daß jeder Interrupt ein Prolog/Epilog Gedöns braucht. Beim AVR-GCC gehen dafür allein gerne mal 30..40 Zyklen drauf. Wenn also der ICP-Interrupt keinen großen Vorteil bringt, kostet er trotzdem zusätzlich.
auch schnell da. Das Hauptaugenmerk eines Profis liegt auf wartbarem Code! Und nicht auf der Optimierung des letzten Taktzykluses. "Schnell genug" ist völlig ausreichend. Mehr braucht es nicht.
-
Thread
Feedback zum Artikel "Plattformunabhängige Programmierung in C"
" brauchte. Heute sind solche Aktionen bei hochoptimierenden Compilern Alltag. Manche Probleme mit GCC rühren daher, dass die Optimierung dieses Compilers aus dem Highend-Sektor stammt und er daher aggressiver und mit anderem Ziel vorgeht, als Compiler, die nur den Mikrocontroller-Markt adressieren.
durch die > entsprechende Konstante ersetzt wird. Jo, stimmt. Sind ja beide Parameter bekannt. GCC 4.8 faltet das sogar ohne Optimierung...
-
Thread
[F] GCC Optimierung
Unten ein Codeauszug, bei dem ich meine, dass der GCC (avr-gcc (WinAVR 20100110) 4.3.3) Optimierungen (Stufe S(ize)) nicht oder nicht vollständig durchführt. *1 Da in R24 der Wert schon steht, braucht er nicht extra gelesen werden. *2 SUBI setz
-
Thread
(k)ubuntu 12.10, gcc und avr-gcc parallel installieren
recht keine Konflikte geben. Wenn man die Pakete selber geeignet baut, kann man sogar mehrere AVR-GCC-Versionen parallel installieren. Ich habe bspw. sieben verschiedene AVR-GCC- und eine x86-GCC-Version installiert :)
Prefix (für die Architektur) und Postfix (für die Version) aufrufen. Hier bei mir zum Beispiel ruft gcc etwa x86_64-linux-gnu-gcc-4.7 auf, direkt aufrufen kann ich aber auch arm-linux-gnueabi-gcc, arm-none-eabi-gcc-4.7.1, avr-gcc, avr-gcc-4.7.2, ... Auch die parallele Installation von Distributionspaketen
-
Thread
lo8 hi8 verschachteln
Das was ich in Assembler gemacht habe ist eine einfache Flash-Optimierung. Der Z-Pointer soll auf eine Tabelle zeigen. Dazu muss ein 8bit Offset addiert werden. Einfachste Möglichkeit: [avrasm] ldi ZL, lo8(table) ldi ZH, hi8(table) add ZL, lo8(offset) adc ZH
ZH, __zero_reg__ [/avrasm] Bei f2 braucht man ein Register das 0 enthält wie zB R1 gemäß avr-gcc ABI.
-
Thread
AVR Studio 6 Compiler Problem / OLED 128x64
- PC2 / GND-GND - Einen Spannungsteiler - PC4. - AVR Studio 6 1996 auf Win7 x64 mit 3.4.1.830 - GCC 4.6.2 (AVRGCC - 3.4.1.95). Erwartet: ********* -Spannungswert und Temperaturwert aufs OLED ausgeben. Real: ***** -Spannungswert wird ausgegeben; -Temperaturwert wird ausgegeben, jedoch falsch. - Funktionierende .c (LCD.c) für ein HD44780 LCD 8x2; - jedoch nur -Os Compiler Optimierung. Wo ca. +24°C angezeigt werden sollen werden ~ -24.2° angezeigt. Beim berühren des Sensors steigt der Wert, wechselt aber sporadisch bei anderen Kommawerten auf 6153,5 und 3152,2 - und immer
-
Thread
STM32 und Coocox: LED blinkt nicht
for (i = 0; i < 1000000; i++) ; } } [/c] Ich verwende die Coocox 1.7.0 IDE mit GCC 4.7 Toolchain (-O0). Fehlt noch etwas an Initialisierung? 5x Stromversorgung und Abblockkondensatoren sind vorhanden. MC ist ein STM32F107RC. Es ist ein Quarz mit 25Mhz un 2x22pf angeschlossen
, aufm Discoveryboard z.b. leuchten die LEDs dann fast nicht mehr und ich hatte keine Compiler Optimierung.
-
Thread
Verständnis c++ AVR Konstruktoren und co.
elision'. Jeder C++ Compiler, der auch nur ansatzweise ernst genommen werden will, muss diese Optimierung beherrschen. Diese Optimierung ist für C++ so wichtig wie ein Schluck Wasser für einen Ertrinkenden. Der Compiler würde ansonsten den Code mit der Erzeugung von temporären Objekten regelrecht überfluten
einer Objektkopie hinausgehen. Sobald ein Copy-Constructor im Spiel ist, darf der Compiler diese Optimierung anwenden (und noch ein paar Nebenbedingungen technischer Natur), selbst dann WENN der vom Programmierer geschrieben CCtor Nebeneffekte aufweist, die durch die Optimierung wegfallen. Daraus folgt
-
Thread
CooCox IDE + GCC richtig aufsetzen
Ich habe die aktuellste Version V1.7.0 von CoIDE geladen und das GCC tool chain V4.7.3: http://www.coocox.org/CooCox_CoIDE.htm https://launchpad.net/gcc-arm-embedded/+milestone/4.7-2012-q4-major Leider kann ich nur ohne Optimierung compilieren. Sobald ich irgendeinen
Kann nur bestätigen mit der Version 4.6 ( https://launchpad.net/gcc-arm-embedded/4.6 ) geht auch die Optimierung.
-
Thread
Zusammenfügen von 2 mal 8 bit zu einem 16 bit Wert funktioniert nicht richtig
1) Weil vor einiger Zeit die Ansteuerung eines Displays ohne optimierung nicht ging 2) Weil in diesem Artikel http://www.mikrocontroller.net/articles/AVR-GCC-Codeoptimierung die Optimierung -Os empfohlen wird. Was ist das korrekte Verfahren?
hat die Nummer PR46779. Er ist behoben in 4.5.4, 4.6.2 und neueren Versionen. Und das ist die GCC-Version, nicht die "Atmel-Version". Die GCC-Version wird angezeigt mit avr-gcc --version
-
Thread
Cortex-M: Stack Begriffserklärung bzw. Handhabung
Variablen von Funktionen ebenfalls auch auf dem Stack abgelegt werden (ich nehme mal an, dass das nicht GCC spezifisch ist, deswegen poste ich es nicht unter GCC), und globale Variablen ganz normal im SRAM. Dynamisches Speichermanagement verwendet den Heap, welcher für nichts anderes verwendet wird. Ist das
Stack Frame aufbaut, bekommt man Reentranz, Garbage Collection und Pipapo quasi kostenlos. Der gcc-Schalter -f[no-]omit-frame-pointer sagt dem Compiler, ob er den Frame Pointer permanent in einem Register halten soll (praktisch für das Debuggen) oder ob er bei hoher Registerlast den Frame Pointer
-
Thread
Bitmanipulation optimieren
Nein. Es ist Zeitverschwendung und ein großer Irrtum. http://www.mikrocontroller.net/articles/AVR-GCC-Codeoptimierung#Prinzipien_der_Optimierung Die einzige Mikrooptimierung ohne nennenswerten Aufwand ist eine direkte Zählung mit Schrittweite 4. Das spart aber gerade mal zwei Shiftbefehle und damit
Beitrag #3052998: > Sven P. schrieb im Beitrag #3052915: >> PORTC ist volatile, daher ist die Optimierung eigentlich nicht ganz >> legal. > > Genau deshalb besteht an der Stelle ja Optimierungspotenzial von Hand: --> Einfach eine Zwischenvariable verwenden.
-
Thread
LPC1111/101 LPC Xpresso optimierungen gehen nicht
Standardbibliotheken hat -Os immer viel gebracht...funktioniert hier nur nicht...Hat jemand Erfahrungen mit dem gcc für M0 in dem Bereich? Vielen Dank fürs lesen!
gSysTick_10 = 0 und aus Sicht des Compilers wird das vermutlich nirgends geändert. Also ist die Optimierung "1 Durchlauf, dann in Endlosschleife auf das Ende der Welt warten" wohl korrekt. Mit anderen Worten: Zeig den Rest vom Programm.
-
Thread
Int to float riesiger Speicherbereich
dadurch der Umfang des erzeugten Codes > nennenswert ändert? Der ist identisch (wenn man mit Optimierung compiliert). Wozu also fünf Zeilen schreiben, wenn es in einer viel übersichtlicher ist?
Zumindest früher wars doch so, dass avr-gcc die falschen recht monströsen Libfunktionen für Fliesskommarechnung verwendete, wenn man vergass, dem Linker den richtigen Tipp zu geben. Meist merkten es die Leute, weil das RAM platzte.
-
Thread
AVR: float nach uint/Vorkomma und uint/Nachkomma
, avr-gcc unterscheidet nicht zwischen double und float!?!
gerri schrieb im Beitrag #3044245: > D.h. im Klartext, avr-gcc unterscheidet nicht zwischen double > und float!?! Das ABI lesen: http://gcc.gnu.org/wiki/avr-gcc#ABI
-
Thread
_delay_ms(500) funktioniert nur sporadisch
zu sein. Auf das Problem mit dem _delay_ms() hatte ich kein Feedback bekommen (Thread wurde in GCC-Forum verschoben) Karl Heinz Buchegger schrieb im Beitrag #3039822: > No. Ein Array der Länge 3 hat auch nur 3 Elemente. Ein 4.tes existiert > > nicht. > > > > Wenn du an ziffer[3] etwas
umstrukturieren. Hatte nur bisher mit diversen Fehlern und Problemchen gekämpft und die "Code-Optimierung" vor mir her geschoben. Fabian O. schrieb im Beitrag #3041292: > Damit spielst Du rum, bis Du Dir sicher bist, dass die Ausgabe wirklich > > zuverlässig funktioniert. Aber das tut sie
-
Thread
define_ms() und F_CPU
Compiler-Optimierung eingeschaltet?
16mhz extern die Deklaration auch > geändert. Vor oder nach dem '#include <avr/delay.h>'? Optimierung 'Os' eingestellt?
-
Thread
AVR: Delay Time stimmt nicht
eingestellt, dadurch wird eine andere Taktquelle benutzt. http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Warteschleifen_.28delay.h.29 Die Optimierung im Compiler muss eingeschaltet sein.
8.0- MHz; Start-up time:1k + 4.1ms ) Falk Brunner schrieb im Beitrag #3033875: > Die Optimierung im Compiler muss eingeschaltet sein. Steht auf -Os
-
Thread
ARM Cortex gegen AVR
(nicht für Einsteiger) AVR (8Bit): + Einfach (für Einsteiger) + freie Compiler Toolchain (AVR-GCC: Eclipse mit Plugin oder AVR-Studio) o Peripherie/Schnitstellen - Speed/Rechenleistung (falls das wichtig ist)
an. > Ist wohl schon zu lange her, dass ich mich darüber geärgert habe ;-) Nimm einen modernen GCC und deklariere die Variable als "__flash". Den Rest macht der Compiler für dich. Kein #include, kein pgm_read_xxx() mehr.
-
Thread
Compiler Optimization Level (-O1) ändert Ablauflogik?
Fall nur den Anschein macht, so zu funktionieren wie gewollt bzw. nur deshalb läuft, weil die Optimierung einen "Logikfehler" rausoptimiert? Bin verwirrt...
verloren! Ich dachte aber eher an sowas wie /indent/, findet sich sicherlich in den tools, die dem avr-gcc beiliegen.
-
Thread
Erkennung Programiersprache
assembler umwandeln. an den PUSH und POP erkennt man dann später eventuell die programmiersprache - gcc hat da zB eine eigene signatur.
avr schrieb im Beitrag #3030373: [Thema was der avr-gcc 4.7.2 alles nicht kann] > -rcall+ret durch rjmp ersetzen Na, dachte ich mir, probier ich das gleich mal mit dem avr-gcc 4.7.2 aus: [c] int ext_f(int x); int f(int x) { return ext_f(x
-
Thread
Arduino - bringt's das ? Gesperrt
draufsteht? Was genau ist denn jetzt an einem C-Programm, dass mit einem soundso IDE durch den avr-gcc gejagt wird so viel toller, lehrreicher oder sonstwas, als an einem, dass vom Arduino-IDE durch den avr-gcc gejagt wird? erstaunte Grüße Timm
Den AVR GCC gibts auch einfach installierbar für Linux, also das kann ja nun kein Argument sein ;)
-
Thread
optimiert der Compiler so etwas weg?
Sowas wirft GCC auch ganz ohne eingeschaltete Optimierung raus.
Entschuldige bitte, ich war etwas zu schnell mit meinen Gedanken. Du hast natürlich Recht. Denn der GCC bekommt das ja mit eingesetzter Konstante (nach dem Präprozessor) geliefert. Damit ist das Beispiel mit FCPU das gleiche wie if (0) . Warum gibts denn da keine Warnung vom GCC? ;-)
-
Thread
Was kostet eine Funktion?
zerlegt in Scheibchen mit 3 bis 5 Zeilen :-) ...und ich versuche gerade mit vorzustellen, wie GCC aussehen würde. Bei 4000000 Zeilen Code wäre man bei 100000 Funkionen oder mehr. Dabei ist schon ein Faktor von 1/4 eingerechnet (Quelle besteht zu 75% aus Kommentaren, also 1000000 LOC netto) und
> zu machen das Verhalten des Programmes stark verändert. > Ne, eben gerade nicht. Sämtliche Optimierungen, die der Compiler > vornehmen darf, dürfen das Verhalten des Programmes _nicht_ verändern. Eine Ausnahme: Die Laufzeit darf sich ändern. Fefes Papier führt mit Recht auf, dass die Effizienz
-
Thread
union mit Struct und Array
Ach so, ich nutze den GCC unter Atmel Studio 6 Ingo
aber nicht im Array bzw. umgekehrt (sofern das wichtig ist), ausgelöst durch Füllbytes/Compiler optimierung.
-
Thread
Attiny45, timer tut nichts?
rffb.o.d rffb.c -o rffb.o Linking: rffb.elf avr-gcc -mmcu=attiny45 -I. -gdwarf-2 -DF_CPU=8000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=rffb.o -std=gnu99 -MMD -MP -MF .dep/rffb.elf.d
Um das Thema nochmal aufzuwärmen. Es handelt sich um einen Bug im alten GCC. Mit GCC 4.8 funktioniert nun der folgender Code. [CODE] #include <avr/io.h> #include <avr/interrupt.h> int main(void) { DDRB |= (1 << PB0) | (1 << PB1); PORTB |= (1 << PB0)| (1 <<
-
Thread
Cocktailmixer Steuerung
funktionieren Dann lernst du C mit diesem Tutorial: https://www.mikrocontroller.net/articles/AVR-GCC-Tutorial So jetzt hast du die Basics zum Thema Mikrocontroller. Jetzt hast du auch das Wissen wie man die Ventile ansteuert und die Schnittstellen benutzt. Parallel dazu kannst du dich in vb.net einarbeiten
und ist zu 90% fertig. Ich muss allerdings, vorallem an den Hardwarekomponenten, noch einige Optimierungen vornehmen. Bei Interesse kann ich die Tage mal ein paar Bilder hochladen. Erinner mich gegebenenfalls noch einmal daran! Gruß Johannes
-
Thread
Allgemeine Codeoptimierung in C für uC
von -3 >> 1 :-) Compiler wissen nämlich auch das: unter welchen Umständen ist eine derartige Optimierung überhaupt möglich.
[[AVR-GCC-Codeoptimierung]] Die allgemeinen Sachen gelten nicht nur für AVR GCC.
-
Thread
GCC-AVR: Wie Interrupt-Routine direkt in die Vektortabelle schreiben?
Hallo... bei einer zeitkritischen Anwendung in C würde ich gerne ein paar CPU-Takte sparen und die ISR direkt in die Interrupt-Vektortabelle schreiben – so wie ich das von Assembler her gewohnt bin. Geht das in C überhaupt?
-
Thread
Fixed-Point Support in avr-gcc?
völlig > unbedeutenden Stellen um einzelne Zyklen oder Bytes kämpfen. Heisst also konkret: avr-gcc ist git wie er ist und bedarf keiner weiteren Optimierungen oder Featues. Schön :-) Wie bei Thunderbird: Wird eingestapmft da perfekt und nicht mehr verbesserbar :-)
Johann L. schrieb im Beitrag #3023991: > Heisst also konkret: avr-gcc ist git wie er ist und bedarf keiner > weiteren Optimierungen oder Featues. Wer hat das behauptet? Ich meinte ausschließlich den Anwender des Compilers. D.h. im Quelltext möchte ich nicht kryptischen
-
Thread
GCC bei kompilieren beschleuigen
schneller - Preprocessed Headers (PPH) verwenden - Auf Optimierungen wie LTO verzichten - Keine Dumps oder temporären Dateien erstellen lassen - Bei selbsterstelltem GCC darauf achten, daß dieser mit -O2 o.ä. erzeugt wurde!
Frederick schrieb im Beitrag #3017051: > Ich meine nicht die Code Optimierungen, Er auch nicht. Ohne Optimierung zu übersetzen spart Übersetzungszeit.
-
Thread
C-Prog, "hang-up"-Endlosschleife
Nein. Die Mainloop ist ja schon *endlos*. Alles dahinter ist unerreichbarer Code. Mit Optimierung wird er auch nicht erzeugt. Peter
kannst du dich auch der Default-Endlossschleife im Runtime System anvertrauen, in die ein AVR beim gcc einläuft, wenn er jemals aus main() zurückkommt. Endlosschleife mit abgeschalteten Interrupts - diese Fehlersituation ist garantiert nicht zu übersehen.