Forum: Mikrocontroller und Digitale Elektronik Latch - nop notwendig?


von K. B. (Gast)


Lesenswert?

Hi,

ich arbeite gerade mit einem 74 237 Line Decoder und steuer diesen 
mittels eines AVRs (in Software) an. In meinem Code kommt (so ungefähr) 
Folgendes vor:
1
PORTC &= ~(_BV(PIN));
2
PORTC |= _BV(PIN);

Funktioniert auch wunderbar. Ich meine allerdings irgendwo gelesen zu 
haben, dass man dazwischen ein nop stecken sollte. Da geht es wohl 
weniger ums Timing (der 74HC237 schaltet ja "typischerweise" bei 4.5 V 
und 25 °C in 2 ns), sondern da geht es eher um das Problem, dass der 
Compiler (je nach Einstellung) solche Abschnitte wegoptimieren könnte. 
In dem ein oder anderen Projekt jedenfalls konnte ich schon ein 
zwischengeschobenes nop zu sehen bekommen.

Ich kompiliere hier gerade mit "-Os" und konnte nichts dergleichen 
feststellen.

Leider habe ich da jetzt aber nichts offizielles zu gefunden. Wisst ihr 
da mehr bzw. wie handhabt ihr das?

Vielen Dank!

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

K. B. schrieb:
> sondern da geht es eher um das Problem, dass der
> Compiler (je nach Einstellung) solche Abschnitte wegoptimieren könnte.
EA-Zugriffe darf ein Compiler nicht wegoptimieren. Dazu müssen 
natürlich die Portdefinitionen passen. Wenn der Port nicht als volatile 
definiert ist, dann hat der Compiler freie Hand...

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

K. B. schrieb:
> sondern da geht es eher um das Problem, dass der
> Compiler (je nach Einstellung) solche Abschnitte wegoptimieren könnte.

Das sollte er nicht tun, wenn PORTC korrekt deklariert ist. Das ist als 
volatile zu kennzeichnen, und dann darf der Compiler da nichts 
wegoptimieren.

Wenn Du nicht selbstgestrickte Headerdateien für Deinen Compiler 
verwendest, sollte das von demjenigen, der die Definitionen für die 
Ports angelegt hat, schon so erledigt worden sein.

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Wenn der Chip schnell genug (und sowit die Flanke lang genug) bringt ein 
nop nichts, die Ports sind idr. volatile deklariert da wird dann auch 
nichts wegoptimiert.

von Peter D. (peda)


Lesenswert?

Das NOP braucht man zwischen Setzen und Einlesen von Pins, z.B. bei 
einer Matrixtastatur.
Ein Eingang wird mit dem vorherigen Zyklus gelatcht, d.h. man liest noch 
den alten Zustand.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.