64bit datentypen avr

OP #1650945
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.
Gast #1650994
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.
#1650995
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"
#1651029
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
Gast #1651046
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.
Moderator Persönliche Seite #1651097
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.
OP #1651389
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_tools.html#install_avr_gcc

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

Also werde ich mal die crossdevler anschreiben.

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.