Was ist Bitbanding?

Ich lese das ARM Cortex M3 -Referenzhandbuch und die Konzepte „Bit-Band“, „Bit-Band-Region“ und „Bit-Band-Alias“ tauchen auf.

Was ist Bitbanding?

Ich habe eine Github-Seite eingerichtet , um zu erklären, was Bit-Banding ist, wie es funktioniert und wie man es benutzt. Ich glaube, es beantwortet die meisten Fragen zum Bitbanding, Sie können es sich gerne (erneut) ansehen.
Dies ist eine praktische Einführung in die Bitbanding-Funktion in ARM Cortex M3 atadiat.com/en/articles/…

Antworten (1)

Das ARM -Infozentrum verweist auf Bitbanding in seiner Cortex-M3- und -M4-Dokumentation, Compiler-Dokumentation und einigen anderen Stellen, wie Home > Programmers Model > Bit-banding . From Home > Entwicklung von Software für Cortex-M3 > Bit-Banding :

Bitbanding bildet ein vollständiges Speicherwort auf ein einzelnes Bit im Bitbandbereich ab. Beispielsweise wird das Schreiben in eines der Alias-Wörter das entsprechende Bit in der Bitbandregion setzen oder löschen.

Es scheint eine Möglichkeit zu sein, eine atomare Einzelbitoperation zu erhalten.

Beim Schreiben in die Alias-Regionen wird Bit 0 des 32-Bit-Wortes verwendet, um den Wert in der Bit-Banding-Region einzustellen. Das Lesen von der Aliasadresse gibt den Wert aus dem Bitbandbereich in Bit 0 zurück und die anderen Bits werden gelöscht.

Haben Sie eine Vorstellung davon, wie Bitband-Operationen intern durchgeführt werden und was die wirklichen Garantien in Bezug auf Atomarität sind? Würde ich einen Chip entwerfen, um atomare Bit-Set- oder Bit-Clear-Operationen zu erleichtern, würde ich zwei der oberen Adressbits verwenden, um zwischen „normalem Zugriff“ (00), „Schreiben von Einsen“ (01) und „Schreiben von Nullen“ zu wählen. (1x). Außerdem würde ich die CPU ihre Datenausgabe invertieren lassen, wenn diese Adressbits 0x11 wären. Auf diese Weise könnten Bits in einem Zyklus gesetzt oder gelöscht werden, ohne dass ein Lesen-Modifizieren-Schreiben erforderlich wäre. Selbst wenn Bits gleichzeitig mit dem Schreiben von der Hardware gesetzt würden, ...
...wäre kein Problem. So wie es ist, weiß ich wirklich nicht, was passieren würde, wenn jemand eine Bitband-Löschung an so etwas wie einem Statusort eines E/A-Geräts durchführen würde, während gleichzeitig die Hardware ein weiteres Bit dazu veranlasst, gesetzt zu werden.
AFAIK 1. Das Lesen von Daten mit diesem Alias ​​ist nicht atomarer als das einfache Lesen des eigentlichen Speichers. 2. Das Schreiben eines Bits kann nicht wirklich atomar sein. In beiden Fällen. Was ist also der wirkliche Vorteil dieser Technologie???
Folgt einfach den Links, ihr Penner.
@AlKepp, Auf vielen der Systeme, die ich verwendet habe, ein bisschen zu schreiben, ist wirklich atomar mit einer einzigen Anweisung, um die Handlung auszuführen, die nicht unterbrochen werden kann.
Aus DDI0337I Seite 3-16: "Die Systembusschnittstelle enthält Logik, die Bitbandzugriffe wie folgt steuert: [...] Für Schreibvorgänge wandelt sie den Schreibvorgang in eine atomare Lese-Modifizier-Schreib-Operation um."
@Kortuk: Ich arbeite mit generischen Multicore-Systemen mit externen Speichercontrollern. Es ist schwierig, es wirklich atomar zu halten, wenn Sie einen Lese-, Änderungs- und Schreibvorgang benötigen, da die Granularität des Speichers höher ist als die Anzahl der Bits, die Sie tatsächlich schreiben müssen.
@AlKepp, ich habe nicht versucht zu implizieren, dass es Systeme gibt, die dies nicht mit einer atomaren Anweisung tun könnten. Sie sagten: "Das Schreiben eines Bits kann nicht wirklich atomar sein." Dieser Behauptung widersprach ich. Ich habe viele Systeme verwendet, bei denen es atomar ist und die existieren.
@Kortuk: Ich verstehe Ihren Standpunkt - er kann auf einfachen Computersystemen atomar sein. Aber ich unterrichte Kurse zu Grundlagen von Betriebssystemen in Informatikstudiengängen. Ich sehe es immer allgemeiner - wenn Sie beispielsweise ein externes Gerät mit direktem Speicherzugriff anschließen, wird Ihre sogenannte "Atomizität" unterbrochen, da es sich nicht um eine echte Atomizität handelt. Es ist nur dann atomar, wenn Sie Speichercontroller und CPU/ALU-Kern zusammen als "Black-Box" betrachten und es keine Parallelität gibt.
@AlKepp, Der Cortex M3 ist ein Beispiel für eher einen Mikrocontroller. Wichtig für mich ist, dass man nicht sagen kann, dass atomare Anweisungen nicht existieren, wenn dies oft der Fall ist. Viele Leute hier machen eingebettete Systeme, die so wenig Ressourcen haben, dass der Speicher intern ist, es ist eigentlich das einzige System, auf dem ich gerne codiere. Abgesehen davon kann es irreführend sein, jemandem zu sagen, dass es nicht existiert, wenn es existiert und häufig verwendet wird.
Mit Bit-Banding können Sie also den Status von bis zu 32 uC-Pins gleichzeitig festlegen oder lesen?
@kurtnelle, Nein, es gibt nur entweder 0x00000001 oder 0x00000000 zurück, was nützlich sein kann. Zum Beispiel zur direkten Verwendung in Logikprüfungen ohne Vorverarbeitung. (ZB wäre 0x00000010 FALSCH, wenn es aus der Bitband-Alias-Region gelesen würde, aber WAHR, wenn es von woanders gezogen würde.) Beachten Sie, dass ich es nicht wirklich verwendet habe und mich unglaublicherweise schon einmal geirrt habe.
@AlKepp: Es gibt eine Vielzahl von Möglichkeiten, wie man ein Speichersystem mit wirklich atomaren Bit-Set- und Bit-Clear-Primitiven konstruieren kann, für die keine Lese-Modifizier-Schreib-Zyklen erforderlich waren. Der vielleicht einfachste Ansatz wäre, dass das Speicherarray getrennte "Schreib-UND" und "Schreib-ODER" hätte. Normalerweise aktiviert ein Speicherschreiben sowohl High-Side- als auch Low-Side-Spaltentreiber (um sowohl Einsen als auch Nullen schreiben zu können), aber wenn man nur einen Treibertyp aktiviert, könnte man jede Kombination von Bits selektiv setzen oder löschen Verwendung eines einzelnen Zyklus.