mikrocontroller.net

Forum: Compiler & IDEs compiler warning - pointer cast


Autor: Erik S. (soda74)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

mit folgendem Code lese ich eine Speicheradresse aus (funktioniert):
tU08 *data
typedef unsigned char tU08;
typedef unsigned int tU16;
tU08 *address;
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":
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ß.

Autor: Florian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schuss ins Blaue.

Aus dem Datenblatt:

Address Space 16 Mbytes

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

Autor: Erik S. (soda74)
Datum:

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

Autor: Florian (Gast)
Datum:

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

Autor: Erik S. (soda74)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das war es !
Mit:
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ß.

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.