64Bit Zahl unter AVR-Studio

Gast #725982
Hallo,
ich arbeite unter AVR-Studio in C und programmiere einen Mega8. (Alles 
Neuste Versionen)

Mein Problem, ich brauche gerade eine 64Bit Variable, aber weder die 
deklaration mit "long long" noch "uint64_t" bzw. "int64_t" bringt die 
gewünschten Ergebnisse. Hier mal ein Beispiel Code:
1
#include <avr/io.h>
2
#include <stdint.h>
3

4
int main (void){
5
  int64_t einfach=0xaaaaaaaaa;
6
return 0;
7
}
Die Fehlerausgabe ist immer gleich:
../main.c:15: warning: integer constant is too large for 'long' type

Ich meine klar ist die Variable zu lang für ein "long" (32Bit), daher ja
auch die deklaration als 64Bit Variable (double)<-geht im übrigen auch 
nicht.

Jemand eine Idee?

Gruß
Ralf
Gast
1
Compiling C: main.c
2
avr-gcc -c -mmcu=atmega8 -I. -gdwarf-2 -DF_CPU=8000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=./main.lst  -std=gnu99 -Wundef -MMD -MP -MF .dep/main.o.d main.c -o main.o 
3
main.c: In function 'main':
4
main.c:5: warning: unused variable 'einfach'
5

6
Linking: main.elf

Bei mir gehts.

Oliver
@  R.Quentin (Gast)

>deklaration mit "long long" noch "uint64_t" bzw. "int64_t" bringt die
>gewünschten Ergebnisse. Hier mal ein Beispiel Code:

Versuchs mal so.
1
#include <avr/io.h>
2
#include <stdint.h>
3

4
int main (void){
5
  int64_t einfach=0xaaaaaaaaaLL;
6
return 0;
7
}

Die Endung LL machts.

MfG
Falk
Gast
Jupp, danke Falk, das war´s.

Bei der Überprüfung von Bits, sprich "rein"Shiften und "verunden" mit 1 
hatte ich schonmal das gleiche Problem, allerdings mit 32 Bit Zahlen. 
(if(einfach & 1L<<j){...

Jetzt mußte es dann halt an der Stelle auch if(einfach & 1LL<<j){... 
heißen.

Ist aber auch wirklich ne komische Notation mit der nachgestellten 
Typdefinition.

Naja, hauptsache es geht, vielen dank nochmal.

Gruß
Ralf

P.S.:
@Steffan: "Welche Compiler-Version benutzt Du?"
"(Alles Neuste Versionen)"
(Sprich, am 12.12. hab ich die Anfrage gestellt, am 12.12. habe ich mir 
sämtliche Software neu runtergeladen, installiert, probiert und dann 
erst meine Frage gestellt, alles Neuste Versionen halt)
"Welche Aufrufoptionen? (-s  ?)"
"ich arbeite unter AVR-Studio..."
Welche automatischen Makefile Apendixe dort aufgerufen werden 
instressiert, falsch, will mich nicht wirklich intressierten.
Ansonsten kommt man nämlich sehr schnell vor lauter Makefile 
Programmierung nicht mehr zur eigendlichen Programmierung.
Danke trotzdem für den Versuch.
@ R.Quentin (Gast)

>Jetzt mußte es dann halt an der Stelle auch if(einfach & 1LL<<j){...
>heißen.

>Ist aber auch wirklich ne komische Notation mit der nachgestellten
>Typdefinition.

>Naja, hauptsache es geht, vielen dank nochmal.

Pass aber auf. 32/64 Bit Operatioen sind auf dem AVRGCC bisweilen 
grausam realisiert. Tierisch speicherintensiv und langsam. Siehe

Beitrag "Re: Frage zur C Syntax"

MFG
Falk
Gast
Was spricht dagegen, die 64 Bit Zahl als Double zu deklarieren? Das 
funktioniert bei mir prinzipiell auch, allerdings habe ich auch Probleme 
beim reinshiften. Wie lautet die nachgestellte Typdefinition für die 1 
hier?

Gruß Ole
@ Ole (Gast)

>Was spricht dagegen, die 64 Bit Zahl als Double zu deklarieren? Das

Beim AVRGCC sind Float und Double nur 32 Bit.

>funktioniert bei mir prinzipiell auch, allerdings habe ich auch Probleme
>beim reinshiften. Wie lautet die nachgestellte Typdefinition für die 1
>hier?

1LL. Das ist dann aber 64 Bit Integer.

MFG
Falk

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.