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


von Patrick (Gast)


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:
1
extern   void     CAN_Tx(
2
    CANMsg_t   *msg)      /*FPI Message Object            */  
3
{
4
   CAN128_TxMsg(CAN_TxNum, &msg);
5
  
6
}

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

Danke schon mal für die Antworten.
Gruss
Patrick

von Bernhard M. (boregard)


Lesenswert?

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

von Patrick (Gast)


Lesenswert?

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

von Hans-jürgen H. (hjherbert) Benutzerseite


Lesenswert?

Such den Prototypen von CAN128_TxMsg in deinen Header-Dateien.

von Fred S. (Gast)


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

von Patrick (Gast)


Lesenswert?

Wenn ich es so eingebe:
1
  CAN128_TxMsg(CAN_TxNum, *msg);
verschwindet die Meldung.

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

von Hans-jürgen H. (hjherbert) Benutzerseite


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.

von Patrick (Gast)


Lesenswert?

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

von Hans-jürgen H. (hjherbert) Benutzerseite


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)

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
Noch kein Account? Hier anmelden.