64Bit Zahl unter AVR-Studio

Gast #725982
Lesenswert?

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 #725999
Lesenswert?

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
#726018
Lesenswert?

@  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 #727551
Lesenswert?

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.
#727662
Lesenswert?

@ 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 #767455
Lesenswert?

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
#767659
Lesenswert?

@ 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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren