Priorität von Interrupt setzen

Gast #951915
Lesenswert?

Hallo,

ich  habe ein kleines Programm gechrieben, in dem ich zwei 
Interrupt(senden und empfangen über UART) aktiviert habe.Jetzt will ich 
dass das Empfang eine höhe Priorität hat,dh wenn gleichzeitig Senden bzw 
Empfangenaktion sich treffen, soll zuesrt die Empfangenaktion 
gearbeitet.

thomas
#951949
Lesenswert?

Das waren alles sehr kreative Aufforderungen, den Typ zu enthüllen.

AVRs haben keine wirklich priorisierten Interrupts. Wenn es sehr eilig 
ist, kann man bei weniger wichtigen Interrupts im Handler die Interrupts 
wieder freigeben, wenn es sich um welche handelt deren Ursache mit 
Ansprung des Handler bereits gelöscht ist (was bei UART Interrupts 
nicht der Fall ist). Geht natürlich zu Lasten des Stacks, und wenn 
sehr viele gleichzeitig eintreffen kann es interessant werden.
Gast #951955
Lesenswert?

> bitte konnt ihr mehr Erklärungen für die Antwörte geben.

Auf unüberlegt hingespuckte Fragen gibt es nunmal rotzige Antworten. Sie 
sollen Dir sagen, dass Du Deine Frage schlecht formuliert hast und Dich 
dazu erziehen, es beim nächsten mal besser zu machen.


Den AT90CAN128 kenne ich mangels Interesse an CAN nicht, ich vermute 
aber, das ist ein Mega128 mit CAN-Erweiterung, also ein AVR. AVRs haben 
aber keine echte Interrupt-Priorität, d.h. das Unterbrechen einer 
laufenden ISR durch einen anderen (höher priorisierten) Interrupt ist 
nicht vorgesehen. Es gibt zwar Möglichkeiten, in der ISR weitere 
Interrupts zu erlauben, aber dazu muss man schon sehr genau wissen, was 
man tut. Ich gehe deshalb nicht darauf ein.

Es wird Dir wohl nichts Anderes übrig bleiben, als Deine ISRs so kurz 
wie möglich zu halten (Daten sichern und per Merker beim Hauptprogramm 
anmelden) und die Verarbeitung der Daten in der Mainloop zu erledigen. 
Da es Dir vorrangig um RX und TX geht, solltest Du Ringbuffer dafür 
einrichten. Das schafft die Voraussetzung, die ISRs kurz halten zu 
können und beschleunigt die Datentransfer-Zugriffe der Mainloop (bzw. 
derer Routinen) sehr.

KH

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren