heise online · c't · iX · Technology Review · Telepolis · mobil · Security · Netze · heise open · heise resale · Autos · c't-TV · Jobs · Kiosk
Zum Inhalt
c't

c't Projekte - c't-Bot und c't-Sim - Mailinglisten

c't-Bot und c't-Sim


[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





Copyright © 2007 Heise Zeitschriften Verlag Kritik, Anregungen bitte an c't-WWW Datenschutzhinweis   Impressum