-         

Ergebnis 1 bis 5 von 5

Thema: Vergleich Fehler?

  1. #1
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    08.08.2004
    Ort
    Zwolle
    Alter
    61
    Beiträge
    531

    Vergleich Fehler?

    Anzeige

    Hallo,

    Es handelt sich um Atmega8L und GCC compiler.

    Timer1 generiert jeden 10ms ein overflow interrupt.

    • volatile unsigned int Count;

      SIGNAL (SIG_OVERFLOW1){
      Count+=10;
      }

      WaitFunction(unsigned int Compare){
      Count=0;
      while(Count < Compare); //instabiel
      while(Count != Compare);//immer stabiel
      }


    Kann mir Jemanden erklaher warum die function WaitFunction(500) mit 'while(Count < Compare)' meistens 500ms wartet aber ab und zu viel kurzer (so etwas wie 200ms) wartet und dagegen '(Count != Compare)' immer stabiel ist????

    Gruss

    Henk

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.801
    Ich bezweifle, daß die zweite Variante immer funktioniert. Vielleicht wesentlich öfter als die Erste, aber nicht immer, denn es ist nicht-atomarer Code.

    Klingelt's?
    Disclaimer: none. Sue me.

  3. #3
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    08.08.2004
    Ort
    Zwolle
    Alter
    61
    Beiträge
    531
    @SprinterSB

    Klingelt's?
    BIM BAMM!!!!

    Hatte nach 4 Stunden prugeln die Ursache gefunden.
    Habe gerade deine Link 'nicht atomare' besucht.
    Und wass sehe ich dort, da steht genau dass Gleiche!
    Ich wirds niemals mehr vergessen...

    meine Losung:

    Code:
    nicht:
    while(Count < Compare);
    
    sondern:
      timer1_interrupt_ON;
      while(1){
        timer1_interrupt_OFF;
        if(!(Count < Compare)){  //if count is okay
          break;
        }
        timer1_interrupt_ON;
      }
    Lauft wie ein Kuckuck.

    Auf jeden fall, Dank fur die Link.

    Gruss

    Henk

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.801
    Nach dem break bleibt der Timer1-IRQ deaktiviert (bevor du ein neues Thema dazu aufmachst *fg*)
    Disclaimer: none. Sue me.

  5. #5
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    08.08.2004
    Ort
    Zwolle
    Alter
    61
    Beiträge
    531
    Haha,

    die code ist Teil der Wartefunktion, wenn die Wartefunktion angerufen wird wird die Interrupt eingeschaltet dafur ist die erste 'timer1_interrupt_ON;'
    und dafur sollte noch stehen 'Count=0;'


Berechtigungen

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