www.mikrocontroller.net

Forum: Compiler & IDEs 64Bit Zahl unter AVR-Studio


Autor: R.Quentin (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
#include <avr/io.h>
#include <stdint.h>

int main (void){
  int64_t einfach=0xaaaaaaaaa;
return 0;
}
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

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Compiling C: main.c
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 
main.c: In function 'main':
main.c:5: warning: unused variable 'einfach'

Linking: main.elf

Bei mir gehts.

Oliver

Autor: Stefan Kleinwort (_sk_)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Welche Compiler-Version benutzt Du?
Welche Aufrufoptionen? (-s  ?)


Gerade an den unterstützten uintxx_t ist in der letzten Version viel 
geändert worden.

Viele Grüße, Stefan

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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.
#include <avr/io.h>
#include <stdint.h>

int main (void){
  int64_t einfach=0xaaaaaaaaaLL;
return 0;
}

Die Endung LL machts.

MfG
Falk

Autor: R.Quentin (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Stefan Kleinwort (_sk_)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>"(Alles Neuste Versionen)"

oh sorry, das hatte ich überlesen.


Viele Grüße, Stefan

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Ole (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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

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.