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
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...
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
Naja, das Kriterium für die Wahrheit ist immer noch, ob die gewünschte Funktionalität errreicht wird. Wie geschrieben, der Compiler könnte eine derartig simple Funktion als inline-Code implementieren, dann wird dein Breakpoint nie erreicht, obwohl trotzdem alles funktioniert.
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.
Hallo, kann mir viellicht jemand erklären warum die Funktion tastenentpreller nicht funktioniert, es soll ein Lauflicht eingeschaltet werden,und beim 2. Aufruf soll die Frequenz halbiert werden.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.