Forum: PC-Programmierung Evaluating the address of the parameter


von Marcel (Gast)


Lesenswert?

Hallo,

ich mache gerade QAC und in einer Funktion habe ich eine Warnung, die 
ich nicht weiß wie ich die wegbekommen kann.
1
typedef struct
2
{
3
  uint8_t type;
4
  uint32_t data;
5
}msgType
6
7
void videoTransmit(msgType msg)
8
{
9
  (void)cam_Transmit(sizeof(pfm_msg_st),(uint8*)(&msg));
10
}

Die Warnung ist:
Evaluating the address of the parameter 'msg'
1
uint8_t cam_Transmit(uint16_t window_size, uint8_t* sendWindow);


Aber was genau soll geprüft werden?

von Adam P. (adamap)


Lesenswert?

Marcel schrieb:
> (void)cam_Transmit(sizeof(pfm_msg_st),(uint8*)(&msg));

(uint8*)
Hast du dich da vertippt oder meckert dein Compiler da etwa nicht?

edit:
Sonst sollte der cast eigentlich funktionieren.
Aber was ist mit dem Allignment deiner Struktur?
Oder ist das in deinem Anwendungsfall nicht wichtig?

: Bearbeitet durch User
von N. M. (mani)


Lesenswert?

Zusätzlich zum alignement:
Warum übergibst du eine Kopie und nicht einfach einen Pointer?

von Adam P. (adamap)


Lesenswert?

Ich glaub eher das Problem ist vllt. folgendes.

Er hat seine Kopie, wenn er diese nun einer Funktion übergibt die z.B. 
per DMA überträgt und somit gleich wieder zurück kommt, verlässt er die 
obere Funktion auch und seine Kopie ist futsch (obwohl evtl. noch nicht 
verarbeitet).

: Bearbeitet durch User
von N. M. (mani)


Lesenswert?

Adam P. schrieb:
> und somit gleich wieder zurück kommt, verlässt er die obere Funktion
> auch und seine Kopie ist futsch

Auf das wollte ich unter anderem raus :-)
Kommt halt drauf an was er in cam_Transmit macht. Vllt legt er ja eine 
Kopie der Kopie an.

von Adam P. (adamap)


Lesenswert?

N. M. schrieb:
> Auf das wollte ich unter anderem raus :-)

Gut :-)

N. M. schrieb:
> Vllt legt er ja eine Kopie der Kopie an.

Damit diese Funktion evtl. die Daten wiederum als Kopie in den 
Peripheriespeicher legt...je nach HW, einige haben DMA Zeiger, andere 
FIFO.

Aber der Source ergibt auch kein Sinn.
Woher kommt "pfm_msg_st"?

Aber ich weiß nun auch net, wie QAC von MISRA abweicht.
Wäre interassant zu wissen, was es nun ist.

Könnte ja auch etwas undefiniertes sein, wie:
1
v[i] = i++;   // wie bjarne erwähnte

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.