Hallo! Ich bin grade dabei einen ATMega8 mit dem AVR-GCC Compiler zu programmieren. Allerdings spuckt der Compiler immer folgende Warnungen aus: "warning: passing arg 1 of `uartReceiveByte' discards qualifiers from pointer target type" Ich will der Funktion einfach die Adresse einer Variablen übergeben. Der Code dazu sieht so aus: "uartReceiveByte( &g_rs485data.buffer[g_rs485data.bufferlength] )". Weiß einer was das bedeuted, wie man das weg bekommt bzw ob man das ignorieren darf. Ich hab dazu nix brauchbares gefunden. Vielen Dank schonmal mfg Michael
Danke. Ich habe jetzt alle Betreffenden Variablen mit volatile gekennzeichnet. Hilft aber leider nichts. Das ganze sieht jetzt so aus (das is alles global) typedef struct { volatile uint8_t adress; volatile uint16_t bytes; volatile uint8_t * data; volatile uint8_t isvalid; volatile uint16_t connected; volatile uint8_t lastSent; volatile uint8_t buffer[MAX_PACKET_SIZE]; volatile uint8_t bufferlength; }rs485data; volatile rs485data g_rs485data; Der Aufruf der Funktion sieht so aus: uartReceiveByte( &g_rs485data.buffer[g_rs485data.bufferlength] ); Was bedeuted das eigentlich genau?? Wenn das nicht zu Fehlern führt dann ignorier ichs einfach, weil die Warnungen irgendwann eh verschwinden. mfg Michael
Ich habe ja nicht geschrieben, daß Du alles "volatile" deklarieren sollst. ;-) Das sollte man sowieso nicht blindlings machen, da es wirklich jede Optimierung auf den so gekennzeichneten Variablen verhindert. Ist das wirklich, was Du willst? Aber ohne auch den Prototypen für uartReceiveByte() zu sehen, kann man den Fehler nicht nachvollziehen. Nun, es bedeutet genau das, was da steht: daß Du zwischen zwei Zeigern mit verschiedenen `qualifiers' hin- und hertransferierst, die bis auf den qualifier ansonsten zueinander passen. Qualifier sind eben const, volatile bzw. neuerdings (C99) auch restricted, von letzterem wird aber in der avr-libc noch kein Gebrauch gemacht (und Du wirst es vermutlich auch nicht selbst benutzen ;-). Übrigens. uartReceiveByte( &g_rs485data.buffer[g_rs485data.bufferlength] ); == uartReceiveByte( g_rs485data.buffer + g_rs485data.bufferlength );
Ah ok danke. Jetzt weiß ich wenigstens was das bedeuted, konnte mit dem Wort qualifier nämlich nix anfangen. Ich denke mal jetzt find ich den Fehler selber, weiß ja wonach ich suchen muss. Danke für deinen Tipp am Ende noch, aber das hab ich auch schon ausprobiert aus lauter Verzweifelung :-) mfg Michael
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.