Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - FAQ - Zum CC1-Forum - Zum CC-Pro-Forum

Re: Millisekundentimerinterrupt Kategorie: Progr. Assembler, TaskingTools, OS (von André H. - 28.11.2004 9:30)
Als Antwort auf Millisekundentimerinterrupt von Harald - 25.11.2004 9:23
Ich nutze:
C-Control II Unit, C164CI-ControllerBoard, CC2-Application-Board, CC2-StarterBoard, CC2-ReglerBoard, OSOPT V3.0
Hallo Harald,

> Zunächst mal, hab ich das richtig verstanden?
> Ich binde mit "hook" eine C-Routine an den Timerinterrupt.

Richtig. Allerdings würde ich eher direkt in ASM schreiben. ;-)
In C komen hin un wieder seltsame Konstrukte heraus.

> Mit dem zu dekrementierenden Zähler ist vermutlich keine Variable, sondern ein Zählerregister im
> Prozessor gemeint, das dekrementiert wird.

Nein, ein Register im eigentlichen Sinn ist nicht gemeint.
Jedoch brauchst Du einen festen Bereich für Deinen Zähler im RAM.
Dazu ist es besser, im internen RAM ein Integer zu reservieren.
Es gab ursprünglich zwei normal nicht benutzte Bereiche im internen RAM.
Einmal 100Byte von 0xF8B4 bis 0xF917 und im Bitadressierbaren Bereich ab 0xFD00h.
Der erste Bereich mit 100Byte kann bedingt dür Daten benutzt werden.
Bedingt, da dieser für das Modul flash.c2 benötigt wird, um Schreib- und Löschzugriffe
auf den Flash zu ermöglichen.
Im bitadressierbaren Bereich wird das Byte 0xFD00 vom OS benutzt.
die Bytes 0xFDFE und 0DFF werden vom Modul cap.c2 für die erweiterten Captures benutzt.
Alles dazwischen sollte man frei verwenden können.(252 Byte)

> Der Aktuelle Wert, der die Zeit für den Impuls festlegt, mu� jetzt vor dem ersten Aufruf der C-Routine
> in dieses Register geschrieben werden.
> Geht das irgendwie vom Betriebssystem aus und ...

Auf die RAM-Bereiche des internen RAMs kann man sehr  einfach mit inlines zugreifen:
Du benutzt z.B. das Speicher-Word an 0xFDFC als "Register".
Dann kannst Du mit
function setMyCounter(int value)
{
 inline vmcodes.VM_STORE_ABSOLUTE_INT;
 inline 0xFDFC;
}

eine beliebigen Wert darin speichern.
Bei Programmstart eben den Wert 0, bevor Du die Routie an den interrupt hängst.

> ... vor allem, wie verhindere ich, daÃ? dieses Register irgendwie vom Betriebssystem
> wieder überschrieben wird? Schlie�lich wei� ich nicht so genau, was das OS eigentlich macht...

Indem man eben, wie oben geschrieben, einen Speicherbereich des internen RAM benutzt,
der nicht vom OS benutzt wird.

MfG André H.



Antworten bitte nur ins Forum!
Fragen per EMail auf Forum-Postings werden nicht beantwortet!

Das macht meine Heizung gerade


    Antwort schreiben


Antworten: