Go Down

Topic: Wiring.c umschreiben, da Timer 0 benötigt wird (Read 397 times) previous topic - next topic

ref110

Hallo,

ich habe heute versucht die Funktion ISR(TIMER0_OVF_vect) zu verwenden.
Im Forum habe ich gelesen, dass dies nicht möglich ist, da Timer0 für die delay-Funktionen gebraucht wird. Da ich bereits alle anderen Timer benutze würde ich gerne auch Timer0 verwenden.

In einem weiteren Forumsbeitrag habe ich gelesen, dass man die Funktion wiring.c umschreiben muss um Timer 0 zu verwenden. Mir ist bewusst, dass ich dann Timer 0 so nicht verwenden sollte.

Diesen Link habe ich für die wiring.c gefunden:

https://github.com/arduino/Arduino/blob/master/hardware/arduino/cores/arduino/wiring.c#L43

Allerdings kenne ich mich damit nicht wirklich aus. Es wäre super wenn mir jemand erklären könnte was ich genau machen muss um den Timer 0 als Interruptfkt verwenden kann.


Grüße

Markus

pylon

Im Grunde genommen musst Du in wiring.c nichts ändern, Du kannst einfach den Timer0 über die Register neu konfigurieren und eine eigene Interrupt-Routine definieren (Dein Code wird später abgearbeitet als der von wiring.c). Du musst allerdings sicherstellen, dass weder Dein eigener Code, noch irgendeine Bibliothek, die Du einsetzt, delay(), millis() oder micros() verwendet. delayMicroseconds() kann verwendet werden, da das wartet indem NOOPs ausgeführt werden. Mit dieser Einschränkung dürftest Du bei sehr vielen Bibliotheken auf Probleme stossen.

Go Up