Ich bin kürzlich auf die Bit-Banding-Funktion auf dem Cortex-M4-Kern gestoßen und wie sie eine Lösung bietet, um Race-Conditions beim Umschalten von Registerbits zu vermeiden. Der M4 hat auch ein dediziertes BSRR-Register für die Durchführung von Atombit-Manipulationen an den GPIO-Ports. Ich verstehe, dass die Anwendung dadurch Thread-sicher wird
Gibt es einen Nachteil dieses Ansatzes im Vergleich zu der allgemein verwendeten Read-Modify-Write-Methode zum Umschalten von GPIO-Pins? .
Sie gehen davon aus, dass alle Operationen an IO-Ports auf Bitebene erfolgen. Ich habe vor einiger Zeit eine externe LCD-Schnittstelle geschrieben, die Px0..Px7 für die Datenschnittstelle und Px8 für die Schreibsteuerung verwendete. Dadurch konnte ich mit einer Folge von vier GPIO_ODR-Schreibvorgängen ein Pixel (16-Bit-Farbe) direkt auf das Display streamen. Wenn ich BSRR verwendet hätte, hätte ich die rohen Pixeldaten in Bitmasken für dieses Register übersetzen müssen. Dies hätte die Dinge erheblich verlangsamt.
Sie haben die betreffende MCU nicht angegeben, aber das BSRR-Register ist spezifisch für ST Micro Cortex-M-Teile.
Das BSRR-Register bietet eine ähnliche Funktionalität wie die Bitbanding-Funktion, die Teil der Cortex-M-Architektur in Bezug auf den atomaren Betrieb ist.
Ob Bit-Banding im Vergleich zu Read-Modify-Write einen Nachteil hat, der Hauptnachteil besteht darin, dass sie jeweils nur ein Bit manipulieren können.
ammar.cma
Chris Stratton