0tes_Gesetz
26.04.2006, 13:37
Hi,
ich hab mal wieder ein Problem.
verwendete Tools
-ATmega168
-AVR Studio 4.12
-WinAVR mit GCC für AVR
zum (vorgelagerten, uneigentlichen) Problem:
In meinem Programm kommen Werte größer als 0xFFFF = 65.536 = 16Bit vor, also zB. 68.000.
Dazu sind ja nun die Datentypen "int" und "unsigned int" gedacht...
Leider bekomme ich Fehlermeldungen im AVR-Studio, wenn ich mit:
volatile unsigned int VAR1;
unsigned int VAR2;
definierte Variablen Werte zuweisen will, die größer als 65.536 sind.
zB. erzeugt:
VAR1 = 68000;
beim compilieren eine Fehlermeldung folgender Art:
..warning: large integer implicitly truncated to unsigned type
Auch:
VAR1 = 68000L;
oder
VAR1 = 68000UL;
erzeugt diese Fehlermeldung.
Dies wäre mir ja alles wurscht, weil ich das ja so nicht brauche.
Mein eigentliches Problem liegt in einer Berechnung mit 8 und 16Bit Werten, deren Output in eine 32Bit Variable kommt, wo ich nun mal naiv vermute, dass das zusammenhängt. Also zB:
volatile unsigned int VAR1; // Zielvariable
volatile unsigned short int VAR2_16; // Wert GRANTIERT maximal 0xFFFF
volatile unsigned char VAR3_8; // Wert GARANTIERT maximal 0xFF
// im Programmverlauf bekommen die Variablen VAR2_16 zB. 8000 und VAR3_8 zB. 10 zugewiesen
// folgende Rechnung bringt dann aber kein Ergebniss mehr.
// Ergebniss wäre '80.000' > 65.535, wobei ich 65.535 ich als Obergrenze festgestellt habe
VAR1 = (VAR2_16 * 10 * VAR3_8);
Wenn dagegen im Programmverlauf das Ergebniss der Rechnung unterhalb 65.535 bleibt, wird ein Ergebniss ausgegeben.
Ich hab auch schon mit den Präfixen 'L' und 'UL' nach den Zahlen sowie mit den Sufixen (uint32_t) vor die Variablennamen blindlings versucht Erfolge zu erzielen, aber auch da kam nix..
Dh. ich weiß nicht, was diese Prä/Suffixe bewirken sollen, was mich natürlich auch interessieren würde, da ich dazu keine Info gefunden habe.
Ich suche also Antworten zu:
32Bit Variablen mit Werten größer 0xFFFF belegen und verarbeiten.
Vielen Dank
0tes_Gesetz
ich hab mal wieder ein Problem.
verwendete Tools
-ATmega168
-AVR Studio 4.12
-WinAVR mit GCC für AVR
zum (vorgelagerten, uneigentlichen) Problem:
In meinem Programm kommen Werte größer als 0xFFFF = 65.536 = 16Bit vor, also zB. 68.000.
Dazu sind ja nun die Datentypen "int" und "unsigned int" gedacht...
Leider bekomme ich Fehlermeldungen im AVR-Studio, wenn ich mit:
volatile unsigned int VAR1;
unsigned int VAR2;
definierte Variablen Werte zuweisen will, die größer als 65.536 sind.
zB. erzeugt:
VAR1 = 68000;
beim compilieren eine Fehlermeldung folgender Art:
..warning: large integer implicitly truncated to unsigned type
Auch:
VAR1 = 68000L;
oder
VAR1 = 68000UL;
erzeugt diese Fehlermeldung.
Dies wäre mir ja alles wurscht, weil ich das ja so nicht brauche.
Mein eigentliches Problem liegt in einer Berechnung mit 8 und 16Bit Werten, deren Output in eine 32Bit Variable kommt, wo ich nun mal naiv vermute, dass das zusammenhängt. Also zB:
volatile unsigned int VAR1; // Zielvariable
volatile unsigned short int VAR2_16; // Wert GRANTIERT maximal 0xFFFF
volatile unsigned char VAR3_8; // Wert GARANTIERT maximal 0xFF
// im Programmverlauf bekommen die Variablen VAR2_16 zB. 8000 und VAR3_8 zB. 10 zugewiesen
// folgende Rechnung bringt dann aber kein Ergebniss mehr.
// Ergebniss wäre '80.000' > 65.535, wobei ich 65.535 ich als Obergrenze festgestellt habe
VAR1 = (VAR2_16 * 10 * VAR3_8);
Wenn dagegen im Programmverlauf das Ergebniss der Rechnung unterhalb 65.535 bleibt, wird ein Ergebniss ausgegeben.
Ich hab auch schon mit den Präfixen 'L' und 'UL' nach den Zahlen sowie mit den Sufixen (uint32_t) vor die Variablennamen blindlings versucht Erfolge zu erzielen, aber auch da kam nix..
Dh. ich weiß nicht, was diese Prä/Suffixe bewirken sollen, was mich natürlich auch interessieren würde, da ich dazu keine Info gefunden habe.
Ich suche also Antworten zu:
32Bit Variablen mit Werten größer 0xFFFF belegen und verarbeiten.
Vielen Dank
0tes_Gesetz