mikrocontroller.net

Forum: Compiler & IDEs Funktionsaufruf mit Zeiger


Autor: Patrick Bernhart (patrick)
Datum:

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

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

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

Autor: Patrick Bernhart (patrick)
Datum:

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

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

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

Autor: Unbekannter (Gast)
Datum:

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

Autor: Karsten R. (karsten)
Datum:
Angehängte Dateien:

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

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.