Zu der Programmzeile: spd.buf_idx = (spd.buf_idx + 1) & REED_BUF_MASK; erhalte ich folgende mir unklare Warnung: measure.c:66: warning: suggest parentheses around + or - in operand of & Was für Klammern vermisst er denn? Danke!
Das kann Dir nur die Expansion des Makros REED_BUF_MASK verraten. Es ist generell eine gute Idee, in solchen Makros auf der rechten Seite aus Prinzip zu klammern.
Morgen ;-)) Sorry.. Das Makro ist einfach eine Maske: #define REED_BUF_MASK 7 :-)
#include <inttypes.h> #define REED_BUF_MASK 7 struct foo_s { uint8_t buf_idx; }; int main(void) { volatile struct foo_s spd; while(1) { spd.buf_idx = (spd.buf_idx + 1) & REED_BUF_MASK; } /* NEVEREACHED */ return 0; } Das gibt bei mir keinen Fehler, und auch keine Warnung. Opt: -s, Debug: ELF/DWARF-2, MCU: mega8
/* foo.h: ***************/ #define REED_BUF_MASK 7 typedef struct{ uint8_t buf_idx; }foo_t; /* foo.c ***************/ #include "foo.h" /* #include weiteres */ foo_t spd; void nicht_main(void){ /* code */ spd.buf_idx = (spd.buf_idx + 1) & REED_BUF_MASK; /* code */ }
Hatte gehofft, das konkreterer Code und das makefile die infos liefern, weshalb Du keine, ich aber eine Warnung habe.
Naja, der Code in kombination mit dem Makefile ist nicht Kompilierbar. Wenn ich es so Modifiziere, daß es sich kompilieren lässt (fehlende includes etc), bekomme ich wieder keine Fehlermeldung!
Ich bin ein riesen Rindvieh und versinke im Boden. In meinem Kopf war REED_BUF_MASK ne simple Konstante und nach ner durchzechten Programmiernacht (Termindruck;-) irgendwie nicht mehr im bewußten Blickfeld... #define REED_BUF_SIZE 8 #define REED_BUF_MASK REED_BUF_SIZE-1 Sorry und vielen Dank!!! So ist alles tutti: #define REED_BUF_MASK (REED_BUF_SIZE-1)
Immer, wenn mir mal eine derartige Warnung unklar ist, sehe ich mir die Ausgabe des Präprozessors an (avr-gcc ... -E).
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.