Artikel-ID: 000083953 Inhaltstyp: Fehlerbehebung Letzte Überprüfung: 13.02.2006

Warum liest mein Nios® Mikroprozessor nicht von meinem mit dem Speicher zugeordneten Peripheriegerät, wenn ich versuche, sofort nach einem Schreiben an das gleiche Peripheriegerät davon zu lesen?

Umgebung

BUILT IN - ARTICLE INTRO SECOND COMPONENT
Beschreibung Pointer auf speicherzuordnungsgesteuerte Peripheriegeräte sollten als flüchtige Typen erklärt werden. Ein Pointer, der nicht als volatil erklärt wird, verhält sich unter bestimmten Ebenen der Compiler-Optimierung möglicherweise nicht wie erwartet. Betrachten Sie beispielsweise das folgende Codesegment.

int *pointer = (int *) na_peripheral;
int read_back;
...
*pointer = 49;
read_back = *pointer;


Mit einem Compiler-Optimierungsniveau von -o2 (der Standardeinstellung) ist dieses Programm schreibt einen Wert von 49 in das Peripheriegerät. Wann ist dies read_back jedoch auf den Wert des Pointers gesetzt, wird er mit dem Wert geladen, der nur auf das Peripheriegerät geschrieben, das immer noch in einem internen Nios Kern gespeichert ist Registrieren. Dies kann unter bestimmten Umständen zulässig sein, kann aber Probleme verursachen, wenn das Peripheriegerät wird zur gleichen Zeit wie beim Lesen extern aktualisiert. So stellen Sie sicher, dass dass der Nios Kern den korrekten Wert aus dem Peripheriegerät, dem Pointer, liest sollte wie folgt angegeben werden:


volatile int *pointer = (int *) na_peripheral;


Auf diese Weise wird sichergestellt, dass Nios die Chip-Select- und Read-Enable-Option bestätigt. Signale für das gewünschte Peripheriegerät.

Zugehörige Produkte

Dieser Artikel bezieht sich auf 1 Produkte

Intel® programmierbare Geräte

Der Inhalt dieser Seite ist eine Kombination aus menschlicher und computerbasierter Übersetzung des originalen, englischsprachigen Inhalts. Dieser Inhalt wird zum besseren Verständnis und nur zur allgemeinen Information bereitgestellt und sollte nicht als vollständig oder fehlerfrei betrachtet werden. Sollte eine Diskrepanz zwischen der englischsprachigen Version dieser Seite und der Übersetzung auftreten, gilt die englische Version. Englische Version dieser Seite anzeigen.