WinGCC und Pin-Toggle-Funktion

Gast #2865804
Lesenswert?
• ▲
▼
Hallo.
Bin gerade dabei einen ASM-Code nach WinGCC zu portieren.
Der ATMega hat die Pin-Toggle-Funktion für Ausgänge.

Hab jetzt ein Verständnisproblem:

PINE = (1<<PINE3); Funktioniert

PINE |= (1<<PINE3); Funktioniert nicht

Wenn ich mir den Disassembler-Code ansehe, ist mir klar, dass
der Compiler bei

Variante 1: SBI PINE... übersetzt

und bei

Variante 2: LDS R24, PINE
            ORI R24, ...
            STS PINE, R24

draus macht. Ich sehe auch, dass die 2. Variante Probleme
macht. ( Weil ich ja alle gesetzen Pins toggle ).

Aber warum macht der Compiler bei Variant 2 das so bzw. gibt es
da noch mehr solche "Stelle", wo maneigentlich nur schreiben müsste,
der Compiler aber vorher liest.

Danke,
Pepe.
#2866016
Lesenswert?
• ▲
▼
Pepe schrieb:


> Variante 2: LDS R24, PINE
>             ORI R24, ...
>             STS PINE, R24
>
> draus macht. Ich sehe auch, dass die 2. Variante Probleme
> macht. ( Weil ich ja alle gesetzen Pins toggle ).
>
> Aber warum macht der Compiler bei Variant 2 das so

Du hast doch selbst schon rausgefunden, wo der Haken bei Variante 2 
liegt. Eben das alle Output-Pins, die momentan auf 1 sind, ebenfalls 
getoggelt werden. (Werden müssen ... denn genau das hast du ja 
hingeschrieben)
Aber: Woher soll denn der Compiler wissen, welche Pins momentan auf 1 
liegen? Und wenn du dir das mal genauer überlegst, was passieren muss, 
kommst du zum Schluss: er kann es gar nicht anders machen.

Dein SBI aus der Variante 1 geht nur deshalb, weil da genau nur 1 Pin zu 
toggeln ist. Aber diesen 'Luxus' gibt es in Variante 2 nicht.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.