-
Thread
Neue OpenOCD-Firmware für USBProg (18x schneller)
originale (circa 10.9 KB/s Übertragungsrate auf Flash). Es gibt eigentlich noch Raum für weitere Optimierungen, also bitte diese neue firmware testen und mir Bescheid über das Ergebnis sagen. Cahya.
2.33 GHz Intel Core 2 Duo, 2GB RAM * OpenOCD rev 1454 * ARM GNU gdb (GDB) 7.0.1 * AVR gcc version 4.3.2 (GCC) * Firmware was compiled with optimization: -Os * Target board: LM3S2110 CAN Device Evaluation Board * jtag_speed 0 * File size to flash: 64984 bytes * File
-
Thread
.dll ohne Code/Header nutzbar?
Grundgerüst des verwendeten Quelltextes schließen kann, aber auch nur dann, wenn die DLL ohne Optimierung übersetzt worden sein sollte.
Hängt das name mangeling vom Code (main.c vs main.cpp) ab, oder vom Compiler (als Beispiel mal den gcc: gcc vs g++)? Man kann den C++-Compiler ja auch mit der C-Datei füttern.
-
Thread
AVR Eclipse Plugin 2.3
optimizations disabled; functions from <util/delay.h> won't work as designed" Schalt halt die Optimierung ein. Oliver
Simon K. schrieb im Beitrag #1903082: > Was soll mich > bewegen die Software statt dem WinAVR (AVR-GCC avr-libc) zu benutzen? Neuere GCC-Versionen (4.4.3 statt 4.3.3), Support für neuere Devices, behobene Bugs, neue Bugs ;) mfG Markus
-
Thread
Laden des Hexfile in VMLab schlägt fehl.
:0A86CE0000000D0A0D0A00740400FC :00000001FF Im GCC Output steht: Webserver_MEGA32.elf : section size addr .text 34174 0 .data 346 8388704 .bss 1056 8389050 .debug_aranges
die Version 1.14 bei Ulrich gezogen und compiliert. Hier die Adressen aus meinen HEX Files AVR-GCC 4.1.2 0x7B9C passt ACR-GCC 4.3.0 0x843E passt nicht Gewaltiger Unterschied. Compiliert mit dem gleichen makefile.
-
Thread
"_delay_ms" zu kurz, ATMega48
Welche Compileroptimierung verwendest du? Delay generiert nur mit eingeschalteter Optimierung genau delays. Ich verwende -Os
Und das auch nur bei einer alten GCC-Version. Bei einer aktuellen ist auch das kein Problem mehr!
-
Thread
Formel Mikrocontrollergerecht machen
Sekunden Ausführungsdauer. c) Formel eintippen und Compiler entscheiden lassen und auf gute Optimierung hoffen. Habt ihr noch weitere Vorschläge? Verzweifle sonst.
macht oder nicht, musst Du ausprobieren. Viele Compiler haben fuer kleine Konstanten solche Optimierungen eingebaut.
-
Thread
AVR C Programmierung unter Linux
/gcc.gnu.org/onlinedocs/gcc-7.5.0/gcc/AVR-Options.html "Support" auf Compilerebene bedeutet nur, dass avr-gcc eine Specs-Datei für das Device mitliefert — und natürlich dass die Familie unterstützt wird
vielleicht deren MPLAB X IDE? Soweit ich weiß hat µChip 2 AVR-Toolchains im Angebot: Einen avr-gcc und im XC8 einen verkrüppeltem avr-gcc, wo man für Freischaltung aller Optimierungen blechen muss. Hab ich aber nie verwendet oder getestet oder mir angeschaut, von mir hommt da nichtmal Halbwissen
-
Thread
Welches memcpy ist schneller?
bis zu 24 Bytes / Takt, die for Schleife gerade mal 0.8 Bytes / Takt (sofern nicht die AVX2 Optimierungen angemacht werden). Mehr Infos zum Timing sind im Anhang. [c] #if SOLUTION == 0 /* dumb C solution */ void* testcpy(void *dst, void *src, size_t len) { size_t n; BYTE *p
Zielarchitektur dann wirklich ASM (in der Implementierung) nutzen? *) Siehe z.B. https://github.com/gcc-mirror/gcc/blob/master/libgcc/memcpy.c
-
Thread
Würde gerne Assembler in C umschreiben, aber ich blick's net
könnte? "Application Binary Interface" Erste und einzig Sichere Referen sind die Compiler-Quellen $GCC_SOURCE/gcc/config/avr/avr.* Ein bissl steht bestimmt auch im avr-gcc Tutorial hier und in http://www.roboternetz.de/wissen/index.php/Avr-gcc/Interna#Registerverwendung >> Das T-Flag könnte
, alte SIGNAL oder INTERRUPT mit dem guten, alten > avr-gcc 3.4.6. Zu GCC 4 kann ich keine Tipps geben. Das hat nichts mit der GCC-Version zu tun, wohl aber mit der avr-libc-Version. Ist generell keine gute Idee, neu hinzu kommenden Nutzern die Verwendung
-
Thread
womit füllt atmel bit shift (>>) die neuen bits auf?
lss-file > postest? Genau, zeige uns den generierten Assembler-Code und nenne uns die verwendete GCC-Version.
[code] ..... -O1 .... [/code] und da wunderst du dich, dass der gcc nicht vernünftig optimiert?
-
Thread
ENC28J60 Basics[Beispielprogramm in AVRGCC für atmega8]
stammt meine Version von avrgcc glaube ich noch aus dem nicht-winavr zeitalter, ich hab pnotepad und gcc einzeln installiert, der GCC ansich ist jedenfalls version : avr-gcc (GCC) 3.4.3 Die Warnings kann ich mir immer noch nicht erklären stack.c: In function `ip': stack.c:87: Warnung: Zuweisung
directory G:\uC\enc\default\ does not exist gcc plug-in: Created directory G:\uC\enc\default\ gcc plug-in: Error: Object file not found on expected location G:\uC\enc\enc.elf Make sure your makefile specifies the output .elf file as enc.elf gcc
-
Thread
[avr-gcc]. post-increment Version von avr/pgmspace.h
); k = pgm_read_byte (p++); v = pgm_read_byte (p++); [/c] Und freu dich an dem Code, den avr-gcc daraus macht. Der Königsweg neuer (Target-abhängiger) Qualifier wie "flash" oder "pgmspace" wird gcc -- wenn das überhaupt jemals unterstützt wird -- nicht in absehbarer Zeit liefern. Damit gingen
}; char bar (const pgmspace mytype_t * p) { return p->c + p->string[4]; } [/c] und gcc könnte die passenden Dereferenzierungen erzeugen. Zurzeit gibt es nur ein Attribut, keinen Qualifier.
-
Thread
MCU (ds30F6012A) defekt?
im Beitrag #1743588: > Will ich wohl meinen, der aktuelle dsPIC Compiler von microchip ist ein > GCC ;) Wer da den CCS nutzt, dem kann man nicht helfen :D ?? Microchip hat einen GCC für die dsPIC? Wie sieht bei dem die Code-Optimierung aus? generiert er aus einem Switch MIT defualt-cases und beliebigen
goto end_switch; end_switch: [/c] Und ja, es müssen doppelte '&&' sein. Doku dazu: http://gcc.gnu.org/onlinedocs/gcc-4.5.0/gcc/Labels-as-Values.html Andreas
-
Thread
Arithmetik in C
drauf. Als letztes könnte ein Blick auf den erzeugten Assemblercode noch hinweise auf mögliche Optimierungen bringen. PS: Irgendwie sind 2KB Flash fast immer zu wenig :-D
"PS: Irgendwie sind 2KB Flash fast immer zu wenig :-D" Volle Zustimmung, zumindest beim AVR-GCC. Deshalb nehme ich eigentlich immer den ATMega8, der kann sogar schnell multiplizieren. Ich weiß jetzt nicht, wie das bei den kommerziellen Compilern ist. Durch den 16Bit-Befehlssatz und
-
Thread
Wie ist PORTB implementiert?
interpretiert. Da es sich hier um ein Hardware Register handelt kann der Compilier keine Annahmen für Optimierungen treffen, daher ist das volatile notwenig. Der so erzeuge Pointer wird sofort dereferenziert damit damit eine einfach Zuweisung mit = möglich ist. Man kann sich das alles zur Compilezeit mit
(Ausnahmen: AVRrc und Operationen wie ELPM. Außerdem Instruktionen wie RAMPx verwenden, was aber GCC nicht nutzt). > als ein 8 Bit breiter Pointer Nitpick: Der Zeiger ist 16 Bits breit. Das Ziel ist ein 8-Bit Wert.
-
Thread
Timeout über Zeitkritische Funktion
routine zugreift und es ggf. ändert). Aber das wird wohl daran scheitern, dass man keine register in C (GCC) reservieren kann, oder?
Daniel G. schrieb: > Wie kann ich denn ein Register reservieren in C mit GCC? [c]register uint32_t myflag asm("r2");[/c] Dummerweise funktioniert register...asm nicht zusammen mit volatile. Kann also sein, dass der Optimizer die Zugriffe dann wegoptimiert. Dann solltest
-
Thread
Kleiner endlicher Automat (FSM)
jeweiligen Funktionen auch direkt aufrufen: Hmm. Ich denke es ist kein guter Stil, sich auf eine Optimierung zu verlassen damit ein Programm funktioniert. Spätestens wenn man zum Debuggen die Optimierung ausschaltet ist es vorbei damit. Besonders übel wäre es auch, wenn in irgendeinem Spezialfall die Optimierung nicht angewandt wird und das Programm crasht. Das wäre ein schwer zu lokalisierender Bug. Da schreibe ich lieber die "korrekte" Version mit Funktionspointer.
-
Thread
rechnet der preprocessor in C gcc (AVR) multiplikation aus?
Peter II schrieb im Beitrag #4120985: > Joachim B. schrieb: >> rechnet der preprocessor in C gcc (AVR) Multiplikation aus? > > nein, dafür ist er nicht zuständig In BASCOM ist das mal wieder super einfach: Const Mul = Const1 * Const2 / Const3 ... Ich wollte schon mit GCC anfangen, weil
0; } [/c] der Präprozessor macht daraus [c] ... int a = 3 * 4; ... [/c] und der gcc, ganz ohne Optimierungen [code] ... 400535: c7 45 fc 0c 00 00 00 movl $0xc,-0x4(%rbp) ... [/code] 3*4 wird also ausgewertet zu 12, bzw. 0xc
-
Thread
kompilierter code ist unter Linux größer als Win!
Hallo leute, Ich habe bis jetzt immer unter Windows mit WinAvr (avr-gcc (GCC) 4.1.2 (WinAVR 20070525)) und dem Programmers Notepad code für einen attiny 2313 kompiliert. Unter Linux mit der neuesten AVR-GCC Version und der gleichen makefile/code erzeugt mir das jedoch
kann ich die Makefile (erstellt aus einem WinAvr template) generell nicht unter linux benutzen? AVR-GCC funktioniert augenscheinlich wunderbar, optimierungs-switch und auch jegliche anderen Einstellungen der Makefile werden korrekt übergeben. Werde nacher noch folgendes versuchen: - gleiche Version
-
Thread
Ab wann lohnt sich ein 32bit Controller? Compilerkosten?
unnötig oft ausgeführt. > Soweit ich weiß sind die 32bit Compiler extrem teuer. oder? Den GCC gibts doch auch für 32-Bitter (z.B. ARM Cortex M3), aber manchmal ist er etwas kniffelig zu installieren und zu konfigurieren, ehe er läuft. Eine ähnlich sorgenfreie Ready-to-run Installation, wie
übrigen, Optimierung kostet auch Zeit. Und was nützt es 3 Euro bei den Komponenten zu sparen, wenn ich dafür eine Woche länger brauche, bis alles zu meiner Zufriedenheit läuft? Und nicht zu vergessen. Hat man sich
-
Thread
Microcontrollerboard mit 16Bit-Controller
guter Assemblerprogrammierer noch etwas besser optimiert, wage ich zu bezweifeln, da die Optimierung über ein großes und weiterhin wachsendes Projekt fortgeführt werden muß. Dieter
preisgünstig lösen könnte. Der GNU-Compiler erzeugt recht guten Code; Probleme, wie sie hier oft unter AVR-GCC angesprochen werden, habe ich damit nie gehabt. Ich verwende die Ausgabe 98r2, die 'mal auf einer Hitachi-CD enthalten war. Nur Mut Michael
-
Thread
XC32 Inline Funktionen
files. [/pre] Ich empfinde das als höchst unsauber und habe zum Vergleich mal in den Abschnitt der gcc Dokumentation geguckt (https://gcc.gnu.org/onlinedocs/gcc/Inline.html). [pre] By declaring a function inline, you can direct GCC to make calls to that function faster. One way GCC can achieve this
count_b (void) { return fun(); }[/c] > [...] und habe zum Vergleich mal in den Abschnitt der gcc > Dokumentation geguckt > (https://gcc.gnu.org/onlinedocs/gcc/Inline.html). Im Endeffekt das gleiche in Grün: Um Inlinen zu können, muss gcc die Definition kennen: Entweder klassisch, indem er
-
Thread
Taster abfragen UND dann.
Björn wrote: > noch jemand da?? RTFM! [[AVR-GCC-Tutorial]]...
ja bringt auch nix, kompilieren hat es sich ja vorher gelassen. jetzt kommt dauernd dieser GCC-plugin-error wegen dem *.elf
-
Thread
Fehlermeldung ISE
/14.4/ISE_DS/ISE//lib/lin/libboost_iostreams-gcc41-mt-p-1_38.so.1.38.0 /opt/Xilinx/14.4/ISE_DS/ISE//lib/lin/libboost_program_options-gcc41-mt-p-1_38.so.1.38.0 /opt/Xilinx/14.4/ISE_DS/ISE//lib/lin/libboost_regex-gcc41-mt-p-1_38.so.1.38.0 /opt/Xilinx/14.4/ISE_DS/ISE//lib/lin/libboost_system-gcc41-mt-p-1_38.so.1.38.0 /opt/Xilinx/14.4/ISE_DS/ISE//lib/lin/libboost_thread-gcc41-mt-p-1_38.so.1.38.0 /opt/Xilinx/14.4/ISE_DS/ISE//lib/lin/libboost_zlib-gcc41-mt-p-1_38.so.1.38.0 /opt/Xilinx/14.4/
-
Thread
unter C die Funktion Sleep() nutzen
Deklarier i als volatile, dann darf der compiler nix wegoptimieren. Der GCC lässt leere Schleifen stehen, der icc macht sie öfters mal weg. Compiler speziell für uC dürften bei weitem nicht so gut optimieren.
I_ H. wrote: > Der > GCC lässt leere Schleifen stehen, ... Schon ein ganzes Weilchen nicht mehr. Die sind schneller weg, als man gucken kann.
-
Thread
Warum eigentlich C? (bitte ohne geflame und zynische Kommentare)
erweiterbar/flexibel. (z.b. Exceptions oder RTTI weglassen) Leider muss ich auch sagen das die Optimierung der Compiler schlechter ist als viele meinen. Ich kann jetzt nur von 6er und 7er MS-compieler sprechen dort ist die optimierung schlechter geworden. Wenn es wirklich optimiert sein soll hilft nur
einstampft, kannste deine Programme in die Tonne kloppen. Für C hingegen kannste Borland, Microsoft, GNU-Gcc (mit oder ohne Cygwin) und wie sie alle heißen, benutzen. Hoffe, das hilft dir ein ganz klein bissken -- soweit "meine" Sicht der Dinge.
-
Thread
ATmega8 und LCD HD44780 nur erste Zeile leuchtet
Problem mit HD44780kompatiblen LED. Ich habe auf meinem ATmega8 das Beispielprogramm aus dem AVR GCC-Tutoial laufen lassen. http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial/LCD-Ansteuerung Leider zeigt das LCD nur in der erste Zeile voll angesteurte Balken. Wenn ich das Programm aus
Es ist auch egal welches meiner baugleichen LCDs ich verwende. Angeschlossen ist es genau wie im GCC-Tutorial beschrieben --> an Port D?
-
Thread
Preprozessor / Rechnen
berechnet > oder im Programm?? Weder noch. Sie wird im Compiler berechnet. Eingeschaltete Optimierung vorausgesetzt. > 2 Wozu wird 0.5 adierrt ?? Rundung zum nächstliegenden ganzzahligen Wert. Konvertierung von Fliesskommawerten zu Ganzzahlen rundet nicht sondern schneidet den Nachkommaanteil
Konstante ist -- wovon ich mal ausgehe -- dann wird der Ausdruck vom Compiler ausgewertet. Zumindest macht GCC das so, nennt sich dann "Faltung der Konstanten". AFAIK gehört die Konstantenfaltung zu den Optimierungen, die auch bei deaktivierter Optimierung gemacht werden. Falls XTAL nicht zur Compilezeit
-
Thread
Atmel MC; ATTiny45/85 Alternative mit mehr Flash - 16kByte, Rest möglichst gleich, stromsparend,.
jede Bitvariable long long verwenden, die Optimierung einschalten (-Os) und keinen Copy&Paste-Monstercode, sondern Unterfunktionen mit Parametern.
AVRStudio zeigt doch nach dem Build immer an, wieviel Flash und SRAM belegt werden. Bzw. für den AVR-GCC macht das avr-size.exe.
-
Thread
Look-Up Table wie speichern
Konstanten gefaltet werden (ok, bei volatile eh kein Thema mehr). > Dafür muß du aber keine frühere GCC haben, die unbedingt PROGMEM braucht > und __flash nicht versteht. Mit progmem kann man das gleiche Interface implementieren wenn man denn will. __flash gibt's seit avr-gcc v4.7. Ohne __flash-Support
schrieb im Beitrag #5938616: > Auf den Thread neulich wurde ja schon verwiesen. Konkret für avr-gcc > lässt sich get_mem_unused() von hier nutzen: > > https://rn-wissen.de/wiki/index.php?title=Speicherverbrauch_bestimmen_mit_avr-gcc#Dynamischer_RAM-Verbrauch Ich hab das eben überflogen und
-
Thread
Speicherverbrauch bei Funktionsaufrufen (Funktion in Funktion)
Compiler eine verschachtelte Schreibweise der Aufrufe "entschachtelt". Bei einem simplen Test rief avr-gcc beispielsweise mit Optimierung verschachtelt auf, ohne nicht.
push, pop, call, ret) nur auf > den SRAM möglich, also nicht auf MMIO. Dummerweise liegen bei AVR-GCC auf dem Stack nicht nur die Return-Adressen, sondern auch die lokalen Daten. Und die werden ganz normal geschrieben.
-
Thread
Stack filled to 100% - kann das einer erklären?
Wurzelberechnung und beim Arkussinus. Der IAR sollte eigentlich gut zu optimieren. Hast Du die Optimierung ausgeschaltet? Als Default sollte man "-Os" nehmen. Schlechtere Optimierungen nur dann, wenn man weis, was man tut. Peter
sollte man "-Os" nehmen. > > Und wofür steht das? "-Os" ist eine Option für den Optimizer vom gcc. Das s steht für size. Der Compiler soll also möglichst kleinen Code erzeugen.
-
Thread
MSP430 startet sporadisch neu
Ob ein Reset erfolgte kannst Du nur mit den Flags für den Resetgrund feststellen. Z.B. beim AVR-GCC läuft jeder Interrupt in den Resetvektor, für den kein Handler aufgesetzt wurde.
Fehler eindeutig nachgewiesen ist, kann ich mich an die Fehlerbehebung setzen und mich mit Code-Optimierung beschäftigen. Vielen Dank für eure Unterstützung. Grüße Andreas
-
Thread
msp430 einsiteg
spricht nichts gegen IAR. Manche ziehen das ressourcenhungrigere, aber etwas modernere CCE vor. Der GCC für MSP430 (MSP-GCC) ist eine gute Wahl, wenn man große Projekte realisieren will oder bereits Erfahrung mit dem AVR-GCC hat. Allersings weiß ich nicht, ob der eZ430-Stick unterstützt wird, im Zweifelsfall
verschiedene Voreinstellungen, was den Optimierungsgrad betrifft. Meistens ist bei Release eine höhere Optimierung eingestellt, wie Rufus schon sagte. Aber auch da sollte man erst prüfen, ob der Code noch wie gewünscht läuft. Es gibt durchaus Konstellationen, wo hoch optimierter Code nicht so läuft, wie man
-
Thread
Unix Programmierung
apt purge manpages-de Die manpages haben nichts mit Fehlermeldungen zu tun. Die Übersetzungen für gcc sind für z.B. gcc 11 im Paket gcc-11-locales, das aber bei Ubuntu sowieso für alle gcc-Versionen ab 10 kaputt zu sein scheint. Das kann man sehen, wenn man mal https://packages.ubuntu.com/impish/all/gcc-11-locales/filelist mit https://packages.ubuntu.com/impish/all/gcc-9-locales/filelist > ein paar Werkzeuge für die Kommandozeile (Unix funktioniert ohne IDE). > Na gut, make brauchst du erst nächste
-
Thread
Welche Programmiersprache soll ich lernen?
unbekannten Programmiersprache anfangen wollen. In der zweiten Zeile steht dann: "It uses the GCC AVR tool chain and will be compatible with GCC regarding calling conventions etc." Aus offensichtlich pragmatischen Gründen orientiert sich FPC an der GCC-AVR-Tool-Chain. Dagegen ist ja im Prinzip nichts zu sagen, aber dann kann ich doch genau so gut direkt bei *allen* GCC-Werkzeugen, einschließlich des C-Compilers, bleiben. rhf P.S.: Die Art und Weise des "Inline-Assemblings" finde ich allerdings deutlich schöner gelöst als im GCC-C-Compiler. http://wiki.freepascal.org
-
Thread
Atomic-Variable etc. - ich verstehe fast nur Bahnhof
dass man sie auf Single-Core Systemen *ohne* Cache (also Cortex-M3/4) weglassen könnte, das weiß der GCC nur anscheinend nicht.
den Compiler klar, dass sich die Variable jederzeit ändern kann und er kommt nicht auf die Idee Optimierungen durchzuführen, die zu beschädigten Daten führen. "Volatile" garantiert aber keinen atomaren Zugriff. Ob der Zugriff atomar ist, hängt von einigen Randbedingungen ab. Am besten schaut man ins
-
Thread
Merkwürdige Compileroptimierung, wo liegt (mein) Denkfehler
laufen, wird der Code um 20Byte länger und alles scheint zu stimmen. Was ist hier los? Compiler: AVR-GCC-4.8.0, Optimierung -s, Target ATMEGA8 Harald
In http://gcc.gnu.org/gcc-4.8/changes.html steht geschrieben: "GCC now uses a more aggressive analysis to derive an upper bound for the number of iterations of loops using constraints imposed by language
-
Thread
Klarstellung fuer Anfaenger
Beim AVR ist der einzige wesentliche Unterschied der fehlende MUL-Befehl bei den ATtiny. Aber der AVR-GCC weiß das. > Da > ich Assembler ehrlich gesagt vermeiden wollte soweit es geht, sprach > mich der AVR mit der (angeblich) guten Unterstuetzung durch gcc an. Ja, der AVR-GCC ist uneingeschränkt
Versuch wert sein. Wie gesagt, so hab ich angefangen. Als Software noch WINAVR (hat den avr-gcc Compiler und das IMHO sehr gute programmers Notepad dabei) und zum Flashen Ponyprog. Wenn du keinen Assembler willst und ein bisschen C kannst ist das perfekt. zu den PICs sag ich nix ;-)
-
Thread
Zählvariable in for-schleife springt direkt auf Abbruchbedingung
gesetzt. Dann springt er in die Schleife und i ist direkt 8. (Mein Kubus besteht aus 8 Punkten). Optimierungen sind aus, ich arbeite mit CodeBlocks(GCC) MfG Chaos
gcc erkennt das Semikolon-vor-Schleife-Problem (mit hochgedrehten Warnungen) leider nur bei if und else, nicht bei for und while.
-
Thread
Überlauf geht verloren
reinen Betrachtung auf C Ebene. Oder muss er sich an den Auswirkungen orientieren? Dann dar er die Optimierung nicht durchführen, weil sie ja nicht den identischen Effekt hat. In der Tat eine gute Frage.
Betrachtung auf C Ebene. > Oder muss er sich an den Auswirkungen orientieren? Dann dar er die > Optimierung nicht durchführen, weil sie ja nicht den identischen Effekt > hat. > > In der Tat eine gute Frage. Darauf wollte ich eigentlich nicht hinaus. Der GCC wird REG |= (1 << const) als sbi übersetzen
-
Thread
Dividieren durch Schiften Gesperrt
die Compiler sich so verhalten wie von mir beschrieben. Relevant dürfte hier ja vor allem der gcc sein. Unter http://gcc.gnu.org/onlinedocs/gcc-4.3.2/gcc/Integers-implementation.html#Integers-implementation steht: [pre]Signed `>>' acts on negative numbers by sign extension.[/pre] Zum Vergleich
auch n:0. Das einzige, was bei gcc sicher einen arithmetischen Shift zu erzeugen in der Lage wäre, wäre ein nicht portierbares __builtin_ashr oder so, das es jedoch nicht gibt. Gleiches gilt für rotate, daß sich zwar auch für avr-gcc
-
Thread
unions structs bildfields
als compiler nutze ich avr-gcc
, and objects described in the library clause (clause > 7). > > Man kann mit dem avr-gcc alles nutzen, was in "clause 7" steht? Ob er (bzw. die avr-libc) das vollständig untestützt, kann ich nicht sagen. Ich vermute mal, nicht. Aber zumindest wird gcc per Default im "hosted"-Modus betrieben
-
Thread
GCC bei vielen Bitshiftingfunktionen sehr suboptimal?
arbeitet, aber ein weeeeenig kann ich ja wohl von ihm erwarten? Teilweise klappts ganz gut mit der Optimierung, aber eben an einigen Ecken und Kanten nicht. Ich benutze übrigens -Os als Optimierungsstufe. Vielen Dank, Matthias
etwas > mitdenken sollte :-) Allerdings. Aber mich wundert teilweise schon, wie intelligent der GCC doch ist. Der ersetzt mir doch tatsächlich eine Subtraktionsschleife durch einen Aufruf von _divmodqi4...
-
Thread
for Loop in C / die 10000ste dumme Frage
HW-Loop nutzen. Nutzt man den Schleifenzähler für Operationen in der Schleife, werden solche Optimierungen aber verhindert.
#Oliver S. schrieb im Beitrag #6157343: > Im Falle eines mingw-x86_64-gcc auf Windows 10 z.B. ein unsigned char. Da > ist es also schonmal nichts mit einem schnelleren 32-Bit-Typ. Ich glaube, auf x86 ist 8 Bit auch nicht langsamer als 32 Bit. Bei 16 Bit sieht's wohl anders
-
Thread
Initialisiertes Char Feld mit Länge 1 und Inhalt '\0'?
sollte dann auch zu den restlichen Char Feldern passen und keine Extrabehandlung erfordern... Der gcc wie nebenan empfohlen: $ m68k-elf-gcc -v Using built-in specs. COLLECT_GCC=m68k-elf-gcc COLLECT_LTO_WRAPPER=/usr/home/holm/cross/m68k/libexec/gcc/m68k-elf/4.6.2/lto-wrapper Target: m68k-elf
without-headers --with-gmp=/usr/local --with-mpfr=/usr/local --with-mpc=/usr/local Thread model: single gcc version 4.6.2 (GCC) Optimierung ist -Os -fomit-frame-pointer Gruß, Holm
-
Thread
Inverse Kinematik auf dem ATMEGA8-16
2; % use pow(x,2) or x*x ? AVR-GCC? q3 = -acos((L12^2+L23^2-p13sq)/(2*L23*L12))+pi; % acos(x) in AVR-GCC? % q2 b1 = atan2(p13(3),sqrt(p13(1)^2+p13(2)^2)); b2 = acos((L12^2+p13sq-L23^2)/(2*L12*sqrt(p13sq))); q2 = -(b1+b2); %
, also haut mich nicht, wenn ich was falsch mache) q1 = atan2(y,x); % tan(x) function in AVR-GCC? atan2(y,x) ? p011 = [x;y] p011sq = p01(1)^2+p01(2)^2; p011 = p011/p011sq*L01 % q3 p01 = [p011(1); p011(2); H01;]; % cos(x) sin(x) in AVR-GCC?