Forum: Compiler & IDEs compiler warning - pointer cast


von Erik S. (soda74)


Lesenswert?

Hallo zusammen,

mit folgendem Code lese ich eine Speicheradresse aus (funktioniert):
1
tU08 *data
2
typedef unsigned char tU08;
3
typedef unsigned int tU16;
4
tU08 *address;
5
address = ((((tU16)data[1])<<8)|data[2]);
mit
data[1]=HighByte Quelladresse, data[2]=LowByte Quelladresse.

Das Problem:

Ich bekomme folgende Compiler-Warnung:
"assignment makes pointer from integer without a cast"

Ein type cast mit (tU08*) bringt mir lediglich folgende Warnung:
"cast to pointer from integer of different size":
1
address = (tU08*)((((tU16)data[1])<<8)|data[2]);
Compiler: GNUM16CM32C v0702 based on gcc-4.2-20061205, binutils-2.17.50, 
newlib-1.14.0 and gdb-6.6
Controller: M32C83

Frage:
Wie bekomme ich die Warnung weg ?

Gruß.

von Florian (Gast)


Lesenswert?

Schuss ins Blaue.

Aus dem Datenblatt:

Address Space 16 Mbytes

Bedeutet IMHO auf 24-bittige Adressen hin und nicht auf 16-bittige.

von Erik S. (soda74)


Lesenswert?

Danke Florian. Das stimmt.
Bringt mich aber leider nicht weiter.
"tU08 *address" ist ein Zeiger auf einen 8-Bit Wert. Ganz egal wo das 
ist.
Der Code funktioniert ja auch. Ich muß nur die Warnung eleminieren.

von Florian (Gast)


Lesenswert?

1
address = (tU08*)(unsigned long)((((tU16)data[1])<<8)|data[2]);

Hier wird explizit dann zu einem 32-Bit-Wert gecastet und dann zum 
Pointer. Vielleicht hilft das.

von Erik S. (soda74)


Lesenswert?

Das war es !
Mit:
1
address = (tU08*)((((tU32)data[1])<<8)|data[2]);
ist die Warnung weg und der Code funktionert noch.
Man muß also explizit auf tU32 (unsigned long, 32 bit) "casten".

Danke & Gruß.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.