Problem bei der Klammersetztung
-
Guten Tag liebe Forumsmitglieder,
zurzeit schreibe ich ein kleines Programm für einen Mikrocontroller und bin gerade dabei einen kleinen Ringpuffer zu Programmieren.Funktionieren tut das Programm bisher so wie ich es will, allerdings haut der Compiler mir ne Warnings raus, die ich gerne beheben würde. Nur Leider weiß ich absolut nicht wo er da Klammern von mir will. Auch google bringt mich hier leider nicht wirklich weiter.
Meldung (hier Zeile 18):
suggest parentheses around '-' in operand of '&'Es wäre schön, wenn mich jemand auf meine Fehler aufmerksam machen würde.
vielen Dank,Hier die Code-Auszüge
//------------------------------- Ringpuffer ---------------------------------- #define Buffer_Fehler 0 #define Buffer_Erfolg 1 #define Buffer_size 32 //2^n #define Buffer_mask Buffer_size-1 //Maske gefüllt mit "11111..." struct Buffer_tx0 { uint8_t data[Buffer_size]; uint8_t read; //Zeiger auf das Feld, das gelesen wird uint8_t write; //Zeiger auf das Feld, das als nächstes beschrieben wird }Buffer_tx0={{},0,0}; //Schreibt ein Byte in den Transmit Ringpuffer uint8_t Buffer_tx0_in (uint8_t Byte) //Return 1 bei erfolg und 0 bei Fehler --> Buffer Voll { uint8_t next = ((Buffer_tx0.write+1)&Buffer_mask); // <---- auf diese Zeile bezieht sich die Fehlermeldung if(Buffer_tx0.read==next) { return Buffer_Fehler; } Buffer_tx0.data[Buffer_tx0.write]=Byte; Buffer_tx0.write=next; return Buffer_Erfolg; }vielen Dank,
und entschuldigt, wenn ich einen neuen Threat aufgemacht habe, aber davon lebt doch ein Forum!lg,
Saturi
-
.
EDIT: Zu peinlich => musste weg
Ich sollte genauer gucken bevor ich antworten schreibe.Was stimmt ist dass das Problem durch die (nicht nötige und unpassende) Verwendung von Makros entstanden ist.
-
Ist doch offensichtlich, Buffer_mask ist Buffer_size-1. Nach der Ersetzung steht dran
x & a - 1.
Ist da jetzt (x & a) - 1 gemeint, oder x & (a - 1). Deswegen schlägt der Compiler vor, dass du Klammern gleich klammern hinschreibst, so wie du dir das eigentlich gedacht hattest.
-
Hallo!
Danke für die Lösung
Ist ja unglaublich, wie schnell das hier geht,@Mechanics
Ja unglaublich wie offensichtlich es ist... und noch unglaublicher das ich in meinem Programmierwahn die definition von Buffer_Mask aus meinem kopf ausgeblendet habe und mir nur eine Binär Zahl voller 1en vorgestellt habe...Vielen Dank!
@hustbaer
Wo beziehe ich mich in meinem Programm denn auf eine Adresse?
und was meinst du mit sinnfreiem Makro?
Wäre nett wenn du mich kurz aufklären würdest, weil ich bereit bin meinen
Programmierstil(wenn man Ihn so nennen darf) zu verbessern.Danke euch beiden für die schnelle Hilfe!
-
Saturi schrieb:
Wo beziehe ich mich in meinem Programm denn auf eine Adresse?
Nirgends. Mein Fehler. Nicht genau genug geguckt.
Saturi schrieb:
und was meinst du mit sinnfreiem Makro?
Wäre nett wenn du mich kurz aufklären würdest, weil ich bereit bin meinen
Programmierstil(wenn man Ihn so nennen darf) zu verbessern.Na die ganzen Makros die du verwendest.
Die#defineTeile.
Besser wäre schonmal#define Buffer_mask (Buffer_size-1)zu schreiben.
Und gleich noch viel besser wäre es ganz normale Konstanten zu verwenden.static uint32_t const Buffer_mask = Buffer_size - 1;