-
Thread
SDCard, Widerstands-Level-Converter, Speed?
mehr Hinweise finden? Wie mache ich das, oder wo finde ich mehr Infos drüber? Bzgl. ASM-Code Optimierung. Habe schon recht viel erreicht.. komme von 372 KB/sec. lesen und mit Code-Optimierung, inlining komme ich auf 486 lesen. schreiben 166 -> 216 KB/sec. http://www.matuschek.net/atmega-spi/
Und hier noch ne dreckige Lösung in Assembler für GCC. Dort wird SPIF nicht abgefragt:)
-
Thread
AtTiny2313 Timer1 kein Interrupt
das Problem, jetzt tut's. Aber warum gibt mir der compiler da keinen fehler? ich verwende avr-gcc Naja, hauptsache es tut
/interrupt.h> ISP(TIMER1_COMPA_vect) $ avr-gcc -Wall -mmcu=attiny2313 -o main main.c main.c:5: warning: return type defaults to ‘int’ main.c: In function ‘ISP’: main.c:7: warning: control reaches end of non-void function [/code] ..was wünscht
-
Thread
Was passiert wenn das RAM nicht ausreicht?
Aha, kann der gcc denn das maximal belegte RAM bestimmen?
rekursiven Funktion oder malloc kann man ja schnell die Limits erreichen. Welche Einschränkungen brauchen gcc und Keil denn?
-
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
C++ für Embedded: ab welchen Prozessormerkmalen?
Entwicklungsumgebungen für Mikrocontroller können kein C++. Meist können sie es allenfalls dann, wenn drunter GCC werkelt.
www.atmel.com/tools/ATMELAVRTOOLCHAINFORLINUX.aspx problemlos. Hinter der 3.4 (Atmel-Version) verbirgt sich GCC 4.6.2 [c] $ avr-gcc --version avr-gcc (AVR_8_bit_GNU_Toolchain_3.4.0_663) 4.6.2 Copyright (C) 2011 Free Software Foundation, Inc. This is free software; see the source for copying conditions.
-
Thread
avr-gcc verdoppelt code von Funktionsaufruf
) asm("nop"); }[/c] ---- Schachtle ich das Unterprogramm eine Ebene tiefer, so erzeugt der gcc ein 152 Byte langes Programm ----[c] #include "avr/io.h" #include "avr/portpins.h" static void init_display() { DDRA|= _BV(PD1) | _BV(PD0); DDRA|= _BV(PD1); DDRA|= _BV(PD0); DDRB|=
statische Funktionen lassen sich problemloser optimieren. Trotzdem ist es komisch, daß die Optimierung -O1 in 2 Situationen besser abschneidet als -Os Andreas
-
Thread
Struct per Pointerzugriff befüllen
Beitrag #4368264: > Wie gesagt, memset scheidet aus. warum? hast du es mal gestestet (auch mit Optimierung)? Ich würde erwarten das der Compiler es inline als Schleife baut.
Die (korrigierte) Schleife ist kleiner als memset und passt! Optimierungen sind natürlich an. Die Standardfunktionen sind halt nicht immer das Optimum.
-
Thread
Total den Überblick verloren !
Ich hab mit dem AVR angefangen um C zu lernen ( AVR-GCC kostenlos und goil). Aber wie Andreas sagt habe ich auch erstmal einwenig über asm reingeschnuppert, wie der sich "anfühlt". Das zahlt sich später doppelt aus wenn du beim debuggen auch mal z.B. auf
compiler eigentlic so macht / produziert. Das kann sehr nützlich sein bei der Fehlersuche und Optimierung. Gruß Bernhard
-
Thread
Handycamera MCA-25 ansteuern - ip webcam mit mega32
sieht so aus als ob der gcc4 irgendwelche probleme hat... ich code/übersetze mit dem gcc3: >avr-gcc --version avr-gcc (GCC) 3.4.3 Bye, Simon
wollte, wenn ich die manpages von apt-get richtig verstanden habe, mit dem Befehl: "apt-get install -s gcc-avr=1:3.4.3" deine Version installieren. Da sagt er mir aber: "E: Version '1:3.4.3' for 'gcc-avr' was not found" .. mit "apt-get install -s gcc-avr=1:*" will er 1:4.0.2-1 installieren (die ich
-
Thread
Zeit für Function call bestimmen
Hi, Ich hab für einen ATmega mit avr-gcc eine AES Implementierung geschrieben. Schalte ich die Optimierung aus (-O0) kann ich debuggen und mittels Debugger die Laufzeit für eine Verschlüsselung bestimmen. Soweit so gut. Nun möchte ich aber die Laufzeit für eine Verschlüsselung mit Optimierung (-O2) bestimmen. Der Debugger funktioniert ja jetzt leider nicht mehr. Meine Idee wäre: Am Mikrocontroller die Zeit zu messen und sie auf dem seriellen Port zurückzuschicken. Sowas in der Art
-
Thread
Tut gelesen und trotzdem Problem mit Strings im Flash
dann hängt sich der Kontroller auf. Die Beispiele im Tutorial habe ich auprobiert, auch die in der GCC Faq, aber das Ergebniss ist immer das selbe. Beim 8051 gibt es ja das Iram mit 256 Bytes, gibt es das beim AVR auch? Wie schaffe ich es die 4K Ram beim AVR komplett zu nutzen? Mein Buffer im Ram
an diesem Problem aus. Dementsprechend Banane sieht der Code mittlerweile auch aus. Eine "IRam optimierung" gibt es bei dem Originalcode vom AT89C51ED2 leider auch nicht, weil ich da natürlich alles "Datenfressende" in das XRAM verschoben habe. Aber der Hinweis das es eigentlich so funktionieren müsste
-
Thread
allgem. Frgen Atmega
, was von mehreren Threads/Funktionen aufgerufen oder verwendet wird. Damit der Compiler keine Optimierung durchführt die den Inhaltz beim Threadwechsel zerhacken könnten. Also Felder, Variablen usw. 2.) http://www.mikrocontroller.net/articles/Sleep_Mode Gruß
Timo P schrieb: > 1) ist es möglich, einen codeblock als volatile zu definieren? WINAVR In GCC 4.4 lässt sich für ganze Funktionen die Optimierung individuell einstellen/abschalten (attribute, pragma). Ist aber mit Vorsicht zu betrachten, volatile ist sinnvoller.
-
Thread
Bug in AVR Studio und GCC ?
Hallo, ich habe folgendes C Programm geschrieben und mit WINAVR kompiliert. Als ich die Cof Datei im AVR Studio geöffnet habe und debuggen wollte mit dem JTAG ICE habe ich bemerkt dass die laufvariable int i nicht hochgezählt wird. Obwohl dass Programm funktioniert. # include <io.h> # include <iom16.h> //ATmega8-Deklarationen int i; void main(void) { DDRD=0xFF; //Alle PORTB-Pins auf Ausgang while(1) { for (i=0;i<0xF000;i++) //Warteschleife, abhängig von AVR-Taktfrequenz {}; PORTD++; } } Im Disassembler Mode habe ich gesehen dass
-
Thread
Programmierung von ATmega8-16PU macht Probleme
Optimierungsstufe des Compilers schaltet man in den Compiler-Optionen ein (ergibt dann beim Aufruf des gcc -O0, -O1, -O2 oder -O3). Ohne Optimierung kann der Compiler die Delay-Zyklen nicht bestimmen.
Aha, das bei PD0 sieht mir nach Leichtsinnsfehler aus... Sch**ße... Das mit der Optimierung werd ich mal testen. Danke Christian
-
Thread
Z80 wie AVT nutzbar? Gesperrt
Wenn es auch C sein darf ... Mit dem Suchterm "GCC Z80" findet man z.B. https://sourceforge.net/projects/z80gcc/ Um die Basis-Routinen für I/O etc. wird man sich, - wie zuletzt von Georg erwähnt -, vermutlich dennoch kümmern müssen und dafür gute
Theor schrieb im Beitrag #5665114: > Mit dem Suchterm "GCC Z80" findet man z.B. > https://sourceforge.net/projects/z80gcc/ Last Update: 2015. Und Dateien gibt's da auch keine. Das war ja mal ein Griff ins Klo. Es gibt zwei nennenswerte offene C-Compiler
-
Thread
STM32 unter Linux programmieren und debuggen
line at 26 // the end of this function, used to pop the compiler diagnostics status. 27 #pragma GCC diagnostic push 28 #pragma GCC diagnostic ignored "-Wunused-parameter" 29 #pragma GCC diagnostic ignored "-Wmissing-declarations" 30 #pragma GCC diagnostic ignored "-Wreturn-type" 31 32 int
Ich hab auch openocd, das arm plugin, arm-none-eabi- gcc und gdb installiert. Was hast du für Einstellungen im "GDB OpenOCD Debugging" in Eclipse eingestellt? Im Anhang findest du meine Einstellungen. Aber nur mit dem OpenOCD Debugger in Eclipse komm ich
-
Thread
Präprozessor Ausgabe in Datei ausgeben
InitEvents(); // Port directions InitPorts(); SPIBitBangedShiftData0(0xAA); [/c] WinAVRs gcc schluckt das ganze soweit. Warum die Funktion als Makro? Schon mit niedriger Optimierung weiss gcc, dass er gewisse Dinge nicht wirklich kompilieren muss und die Bit-Schieberein selbst erledigen
umleiten. Das kopiere ich mir für verschiedene Fälle heraus und lasse das kompilieren. In der Doku von gcc hab ich folgendes gefunden: [pre]-o file Write output to file. This is the same as specifying file as the second non-option argument to cpp. gcc has a different interpretation of a second non-option
-
Thread
Kommazahl in dezimal umwandeln
Max, schau Dir die konvertierungs routinen an von den gcc compiler. Der tut genau das, ohne dabei den "float" oder "double" zu verwenden. von asc->single float, asc->double float etc etc.. Ach ja... suche dir ein alte compiler (pre gcc 3.0) da ist es verstaendlicher und der per cpu optimierungs blabla ist nicht dabei. vor jahren hatte ich das selber problem, habe damals die konvertierungs routine extrahiert und verwendet. (die datei heisst gcc/real.c ) gruss roman
-
Thread
Wozu 'inline' in C++?
Compiler-spezifischen Attributen zum Erzwingen des Inlining helfen kann, z.B. "__attribute__((always_inline))" beim GCC.
inzwischen besser geworden ist, andererseits sind die Optimierungs Möglichkeiten bei modernen i7 mit AVX512 auch gestiegen.
-
Thread
LCD-Display mit Attiny24 betreiben
Hallo, ich habe gerade versucht nach der Anleitung aus dem [[AVR-GCC-Tutorial/LCD-Ansteuerung]] ein HD44780 kompatibles Display mit einem Attiny24 zu betreiben, doch scheint der Speicher zu klein zusein.. Besteht überhaupt ein Chance es doch mit dem µCzum laufen zu
muß. Auch Umsortierungen unterbleiben (der GCC optimiert zwanghaft auf spätest mögliche Ausführung, egal, was es kostet). Man kann dann zwar debuggen, bloß hat das dann keinerlei Ähnlichkeit mit dem Release-Build, ist also voll für die Katz.
-
Thread
structs auf 8-Bit-MCUs
auf mit einem 8-Bit Controller/Compiler immer funktionnieren, oder kann es sein, daß nach einer Optimierung so Dinge herauskommen wie t->i==66, t->j==55, t->k==44332211?
wirklich haben möchte. Ist ziemlich brutal und sieht wild aus, aber es funktioniert **g** Beim GCC gehts so: [c] struct test_t { int a; char b; int c; } __attribute__((__packed__)); [/c] Quelle: http://sig9.com/articles/gcc-packed-structures MfG Thomas Pototschnig
-
Thread
Arduino Präprozessor Pin Change Interrupt und Version automatisch zuweisen
www.microchip.com/webdoc/avrassembler/avrassembler.wb_preprocessor.html Options for the C compiler avr-gcc Machine-specific options for the AVR http://www.nongnu.org/avr-libc/user-manual/using_tools.html http://public.beuth-hochschule.de/~kempfer/skript_c/Kap10.html Mit "trickreich
irgendwie kann. Ansonsten wäre das nun ein guter Grund, mal Linux auszuprobieren. Dort fühlt sich gcc sowieso mehr zuhause und läuft auch viel schneller.
-
Thread
Seltsames Compilerergebnis
kann diese Optimierung Fliesskomma-Rechenoperationen ein Vielfaches beschleunigen. Deshalb steckt das im GCC drin. Beim AVR ist das ein nur selten erwünschter Nebeneffekt - den man mit irgendeinem -fno-loop-unrolling oder so auch abschalten kann. Generell ergibt alles andere als -Os beim GCC/AVR wenig Sinn.
-
Thread
Micronucleus - USB-Bootloader für ATtiny
recht einfach: 1) Installieren des Bootloaders auf dem ATTiny85 Voraussetzung: - Aktuelle GCC-AVR Toolchain - AVRdude Wechseln in das Verzeichnis /firmware. Wenn kein USBASP verwendet wird, muss das makefile angepasst werden (PROGRAMMER=) Wenn USB nicht an PB3 und PB4 angeschlossen ist
einfach* zu machen, siehe *.inf-Files editieren oder Zadig & Co. Unter Linux alles kein Problem, [code]gcc -lusb ...[/code] und fertig. Ciao, Martin
-
Thread
Mengendeklaration in C
"Man könnte dem gcc nun bestimmt beibringen, Compile-Time-Konstanten grundsätzlich um Flash abzulegen und über "LPM" etc. darauf zuzugreifen." Hmm. Bereits das folgende (banale) Beispiel dürfte zeigen, wie
, warum ein AVR-Compiler sowas nicht können soll. Daß die Handhabung von Flash-Variablen im AVR-GCC etwas umständlich ist, ist also ganz alleine eine Sache des AVR-GCC und nicht der AVR-Architektur. Aber auch bei µCs mit von Neuman Architektur braucht man trotzdem noch extra Specifier, um die
-
Thread
C mit Visual Studio Code
C-Compiler direkt als Extension in das VS Code einbinden und welcher ist empfehlenswert (gibt es dort GCC)?
Udo S. schrieb im Beitrag #8017595: > Ich persönlich würde ja den GCC Compiler, ggf. make und einen netten > Editor nehmen. VSCode ist nur ein Editor, sonst nichts. Ob nett, ist Ansichtssache. Und da unter Linux gcc und make dranzudengeln sollte man wohl hinbekommen
-
Thread
Frage Bitoperation
Diese Optimierung zu bst/bld wird aber auch nur für Bit 0 gemacht ... zumindest bei avr-g++ 7.2.0 und 8.0.0
um es mit avr-g++ und allen Bits 0...7 und Algorithmen zu testen. Es fällt auf, dass die beste Optimierung nur bei Bit 0 gemacht wird. Mir ist nicht klar warum?
-
Thread
Sinusberechnung auf Controller STM32F030
meisten > Compilern Code Größe und Performance. Tut es leider nicht, scheinbar ist der arm-none-eabi-gcc so gut in der Optimierung, dass es keinen Unterschied macht... auch etwas in der Art: p3= degree * degree * degree; anstelle von tiny_pow bringt nichts (abgesehen davon , dass ich das tiny_pow
nearly equal printf("%f : %f\n", s/MUL, sin(p)); } return 0; } [/c] gcc main.c cordic-32bit.c -o CordicTest
-
Thread
Alseits beliebt GCC plugin error
[pre] % avr-gcc -Os -mmcu=atmega168 -o main.elf main.c i2c_master.c In file included from main.c:2: /usr/local/lib/gcc/avr/4.2.2/../../../../avr/include/avr/delay.h:36:2: warning: #warning "This file has been moved
implicit declaration of function 'i2c_stop' In file included from i2c_master.c:18: c:/avr/winavr/lib/gcc/../../avr/include/avr/delay.h:36:2: warning: #warning "This file has been moved to <util/delay.h>." [/c] Compilieren läßt es sich aber und HEX wird erzeugt. Peter P.S.: Wenn ich die Optimierung
-
Thread
const char *text in C Struktur zur Laufzeit ändern
Welchen Compiler verwendest du? Avr-gcc? Bei mir kompiliert dein obiger Code ohne Probleme/Warnings
will er, dass du nach (const char *) castest. Ich kann den Code auch ohne Casting kompilieren (avr-gcc)
-
Thread
Frage zur Laufzeit von if else
1; // oder auch y++ - als Speziealfall hier, geht teilweise noch schneller, bzw lässt weitere optimierungen des Compilers zu.
Und vergleiche auch noch if(x) y=0; else y=1; mit, gerade mit dem avr-gcc habe ich schon die lustigsten Erfahrungen gemacht.
-
Thread
I2C und MSPGCC - Erfahrungsaustausch gesucht
Das kompiliert doch der GCC garantiert nich ohne zumindest Warnungen?!? Die Interrupts werden da anders deklariert. Ebenso fehlt die für Interrupts zuständige signal.h includiert.
raufzählen bis i==0??? Macht sich ganz besonders gut auf einer 32bit Kiste ;-) Könnte sein, dass du den GCC damit so verwirrt hast, dass er die Schleife drin liess. Normalerweise optimiert er die komplett weg, weil sinnlos.
-
Thread
AT90CAN128 UART Bug? Atmel rausschmeißen?
aufgefallen sein. Poste dochmal nen kompletten Testcode, der den Fehler zeigt. Und da Du nicht den AVR-GCC benutzt, auch das erzeugte Assemblerlisting (mit den Codezeilen). Peter
vergessen: Eventuell kann auch der Compiler was falsch machen (sehr sehr selten) deshalb: alle Optimierungen aus. MfG Joe
-
Thread
Struct mit Schleife durch zählen
gesehen, welche die Elemente entsprechend der Reihenfolge in der Deklaration anordnen. Selbst Optimierungen die sich aus einer anderen Reihenfolge ergeben würden sah ich bis jetzt nicht). Wenn also die Reihenfolge bei dem selben Compiler immer gleich ist, gibt es mit der Zeigermethode keine Probleme.
, sizeof( MyHeizung ) ); [/C] Im gcc-Tutorial gibt es da einen schönen Abschnitt darüber. Padding ist natürlich grundsätzlich ein Thema. Allerdings ist es auf einem AVR müssig darüber nachzudenken, weil es im gcc in diesem Fall keines
-
Thread
Initialisierung von globalen Variablen in Codesourcery
0x000144b0 0x0 c:/program files (x86)/codesourcery/sourcery_codebench_lite_for_arm_eabi/bin/../lib/gcc/arm-none-eabi/4.6.3\libgcc.a(_divdi3.o) .ARM.extab 0x000144b0 0x0 c:/program files (x86)/codesourcery/sourcery_codebench_lite_for_arm_eabi/bin/../lib/gcc/arm-none-eabi/4.6.3\libgcc.a(_udivdi3
0x000144b0 0x8 c:/program files (x86)/codesourcery/sourcery_codebench_lite_for_arm_eabi/bin/../lib/gcc/arm-none-eabi/4.6.3\libgcc.a(_divdi3.o) .ARM.exidx 0x000144b8 0x0 c:/program files (x86)/codesourcery/sourcery_codebench_lite_for_arm_eabi/bin/../lib/gcc/arm-none-eabi/4.6.3\libgcc.a(_udivdi3
-
Thread
C: int * rückgabewert bei einer Funktion
Versuch den Code zu compilieren. error: conflicting types for 'firstEight'| Ich nutze einen gcc Compiler und die Entwicklungsumgebung Code::Blocks 10.05 Ich habe schon einiges ausprobiert aber leider hilft nichts, ich verstehe das Problem nicht. Vllt kann mir ja jmd auf die Sprünge helfen
GNU GCC Compiler
-
Thread
ATTiny2313 Speicher reicht nicht aus
Hi, i.A. werden Source größe und Laufzeit Optimiert, dafür einfach mal auf die GNU-GCC seite gehen und nach Optimierungstufe gucken (AVR-GCC nutzt die gleiche Opti.) grüüüße
-Geschwindigkeit, wobei -O3 afair i.d.R. den schnellsten Code erzeugt. -O0 bedeutet gar keine Optimierung.
-
Thread
[AVR|C] Codeschloss Projekt - wie den Code verbessern
mit denen du auf IO-Variablen zugreifst. Tipp #1: bis() und bic() sind "anders" als im [[AVR-GCC-Tutorial]] unter http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#IO-Register_als_Parameter_und_Variablen beschrieben. Die beiden anderen Funktionen, die mit IO-Registern arbeiten, hast du besser
beim Aufruf des Kompiliers noch etwas verbessern kann, oder Sachen untüpisch sind. Aktuell: avr-gcc -mmcu=attiny2313 -Os -o name.out name.c LG: jan
-
Thread
ARM Programmgröße
oder Thumb zwischen 1KB und 20KB Code liegt. Letzterem Wert nähert man sich schnell, wenn man die GCC-newlib verwenden, also printf, malloc, ... Andere ARM-Umgebungen sind in dieser Frage u.U. deutlich sparsamer als WinARM/GnuARM/Yagarto. Jenseits dieses Grundballasts ist der Code insbesondere im
sieht so aus, als ob IAR bei ARM und Thumb verschiedene Backends (Codegeneratoren) verwendet. Bei GCC ist es das gleiche Backend für beide Modi.
-
Thread
Rückgabe vom Typ uint32_t funktioniert nicht
im c-File der main() als auch im c-File der Funktion eingebunden. Achso, es geht um einen Avr & gcc. Die Optimierung habe ich eingeschaltet (-0s) Hat jemand eine Erklärung?
mal "volatile" an.. Der Compiler arbeitet bei mit volatile deklarierten Variablen ohne jede Optimierung.... Variable in der Unterfunktion debuggen und anschauen ob hier noch alles stimmt. Aber unbedingt wie schon erwähnt: Code posten! Gruß Choose
-
Thread
4 Byte in 1 float wandeln
pData[1] << 8) | (pData[0])); printf("Value: %f\n", dResult); return 0; } $ rm -f main ; gcc -o main main.c $ ./main Value: 3.141593 [/code] ..will man aber nicht machen (gcc warnt auch (vollkommen zurecht) sobald man die Warnungen nicht unterdrückt und Optimierungen anfordert).
-
Thread
Suche Softcore Alternative mit Compiler und Debugger
> hätte. Hi, Ich habe schon mehrmals erfolgreich gcc und gdb mit mingw32 übersetzt. Der Vorteil dabei ist, dass man nachher kein cygwin braucht um die laufen zu lassen. Ist vielleicht etwas für Dich. Gruß Martin
Hallo zusammen, Danke für die Infos. GCC und GDB für Windows sollte eigentlich kein Problem sein. Da sollte ich Übung durch YAGARTO haben. Viele Grüße, Michael
-
Artikel
AVR-GCC
aus dem svn kommen (svn co svn://gcc.gnu.org/svn/gcc/branches/branchname gcc ,mit branchname gcc-version-branch, aktuell ist gcc-6-branch) oder aus dem aktuellen trunk (svn co svn://gcc.gnu.org/svn/gcc/trunk). Die AVR-LibC: Download. Achtung
Einstieg in die Nutzung des avr-gcc unter MS-Windows mit WinAVR (englisch) AVR-GCC und Linux GCC-Forum auf mikrocontroller.net
-
Thread
Ab wann C statt ASM ?
Nutzt du die kostenlose Toolchain des GCC -> WinAVR GCC genannt und Atmel-AVR-Studio so kannst du - C programmieren lernen - findest viele Beispiele zu eigentlich allen Themen wie Timer, SPI, I2C, UART und ADC - hast eine ausreichend gute
wichtigsten, du erfüllst noch einen guten Zweck weil du die freie Arbeit der Entwickler vom WinAVR GCC damit indirekt unterstützt ;) Gruß Hagen
-
Thread
ARM Einstieg Hilfe bei Controller und IDE Wahl
GCC Make Openocd ST-Discovery F4 - Billiger wirds schwer
einmal nicht viel über C) zu installieren und dann die entsprechende Werkzeugsammlung für den ARM (gcc-arm usw.) zu installieren. Wenn Du Schritt für Schritt vorgehst, solltest Du sehr bald die obligatorische LED zum Blinken bringen können :-) Chris D.
-
Thread
Datentypen und Berechnungen
Hm, ohne Optimierung wird der Code viel länger: uint8_t test2(uint8_t a, uint8_t b) { 92: df 93 push r29 94: cf 93 push r28 96: 00 d0 rcall .+0 ; 0x98 <test2+0x6>
von test2 nur ein 8-Bit Wert returniert. Dies ist so sein das ABI geändert wurde, irdendwo zwischen GCC Version 4.2 und 4.3 wenn ich mich recht entsinne: Es gibt keine Promotion von 8-Bit Werten zu 16-Bit Werten mehr.
-
Thread
UPDI Programmer bauen - alias "El Tangas"
Das Problem hier ist nachgelagert. Vielleicht kannst du mir helfen wie ich AS7 mit aktuellen avr-gcc-9.1 überredet bekomme C++ für die neuen µC kompilieren zu können?
abzielst, der soll leider nicht in Atmel Studio funktionieren. [/c] Ja, aber funktioniert in MPLABX, GCC für AVR gibt es dafür auch.
-
Thread
"State Machines": Anzahl States minimieren oder maximieren?
> SomethingElse = 20 > } State_t Mit solchen Lücken, macht man sich fix die Switch/Case Optimierungen kaputt. Es degeneriert zu einer if Kaskade.
Fanboy D. schrieb im Beitrag #5494611: > Mit solchen Lücken, macht man sich fix die Switch/Case Optimierungen > kaputt. Es degeneriert zu einer if Kaskade. Zeig mir doch mal bitte 'nen Beispiel dafür.
-
Thread
sprintf verfälscht adc werte
Seiteneffekte beliebigen Speicher und beliebige Register modifizieren können (was aus Gründen der Optimierung aber sonst unerwünscht ist, aber oben im Bezug auf den ADC-Wert der Fall ist). So jedenfalls habe ich es aus einer längeren und sehr interessanten Diskussion vor ca. 2 Monaten in comp.embedded
Ja. Die Optimierungen moderner Compiler, die dem Einen ein Segen sind, werden sonst leicht zum Fluch.
-
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 ?