Funktionsaufruf mit Zeiger

OP #283423
Lesenswert?

Hallo,

ich hab ein Problem mit der Übergabe eines Array an eine Funktion:

ich hab die Funktion wie folgt deklariert:

void Decodemsg(BYTE *lpBuf, WORD wRead);

im Program möchte ich ein Char Array cRxBuf mit Länge übergeben:

Decodemsg(cRxBuf, MsgLength);

in der Funktion soll es dann weitergehen:

void Decodemsg(BYTE *lpBuf, WORD wRead)
{
 WORD  wGroupAddr;

 wGroupAddr = (lpBuf[9] << 8) | lpBuf[10];

}

das ganze geht aber nicht, es wird nicht mal in die Funktion beim
Aufruf gesprungen?

Dazu liefert der Compiler die Meldung:
"passing arg 1 of `DecodeEIBmsg' discards qualifiers from pointer
target type"

was mache ich falsch??

Gruss Patrick
Moderator Persönliche Seite #283424
Lesenswert?

schauder  Ungarische Notation.  Kann man echt nicht lesen...

Anyway, das klingt alles konfus.  Das Wichtigste aber, nämlich die
die Deklaration von DecodeEIBmsg, hast du uns vorenthalten.  Die
Fehlermeldung klingt so, als hättest du in dieser entweder ein const
oder ein volatile drin (ein restrict wird's ja nicht sein, das wäre
der dritte Qualifier, den es gibt ;-).

Auch weiß ich mit deiner Aussage ,es wird nicht mal in die Funktion
beim Aufruf gesprungen' nichts anzufangen.  In welche Funktion wird
denn nicht gesprungen, Decodemsg oder DecodeEIBmsg?  Wie hast du das
herausgefunden?  Hast du nur mit dem Simulator geguckt und vermisst im
optmierten Code dies oder das?  Bedenke, dass die Optimierung dir eine
so simple Funktion durchaus inline erweitern könnte, d.h. im
Einzelschritt der Simulation wird sie scheinbar nicth angesprungen,
dennoch macht der Code das Richtige...
OP #283425
Lesenswert?

die Deklaration des Array cRxBuf das ich übergebe war volatile, darum
wohl auch die Fehlermeldung. Die ist nun weg.

Mit der Aussage das nicht in die Funktion gesprungen wird meine ich das
ich einen Breakpoint auf den Funktionsaufruf setzt. Beim nächsten
Einzelschritt sollte ja dann die Funktion aufgerufen werden. Diese wird
aber übergangen?

Ich verwende keinen Simulator sondern ein STK500/501 mit JTAG ICE

Patrick
Gast #283427
Lesenswert?

ISO C99 ist erfunden.

Man benötigt solchen Kruscht wie "BYTE" und "WORD" nicht mehr...

Verwende besser "uint8_t" und "uint16_t" oder "int16_t" usw.

Und wie schon angemerkt wurde: Wirf die ungarische Notation weg. Es
gibt nichts schlimmeres. Nur weil es Microsoft so toll fand und
Millionen von Windowsprogrammierer das so machen uns sogar manche
Hochschulen diesen Schrott gelehrt haben, heißt das noch lange nicht
dass das etwas taugt.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren