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

Re: Interrupt zu einem Thread Kategorie: Progr. Assembler, TaskingTools, OS (von André H. - 8.11.2004 13:39)
Als Antwort auf Interrupt zu einem Thread von Denis - 5.11.2004 14:39
Ich nutze:
C-Control II Unit, C164CI-ControllerBoard, CC2-Application-Board, CC2-StarterBoard, CC2-ReglerBoard, OSOPT V3.0
Hallo Denis,

> Versuche gerade eine Multitasking- Steuerung für meine Motoren zu schreiben.

Schreibe lieber eine Multithreading-Steuerung.
Multitasking kann die CC2 nicht. (Das ist etwas anderes)

> Dabei wollte ich, da� bei einem Interrupt z.B. am Port P1H.3 der aktuelle Thread anhält
> und ein anderer startet. Das wollte ich in C als Systemroutine im Segment 3 speichern.
> Problem ist, da� ich nicht wei� wie man im C ein thread startet bzw. anhält.

So gesehen ist es eigentlich nicht möglich.
Denn in mit C- bzw. ASM-Routinen arbeitest Du auÃ?erhalb des Betriebssystems.
Somit kann man normal auch die Threadsteuerung nicht beeinflussen.

Jedoch gebe es evtl. einen kleinen Dirty Hack:
Und zwar den VM-Code VM-RUN.
Kurz in die Sprungtabellen des OS geschaut:
Diese Routine bedindet sich an Offset 0x669E und dient zur Anpassung
der Threadprioritäten: Prio=0 : Thread steht, Prio=1 bis 255 : Thread läuft.
Um nun diese Routine in Systemroutien zu "mi�brauchen" benötigt man
ein Paar Infos der ötigen Parameter.

Im Prinzip sind es nur zwei: Thread-Nr. und Thread-Prio.

Die Thread-Nr. wird in Register R12 übergeben.
Die Nummer 0 bezeichnet den aktuellen Thread, die Nummern 1 bis 255 direkt
die Threads 1 bis 255
Die Nummer 0 darf nie aus einer Interrupt-Routine übergeben werden,
da hier dann der gerade laufende Thread angesprochen wird, welcher das auch immer ist.
Das Problem könnte u.U. das Herausfinden der Thread-Nr. sein.
Jedoch sollte der Compiler diese von "oben nach unten" mit "1" beginnend durchnummerieren.
Der Thread main hat demnach immer die letzte nummer.
Also sollte ein bi�chen Zählen per Hand ausreichen. ;-)

Der Zweite Parameter, die Priorität, mu� vor dem Setzen von R12 und Aufruf der Routine
auf den Stack geschoben werden.

Das Ganze ist jedoch hoch experimentel und noch nicht getestet.

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:

Re: Interrupt zu einem Thread (von Guido - 24.06.2005 12:05)