XC167 Software Interrupts

OP #924972
Hallo,

habe die Aufgabe bekommen auf einem XC167-CI ein paar Tasks(=Methode) 
laufen zu lassen die sich gegenseitig unterbrechen sollten.

Dazu habe ich für die Task mit der kleinsten Periode(höchste Frequenz) 
einen Timer eingerichtet der nach 5ms überläuft und in dessen Interrupt 
ich eine Methode aufrufe in der die Aufgaben der Task abgearbeitet 
werden. Soweit, sogut!

Nun sollen noch 4 wetere Tasks dazu kommen die alle in ihrer Periode 
vielfache der 5ms Task sind.

z.B. Regelung alle 20ms, Polling der Taster alle 10ms ...

Diese weiteren Tasks sollen innerhalb der 5ms-Task per Software 
Interrupt angestossen werden. Diese Interrupts erhalten unterschiedliche 
Prioritäten und deswegen ist es möglich, dass sie sich gegenseitig 
unterbrechen können.

Hab mal etwas nach Software Interrupt gegoogelt. Lese immer was von 
"Registern auf dem Stack sichern, ISR ausführen, Register restaurieren".
Ist es wirklich so "umständlich"? Der XC167 kann das doch bestimmt 
irgendwie selber alles managen oder!?

Und noch ne kleine Frage: Nimmt man für nen Software Interrupt einfach 
einen freien Interruptvektor der normalerweise für andere Dinge wie z.B. 
Timeroverflow Interrupt gedacht ist?

Gruß,
Florian
Florian Halfmann wrote:

> Diese weiteren Tasks sollen innerhalb der 5ms-Task per Software
> Interrupt angestossen werden. Diese Interrupts erhalten unterschiedliche
> Prioritäten und deswegen ist es möglich, dass sie sich gegenseitig
> unterbrechen können.

Was soll denn das mit den Prioritäten?
Ich denke, die Tasks werden zu festen Zeiten (5,10,20ms) aufgerufen.

Prioritäten braucht man nur, wenn die Aufrufe zufällig sind (externe 
Interrupts).

Du machst nen 5ms-Interrupt und jede Task kriegt darin nen 
Countdown-Zähler für ihr Aufrufintervall und gut is.

Man muß nicht mit Gewalt Programmiertechniken von großen 
Betriebssystemen übernehmen wollen.


Peter
OP
Hi Peter,

das hat was mit Echtzeitfähigkeit zu tun. Es ist auch nicht auf meinem 
Mist gewachsen sondern von unserem Professor an der Fachhochschule so 
gefordert.

Es gibt z.B. ne Regelung die etwa 13 Millisekunden dauert und alle 20ms 
aufgerufen wird.. Gleichzeitig ist aber die 5ms Task von höherer 
Priorität (harte Echtzeitanforderung) und muss die Regelung in diesem 
Falle dann unterbrechen.

Aus diesem Grund brauchen wir bei unserem Projekt Software Interrupts 
mit verschiedenen Prioritäten.

Nur wie das mit dem Software Interrupt funktiuoniert weiß ich immer noch 
nicht ...

Gru0,
Florian
Florian Halfmann wrote:

> Es gibt z.B. ne Regelung die etwa 13 Millisekunden dauert und alle 20ms
> aufgerufen wird.. Gleichzeitig ist aber die 5ms Task von höherer
> Priorität (harte Echtzeitanforderung) und muss die Regelung in diesem
> Falle dann unterbrechen.

Und wo ist das Problem?
Der 5ms Timerinterrupt setzt alle 20ms ein Bit und die Mainloop führt 
dann die Regelung aus.

Es ist aber kein gutes Design, wenn man schon zu Beginn weiß, daß die 
CPU-Auslastung bei minimal 65% liegt.
Da hat man kaum noch Luft für Erweiterungen.

Ich würde erstmal versuchen, unter 10..20% zu kommen (anderer 
Algorithmus, schnellerer Quarz, besserer Compiler, andere CPU).


Peter
OP
Hey das ging ja flott :)

also der Controller läuft mit 40 MHz :)

Die Regelung ist auch von ner Fremdfirma vorgegeben und da kann am 
Algorithmus von uns nix gedreht werden.

Es war auch nur ein Besipsiel. Zu den ganzen Tasks kommen noch einige 
andere dazu. Es ist ZWINGEND gefordert das ganze per Software Interrupts 
zu lösen.
Dient mehr zur Übung als vielleicht Sinn dahinter steckt!

also haste da noch nen Tip wie man sowas angeht!?

Gruß,
Florian
Gast
Also die Prioritaeten lassen sich durchaus einbauen, ich weiss 
allerdings nicht, ob ich von einem Software Interrupt sprechen wuerde.
Beim XC167 geht das wie folgt:
1. In der Initialisierung von unbenuetzten Interrupts (davon hat er nun 
wirklich jede Menge), wird dem 5 ms Interrupt die hoechste Prioritaet 
gegeben, dem 20 ms Interrupt die niedrigste. Der Interrupt wird dann 
dadurch eingeleitet, dass nicht der Vektor angesprucngen wird, sonder 
per Software das Interrupt Request Flag gestzt wird. Jetzt laeuft das 
ganze mir Hardware Unterstuetzung. Retten der Rueckkehr Adresse und 
aehnliches wird jetzt von der Hardware uebernommen.
Hoffe das macht Sinn fuer Dich, ist schon spaet und ich bin etwas muede.

Robert
OP
So, hat alles super funktioniert mit den Interrupts!

Anfangs hatte ih nur dass Problem dass meine missbrauchten externen 
Interrupts ohne das Zutun des Timers immer wieder willkürlich wie von 
Geisterhand aufgerufen wurden. Das lag aber daran, dass die Pins am 
Controller in der Luft hingen.
Hab sie dann mal auf Ground gelegt und siehe da, alles flutscht  wie ne 
1 :-)

Allerdings muss man mit den Prioritäten der Softwareinterrupts 
aufpassen. Da kann man schnell in Teufels Küche geraten...

Wenns aber mal läuft isses ne echt feine Sache!
So kann man in kürzester Zeit ne Menge Aufgaben unterbringen und auch 
trotzdem noch dafür sorgen dass die Höchstprioren mit der niedrigsten 
Periode unmittelbar aufgerufen werden und die niedriger Prioren 
unterbrechen!

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.