Unterbrechbare Interrupts in AVR-GCC

Im Unterforum Microcontroller - Beschreibung: Hardware - Software - Ideen - Projekte

Elektronik Forum Nicht eingeloggt       Einloggen       Registrieren




[Registrieren]      --     [FAQ]      --     [ Einen Link auf Ihrer Homepage zum Forum]      --     [ Themen kostenlos per RSS in ihre Homepage einbauen]      --     [Einloggen]

Suchen


Serverzeit: 25 11 2024  15:40:13      TV   VCR Aufnahme   TFT   CRT-Monitor   Netzteile   LED-FAQ   Osziloskop-Schirmbilder            


Elektronik- und Elektroforum Forum Index   >>   Microcontroller        Microcontroller : Hardware - Software - Ideen - Projekte


Autor
Unterbrechbare Interrupts in AVR-GCC

    







BID = 378684

photonic

Schreibmaschine



Beiträge: 1301
Wohnort: Zürich, Schweiz
 

  


Hallo Zusammen

Ich habe ein kleines Problem mit Interrupts in AVR-GCC. Bei der Verbesserung meiner Brushlessmotoransteuerung fand ich Timingprobleme. Ich habe verschiedene interruptroutinen, die einen sind sehr kritisch was den Ausführungszeitpunkt betrifft. Ein anderer rechenintensiver nicht so, nur die Ausführungsfrequenz ist wichtig, wann genau ist egal.

Ich habe mir nun vorgestellt den nicht kritischen Prozess in eine unterbrechbare Interruptroutine zu setzen damit die anderen ihre Arbeit dann tun können wenn sie sollen.

Gemäss AVR-GCC-Tutorial gibt es das, ich bin allerdings nicht ganz schlau geworden daraus, da dort hauptsächlich die Warnung steht man soll es nur tun wenn man genau weiss was man tut...

hat jemand schonmal so etwas verwendet?

Danke für euere Tipps!

[ Diese Nachricht wurde geändert von: photonic am 17 Okt 2006 23:08 ]

BID = 378691

olfi13

Schreibmaschine

Beiträge: 1077
Wohnort: Wittingen

 

  

Hi!
C kenne ich zwar nicht, aber grundsätzlich:

Setze in der "unterbrechbaren" Routine ein Flag und werte es in der Hauptprogrammschleife aus um die rechenintensive Operation durchzuführen. Dann können die zeitkritischen anderen Int's in dieser Zeit ihre Arbeit machen

Ich hoffe, ich habe dich richtig verstanden.

Gruß, olfi

_________________
Gruß, olfi

BID = 378729

photonic

Schreibmaschine



Beiträge: 1301
Wohnort: Zürich, Schweiz

Das ist grundsätzlich keine schlechte Idee, aber die Hauptprogrammschleife selbst hat auch noch einiges an unkritischer Arbeit zu tun wie Kommunikation, Drehzahlregelung, etc.

Die Wiederholfrequenz der Hauptschleife ist daher zu gering und zu ungenau definiert für diesen Zweck. Dieser arme Atmega48 hat leider alle Hände voll zu tun...


[ Diese Nachricht wurde geändert von: photonic am 18 Okt 2006  8:32 ]

BID = 378735

Ltof

Inventar



Beiträge: 9333
Wohnort: Hommingberg

Hmm...

weder mit AVR, noch mit C kenne ich mich aus. Aber verschachtelte Interrupts würde ich meiden. Kannst Du vielleicht in der Hauptschleife an mehreren geeigneten Stellen einen bedingten Sprung in die Rechenroutine machen? Die Verzweigungs-Entscheidung muss doch nicht nur ein mal pro Hauptschleifen-Durchlauf geschehen. Ist das Ereignis, welches die Rechenroutine auslöst zu kurz für diese Herangehensweise?

Bei PICs ist es möglich, die Interrupt-Flags auszuwerten, ohne dass diese auch wirklich einen Interrupt auslösen müssen. Selbst, wenn andere Quellen tatsächlich einen Interrupt auslösen. Das ist ganz praktisch. Vielleicht geht das bei AVRs auch?

Gruß,
Ltof

_________________
„Schreibe nichts der Böswilligkeit zu, was durch Dummheit hinreichend erklärbar ist.“
(Hanlon’s Razor)

[ Diese Nachricht wurde geändert von: Ltof am 18 Okt 2006  9:37 ]

BID = 378863

Jornbyte

Moderator



Beiträge: 7178

Um die Interrupts zu sperren kommt da ein _CLI hin.
Die Freigaber erfolg mit _SEI.

_________________
mfg Jornbyte

Es handelt sich bei dem Tipp nicht um eine Rechtsverbindliche Auskunft und
wer Tippfehler findet, kann sie behalten.

BID = 378867

Jornbyte

Moderator



Beiträge: 7178

Ach ja, sollten nur einzelne Ints abgeschaltet werden so muss das IE-Bit gelöscht (Bit =0) werden, Bei er UART währe das RXCIE, dieses Bit auf 0 setzen, genau so gehts im Timer (TIMSK).

_________________
mfg Jornbyte

Es handelt sich bei dem Tipp nicht um eine Rechtsverbindliche Auskunft und
wer Tippfehler findet, kann sie behalten.

BID = 378916

photonic

Schreibmaschine



Beiträge: 1301
Wohnort: Zürich, Schweiz

Die Idee mit dem mehrfachen bedingten Sprung tönt vielversprechend! Ist mir wesentlich sympathischer als verschachtelte Interrupts weil ich da sicher bin dass nichts auf mysteriöse Weise schieflaufen kann. Manchmal sind die einfachsten Lösungen die auf die man nicht kommt...

Bis jetzt funktioniert es damit tip top, viel mehr Rechenaufwand wird nicht mehr dazukommen.

Danke für die Hinweise!


Zurück zur Seite 1 im Unterforum          Vorheriges Thema Nächstes Thema 


Zum Ersatzteileshop


Bezeichnungen von Produkten, Abbildungen und Logos , die in diesem Forum oder im Shop verwendet werden, sind Eigentum des entsprechenden Herstellers oder Besitzers. Diese dienen lediglich zur Identifikation!
Impressum       Datenschutz       Copyright © Baldur Brock Fernsehtechnik und Versand Ersatzteile in Heilbronn Deutschland       

gerechnet auf die letzten 30 Tage haben wir 20 Beiträge im Durchschnitt pro Tag       heute wurden bisher 10 Beiträge verfasst
© x sparkkelsputz        Besucher : 182397212   Heute : 4408    Gestern : 7548    Online : 639        25.11.2024    15:40
4 Besucher in den letzten 60 Sekunden        alle 15.00 Sekunden ein neuer Besucher ---- logout ----viewtopic ---- logout ----
xcvb ycvb
0.0264360904694