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

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.