www.mikrocontroller.net

Forum: Compiler & IDEs 64bit datentypen avr


Autor: Jens B. (sio2)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich versuche auf dem m88 mit 64bit daten zu hantieren. aber ein sizeof 
gibt bei long long, uint64_t und uintmax_t nur 0 aus. <inttyoes.h> ist 
inludiert, und der compiler hat auch nicht die option "-mint8" ausser 
ich uebersehe da was.

avr-gcc -c -mmcu=atmega88 -I. -gstabs   -Os -Wall -Wstrict-prototypes 
-std=gnu99  cmd.c -o cmd.o


Wie kann ich mit 64bit arbeiten?
thnx.

: Verschoben durch Admin
Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jens B. schrieb:
> Ich versuche auf dem m88 mit 64bit daten zu hantieren. aber ein sizeof
> gibt bei long long, uint64_t und uintmax_t nur 0 aus.

Bei mir nicht.
Wie sieht der Code dazu genau aus?
Welche avr-gcc-Version?

Autor: Jens B. (sio2)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Code sieht so aus:
lcd_putchar(sizeof(uintmax_t)+'0');
uint32_t und uint16_t zeigen es richtig.

avr-gcc (Gentoo 4.4.3 p1.0) 4.4.3

Autor: Grrrr (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jens B. schrieb:
> lcd_putchar(sizeof(uintmax_t)+'0');

Öhm. Räusper. Hust. Röchel. Würg.
Das ist also der Code der Dir das Ergebnis von sizeof anzeigt? Aha. 
Interessant.

Willst Du noch mal raten? Dreimal darfst Du.

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jens B. schrieb:

> avr-gcc (Gentoo 4.4.3 p1.0) 4.4.3

Ein avr-gcc auf Basis des gcc 4.4.3?
Das dürfte dann wohl mal wieder ein avr-gcc sein, der nur aus den 
offiziellen gcc-Quellen entstanden ist, ohne die zusätzlichen avr 
spezifischen Patches.

Hier findest du Infos, wo du einen "vernünftigen" avr-gcc für Linux 
bekommst:
Beitrag "Interrupt wird beim linken nicht in den interrupt vektor eingetragen"

Autor: Grrrr (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Grrrr schrieb:
> '0'
Verdammt. Ich brauche Urlaub. Sorry.

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
führst du Selbstgespräche? :-)

Autor: Grrrr (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Klaus Wachtler schrieb:
> führst du Selbstgespräche? :-)

Ich versteh' mich so gut. ;-)

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jens B. schrieb:
> Ich versuche auf dem m88 mit 64bit daten zu hantieren.

Dann darfst Du Dich aber nicht wundern, wenn der Flash explodiert und 
die CPU keucht.

64Bit ist zwar implementiert, aber nicht für den AVR optimiert und daher 
deutlich codefressender und deutlich langsamer als float.


Versuch mal mit Arrays aus 8, 16 oder 32Bit-Variablen auszukommen. 
Insbesondere wenn immer nur ein Bit manipuliert werden soll, ist ein 
"uint8_t foo[8]" am schnellsten und codesparendsten.


Peter

Autor: SiO2 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"Dann darfst Du Dich aber nicht wundern, wenn der Flash explodiert und
die CPU keucht."

Explodieren? Das ist noch untertrieben. 10 Zeilen=> 2-4KB (ok, war auch 
float mit bei)

Im endeffekt wollte ich 64bit, weil ich nicht mit float hantieren wollte 
und genauigkeit brauchte.

Das Problem lag wirklich an der GCC version. KA was sich die 
crossdevleute gedacht haben, aber ich werde denen mal schreiben oder bug 
aufmachen.

Besten Dank.

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
SiO2 schrieb:
> Das Problem lag wirklich an der GCC version.

Das wiederum ist allerdings wichtig zu wissen!  Bitte frage die
Leute von Crossdev mal, ob der Compiler ungepatcht war.  Wenn der
"aus der Dose raus" sowas falsch macht, ist was faul, und du solltest
unbedingt bei GCC einen Bugreport loslassen.

Der AVR-GCC 4.4.x ist bislang noch sehr wenig getestet, um so wichtiger
aber ist es, dass erkannte Bugs auch gemeldet werden.  Wenn ich mich
recht erinnere, benutzt er einen neuen Registerallokator, sodass
zumindest schlechter optimierter Code durchaus im Rahmen des Erwarteten
liegt, aber ein nicht funktionierender long long bzw. uint64_t ist
nicht im Rahmen des Erwarteten.

Autor: Jens B. (sio2)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"Der AVR-GCC 4.4.x ist bislang noch sehr wenig getestet, um so wichtiger
aber ist es, dass erkannte Bugs auch gemeldet werden."

Es scheint nicht direkt am 4.4.* zuliegen. Nach einer Installation nach 
http://www.nongnu.org/avr-libc/user-manual/install...

klappt es auch mit 4.4.3. Natuerlich ohne extra zu patchen.

Also werde ich mal die crossdevler anschreiben.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.