## c't-Projekte - Mailinglisten

[Voriger (Datum)] [Nächster (Datum)] [Voriger (Thread)] [Nächster (Thread)]
[Nach Datum][Nach Thread]

### AW: [ct-bot]Patch für Fehler in delay-Funktion

Absender: Jörg Schüler-Maroldt
Datum: Mi, 20.09.2006 12:46:50
In-reply-to: <002801c6db48$e25976c0$1401a8c0@user08>

    Hallo Timo,

    du hast leider recht, man muss die Funktion mit "cli" "sei" verriegeln.

    uint32 timer_get_ms_ticks(void)
    {
    	uint32 tick;
    	asm volatile("cli");	// Disabel Interrupt
    	tick=time_tick;
    	asm volatile("sei");	// Enable Interrupt
    	return tick;
    }

    In "delay.h" ist delay() falsch deklariert es muss
      void delay(uint16 ms);
    heißen

    in "delay.c" fehlt
      #include "delay.h"
    deshalb ist der Fehler nicht aufgefallen.

    Frage an AVR-Asm Kenner:
    Sind im Timerinterrupt die Interupts gesperrt bis "reti" oder muss man das
    selbst machen ?

    Mein ctbot "muckt" aber noch mit der Funktion und ich melde mich wenn
    es bei mir Funktioniert.

    -----Ursprüngliche Nachricht-----
    Von: ct-bot-entwickler-bounces@xxxxxxxxxxxxxxxxx
    [mailto:ct-bot-entwickler-bounces@xxxxxxxxxxxxxxxxx]Im Auftrag von Timo
    Sandmann
    Gesendet: Montag, 18. September 2006 19:36
    An: 'Entwicklung rund um den c't-bot'
    Betreff: RE: [ct-bot]Patch für Fehler in delay-Funktion

    Jörg Schüler-Maroldt schrieb:

    > Hallo,
    >
    > die delay-Funktion im ct-Bot funktioniert so nicht sauber.
    > Der Fehler liegt in der timer.c / timer.h Der Aufruf von
    > timer_get_ms() und timer_get_s() nacheinander kann immer
    > durch einen Interrupt unterbrochen werden und beim Überlauf
    > von time_ms Differenzen von einer Sekunde hervorrufen.

    Hallo,

    das Problem leuchtet mir schon ein, aber die Lösung nicht so ganz:

    > ...
    > Der Zugriff auf eine 16-Bit Variable (time_ms_tick) kann
    > nicht unterbrochen werden, da es sich nur um eine
    > Assembler-Anweisung handelt.

    Wird uint t1=time_ms_tick; nicht zu _zwei_ LDS-Anweisungen in Assembler?
    Dann könnten doch auch die wieder unterbrochen werden und das ganze ändert
    nichts, oder sehe ich das falsch?

    Viele Grüße,
    Timo

    _______________________________________________
    ct-bot-entwickler Mailingliste
    ct-bot-entwickler@xxxxxxxxxxxxxxxxx
    http://www.heise.de/bin/newsletter/listinfo/ct-bot-entwickler

- Antworten:
  - Re: [ct-bot]Patch für Fehler in delay-Funktion
    - From: Helge Dietert

- Referenzen:
  - RE: [ct-bot]Patch für Fehler in delay-Funktion
    - From: Timo Sandmann

- Voriger (Datum): RE: [ct-bot]Patch für Fehler in delay-Funktion, Timo Sandmann
- Nächster (Datum): Re: [ct-bot]Patch für Fehler in delay-Funktion, Helge Dietert
- Voriger (Thread): RE: [ct-bot]Patch für Fehler in delay-Funktion, Timo Sandmann
- Nächster (Thread): Re: [ct-bot]Patch für Fehler in delay-Funktion, Helge Dietert
- Indizes:
  - Datum
  - Thread