-         

Ergebnis 1 bis 8 von 8

Thema: Funktion mit for-Schleife

  1. #1

    Funktion mit for-Schleife

    Anzeige

    Ich habe versucht, die Aufgabe 6.1 (2) des Asuro-Buches zu lösen.
    Hier soll man alle LED´s hintereinander für eine Sekunde zum Leuchten bringen.
    Dafür brauch man eine Menge for-Schleifen und so steht es dann auch in den Lösungen, aber kann man für die for-Schleife nicht eine extra Funktion erstellen, die zwischen jeder LED aufgerufen wird?

    Ich habe das versucht, es aber nicht hinbekommen. Wenn das geht, könnte mir jemand ein Musterbeispiel, von mir aus mit einem Wechsel zwischen 2 LED´s, für die Sache zeigen?

    Wäre echt nett!

  2. #2
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.781
    Blog-Einträge
    8
    Sowas löst man mit Funktionen, z.b.:

    void pause(unsigned int dauer) {

    unsigned int i, j;

    for (i=0; i<dauer; i++) for (j=0; j<1000; j++) j=j;

    }

    Keine Ahnung ob das funzt. Wenn ja, dann ist j der Zähler für die innere Schleife und bestimmt die Verzögerung pro Dauereinheit. j=j; ist ein dummy und sorgt dafür, das der mega8 nicht einschläft.

    Das geht mit der lib natürlich auch, aber ohne sollte man es auch können. Anwendung wäre dann:

    ...
    StatusLED(RED);
    pause(500);
    StatusLED(GREEN);
    pause(500);
    ...

    Das Ganze sieht dann z.B. so aus:


    Code:
    #include "asuro.h"
    
    void pause(unsigned int dauer) {
    
    unsigned int i, j;
    
    for (i=0; i<dauer; i++) for (j=0; j<30000; j++) j=j;
    
    }
    
    int main(void) {
    do{
    
    Init();
    
    StatusLED(RED);
    pause(500);
    StatusLED(GREEN);
    pause(500);
    
    }while (1);
    return 0;
    }

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  3. #3
    Kann man auch ohne Überlieferung von Parametern eine Funktion einbauen?

    Und was bedeutet eigentlich "void"?

  4. #4
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.781
    Blog-Einträge
    8
    Der plöde compiler hat den dummy rausoptimiert. Hier eine bessere Variante:

    Code:
    #include "asuro.h"
    
    void pause(void) {
    
    unsigned int i, j, dauer;
    
    dauer=500;
    
    for (i=0; i<dauer; i++) for (j=0; j<1000; j++) sei();
    
    }
    
    int main(void) {
    
    Init();
    
    do{
    StatusLED(RED);
    pause();
    StatusLED(GREEN);
    pause();
    
    }while (1);
    return 0;
    }
    Das void bezieht sich auf den Rückgabewert der Funktion. void bedeutet das kein Wert zurückgeliefert wird. In der zweiten Variante bedeutet viod zusätzlich dass kein Parameter übergeben wird.

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  5. #5
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    10.08.2004
    Ort
    Großbardorf
    Alter
    30
    Beiträge
    674
    Der plöde compiler hat den dummy rausoptimiert. Hier eine bessere Variante:
    Für sowas kann man doch auch gut ein nop verwenden. Dieser Befehl braucht exakt einen Takt und bewirkt nichts außer einer Zeitverzögerung.

  6. #6
    Ich habe es fast genauso gemacht, bloß dass ich von der Verwendung von void nichts wusste.
    Für den Sekundentakt nehme ich einfach Sleep().

    Vielen Dank, hat mir weiter geholfen!

  7. #7
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Jena
    Alter
    31
    Beiträge
    3.912
    also void bedeutet einfach "nichts".

    steht es vor der funktion, bedeutet es dass nichts zurückgegeben wird, steht es in den klammern, bedeutet es dass keine parameter erwartet werden.
    kleinschreibung ist cool!

  8. #8
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.781
    Blog-Einträge
    8
    Ich wuste nicht, ob ihr Sleep(); auch verwenden dürft. Es ist natürlich das einfachste und genauste weil Interuptgesteuert.

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •