Frage

In einer eingebetteten Anwendung haben wir eine Tabelle, die die verschiedenen Adressbereiche beschreibt, die auf aus Ziel-Board gültig ist. Diese Tabelle wird zum Einrichten der MMU.
Der RAM-Adressbereich wird als zwischenspeicherbar markiert, aber auch andere Regionen an nicht zwischenspeicherbar markiert. Warum das?

War es hilfreich?

Lösung

Wenn ein Speicherbereich von Hardware und Software gleichzeitig zugegriffen wird (EX: Hardware-Konfigurationsregister bzw. Streu-Sammel-Liste für DMA), ist diese Region muss definiert wird als nicht im Cache gespeichert. Für aktuelle DMA kann der Speicherpuffer definiert wird zwischengespeichert und in den meisten Fällen ist es ratsam, für die Puffer der Anwendungsebene schnellen Zugriff auf diesen Puffer zu ermöglichen, zwischengespeichert werden. Es ist die Verantwortung des Fahrers / Invalidier Cache zu leeren, bevor der Puffer DMA oder die Anwendung übergeben.

Kleines Update, über muss ist nicht korrekt in Fall haben wir eine spezielle Hardware, das heißt Cache-Kohärenz Verbindungen (CCI), die den Zugriff von verschiedenen Hardware-Blöcken in dem Speicher synchronisiert.

Andere Tipps

Dies geschieht so, dass der Prozessor nicht abgestanden Werte aufgrund Caching nicht verwendet. Wenn Sie (regelmäßigen) im Cache-RAM zugreifen, kann der Prozessor „erinnern“ den Wert, den Sie zugegriffen hat. Das nächste Mal, wenn Sie an derselben Speicherstelle suchen, kehrt der Prozessor den Wert, den er erinnert sich, ohne im RAM zu suchen. Dies ist Caching.

Wenn der Inhalt der Lage ohne den Prozessor ändern, wie zu wissen, der Fall sein könnte, wenn Sie ein Memory-Mapped Gerät (ein FPGA einige Datenpakete zum Beispiel der Rückkehr), könnte der Prozessor den Wert zurückgeben wird „erinnert mich“ von den letzten Zeit, was falsch wäre.

Um dieses Problem zu vermeiden, markieren Sie diesen Adressraum als nicht-Cache gespeichert werden. Dies stellt sicher, der Prozessor versucht nicht, den Wert zu erinnern.

Jeder Speicherbereich für DMA oder andere Hardware-Wechselwirkungen verwendet werden, sollte nicht zwischengespeichert werden.

Vielleicht ist es verwendet für Memory-Mapped I / O?

Einige Bereiche wie Flash in einem Zyklus gelesen werden, so müssen nicht im Cache gespeichert werden.

Moderne Steuerungen können L2-Cache für DMA verwenden, das heißt, sie die Kohärenz des im Cache-Speicherbereich für DMA-Zugriffe verwendet erhalten. Dies wird auch als „Snoop-fähige Speicher-Transaktionen“ durchgeführt von der Steuerung (über DMA) bezeichnet.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top