Go Down

Topic: Ein paar allgemeine Programmierfragen (Read 2 times) previous topic - next topic

Dasichbinich

Jun 12, 2013, 06:04 pm Last Edit: Jun 12, 2013, 09:30 pm by uwefed Reason: 1
Moin!
npaar allgemeine Programmierfragen:
1) muss man alle Befehle in loop() tun oder kann man auch etwas wie:
     
Code: [Select]
int wasweisich = keineahnung;
     void setup() {
       pinMode(wasweisich, bla);
     }
     digitalWrite(wasweisich, HIGH);
     delay(1);
     digitalWrite(wasweisich, LOW);

 Programm vorbei.
2) Kann man void loop irgendwie unterbrechen (etwas wie break() in einer while-Schleife)?
3) Wenn man ohne ein delay(irgendewas) dazwischen am laufenden Band einen pin ein und aus schaltet, erreicht man dann theoretisch eine Frequenz von ca. 16MHz oder etwas weniger?
4) Sind diese Fragen dumm und blöde??? :smiley-red:
Arduino Liebhaber

jurs


1) muss man alle Befehle in loop() tun oder kann man auch etwas wie:
      int wasweisich = keineahnung;
      void setup() {
        pinMode(wasweisich, bla);
      }
      digitalWrite(wasweisich, HIGH);
      delay(1);
      digitalWrite(wasweisich, LOW);
  Programm vorbei.


Ja, kannst Du. Wenn Du allen Code in die setup-Funktion packst, dann passiert nach dem Abarbeiten von setup() nichts mehr und bis zum nächsten Reset des Controllers wird nur eine leere loop() wieder und wieder aufgerufen. Das mache ich oft zum Testen von Routinen mit seriellen Debug-Ausgaben am Bildschirm, damit es nicht endlos über den Bildschirm scrollt.


2) Kann man void loop irgendwie unterbrechen (etwas wie break() in einer while-Schleife)?


Du kannst die loop() Funktion genau wie auch jede andere Funktion mit "return" verlassen. Im Fall der loop-Funktion fängt die loop dann aber sofort wieder von vorne an zu laufen.

Wenn Du die loop "anhalten" Möchtest, dann kannst Du das mit einer Endlosschleife, z.B.:
while (true==true) ;
oder kurz:
while (1) ;
Solange die Bedingung  in der Klammer wahr ist (also immer) wird danach ein leerer Befehl ";" ausgeführt.
Danach geht nichts mehr bis zum nächsten Reset.


3) Wenn man ohne ein delay(irgendewas) dazwischen am laufenden Band einen pin ein und aus schaltet, erreicht man dann theoretisch eine Frequenz von ca. 16MHz oder etwas weniger?


Nein.
Wenn Du digitalWrite zum Schalten verwendest, erreichst Du sehr viel weniger als 16 MHz, wohl kaum über 100 kHz.
Wenn Du direkt die Ports ansteuerst, kannst Du eine höhere Schaltfrequenz erzielen, ich glaube maximal 4 MHz.


4) Sind diese Fragen dumm und blöde??? :smiley-red:


Ich bin mir nicht ganz sicher, wie diese Frage gemeint ist.
;)

Dasichbinich

Quote
Ich bin mir nicht ganz sicher, wie diese Frage gemeint ist.
smiley-wink

Nicht so schlimm!!!

Wirklich aufhören lassen, aber dann noch was anderes mach kann man loop und return also nicht?
Arduino Liebhaber

pylon

Quote
Wirklich aufhören lassen, aber dann noch was anderes mach kann man loop und return also nicht?


Das macht keinen Sinn, denn dann kannst Du ja aus dem Loop eine andere Funktion aufrufen und dort mittels return wieder in den Loop zurückkehren, worauf Du dann das "Andere" machen kannst.
Aber vielleicht verstehen wir Dich nur falsch und Du willst etwas ganz anderes. In diesem Fall solltest Du aber beschreiben, was Du erreichen willst und nicht, wie Du es ausgeführt hättest.

michael_x

Ein µC hat sleep modes, für den Fall dass er zwar Strom hat, diesen aber nicht verbrauchen soll  ;)
Kann auch per Signal aus dem Schlaf aufwachen.

Ansonsten sind Programme mit Ende eigentlich nicht für Controller gedacht.
Na ja, wenn der Arduino nur einen Start-Knopf hat, kann der Knopf auch den Reset auslösen, aber das ist schon etwas beschränkt ...

Sieh loop() als das was er macht, wenn er nichts zu tun hat: Prüfen ob irgendwas passiert ist ...

Go Up