www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AVR Studio: Warnung beim "builden"


Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen!!

Ich hab mal ne Frage zu einer Warnmeldung, die ich bekomme, wenn ich 
mein Project im AVR Studio "builde".
Ich bekomm die Meldung:
../can.c:135: warning: passing argument 2 of 'CAN128_TxMsg' from 
incompatible pointer type
Der Code dazu:
extern   void     CAN_Tx(
    CANMsg_t   *msg)      /*FPI Message Object            */  
{
   CAN128_TxMsg(CAN_TxNum, &msg);
  
}

Was heisst das konkret? Kann ich das ignorieren, oder könnten dadurch 
Problem entstehen?

Danke schon mal für die Antworten.
Gruss
Patrick

Autor: Bernhard M. (boregard)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
bist Du sicher, daß Du an CAN128_TxMsg den pointer auf den pointer msg 
übergeben willst, oder müsste es richtig so sein:
CAN128_TxMsg(CAN_TxNum, msg);
denn msg ist ja bereits ein Pointer auf eine Instanz von CANMsg_t...

Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn ich es so eingebe:
CAN128_TxMsg(CAN_TxNum, msg);
bekomm ich die Fehlermeldung:
../can.c:135: error: incompatible type for argument 2 of 'CAN128_TxMsg'

Autor: Hans-jürgen Herbert (hjherbert) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Such den Prototypen von CAN128_TxMsg in deinen Header-Dateien.

Autor: Fred S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Patrick,

wie Bernhard und Hans-Jürgen schon geschrieben haben, hast Du hier noch 
nicht klargegelgt, was Du tatsächlich übergeben willst und wie der 
Prototyp Deiner Can128_TxMsg Funktion aussieht. Ich gehe mal davon aus, 
dass Du formell und inhaltlich korrekt vorgegangen bist. Dann könnte ein 
Typecast bei der Übergabe genügen, um die Warnung verschwinden zu 
lassen: Can128_TxMsg(CAN_TcNum, (CANMsg_t*)&msg);

Gruß

Fred

Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn ich es so eingebe:
  CAN128_TxMsg(CAN_TxNum, *msg);
verschwindet die Meldung.

Der Prototyp ist so angegeben:
extern uint8_t CAN128_TxMsg (uint8_t num, CANMsg_t msg);

Autor: Hans-jürgen Herbert (hjherbert) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So passt der Aufruf zu dem was die Funktion will: Die ganze Message als 
Übergabeparameter. Auch wenn dann 8 bis 10 Bytes in den Stack oder in 
viele Register geladen werden müssen.

Hätte ich so nicht programmiert.

Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Hätte ich so nicht programmiert.
Wie denn?

Autor: Hans-jürgen Herbert (hjherbert) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Unterprogramm: Ich hätte es so programmiert, dass es wirklich einen 
Pointer will, und nicht alle Bytes der Message im Stack.

Ich denke das Unterprogramm ist zugekauft. Dann benutze es so wie es ist 
und gib ihm was es will. (sonst musst du alle anderen Aufrufe auch 
ändern)

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.