"Toggle Variable"

Gast #2672221
Hallo,
ich habe grad folgendes Problem:

In einer Schleife, die alle 25ms abgerufen wird, möchte ich jeweils den 
Status des Ports ändern.
D.h. beim ersten mal auf 1, dann nach weiteren 100ms (wenn die schleife 
erneut aufgerufen wird) wieder auf  0.. usw.

Ich nutze das AVRStudio.
Leider gibt es ja keine booleschen Variablen... die könnte ich ja 
einfach immer erhöhen und sie ändert Ihren Status bei jedem Durchlauf 
von 1 auf 0.

WIe macht man sowas? Ich bin noch Anfänger in Sachen C.

Vielen Dank
Gast
Mit einem bitweisen XOR (=> Bitmanipulation) hast du das gewünschte 
Umschaltverhalten (Toggle).
1
  foo = 3; 
2
  while(1) {
3
    foo ^= 1; // bitweise XOR
4
  }

0. Durchlauf: foo = 3 0b0011
1. Durchlauf: foo = 2 0b0010
2. Durchlauf: foo = 3 0b0011
...
Gast
Marc schrieb:
> Leider gibt es ja keine booleschen Variablen... die könnte ich ja
> einfach immer erhöhen und sie ändert Ihren Status bei jedem Durchlauf
> von 1 auf 0.

In welcher Sprache macht man so was ? Wo ist TRUE + 1 gleich FALSE ?

MfG Klaus
Gast
Marc schrieb:
> Leider gibt es ja keine booleschen Variablen...

Klar gibt's die. Nach #include <stdbool.h> steht dir der Typ bool zur 
Verfügung.

> die könnte ich ja einfach immer erhöhen und sie ändert Ihren Status bei jedem
> Durchlauf von 1 auf 0.

Wenn du true + 1 rechnest, wird aus dem linken Teil ein int mit Wert 1, 
dann wird die Addition durchgeführt und dann das Ergebnis wieder nach 
bool zurückkonvertiert. Da 1+1=2, und 2 nach bool konvertiert true 
ergibt, wird dein Wert nie wieder 0.

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.