Hallo an diesem sonnigen Tag :). Wie der Titel schon sagt habe ich ein Verständnisproblem bzgl. Interrupts. Interrupts sind meines Wissens heutzutage absolut notwendig, um Polling vermeiden zu können. Um mein Problem zu schildern, gebe ich mal ein kurzes Beispiel: Es sollen Daten über die SPI geschickt werden. Die Daten werden in den Puffer der SPI gelegt Ein Interrupt wird ausgelöst, wenn das Senden fertig ist. Jetzt kommen neue Daten in den Puffer. Nur: Was sollte hier dann in der ISR passieren? Wenn hier einfach ein "Gesendet"-Flag gesetzt wird, das besagt, dass das Senden fertig ist, dann gewinnt man ja gar nichts. Dann müsste mein Haupprogramm ja trotzdem dieses Flag andauernd pollen. Dann könnte man genauso das SPI-Busy-Flag pollen. Das würde ja keinen Sinn machen - im Gegenteil. Demnach würde ich nun vermuten, dass alle Daten die geschickt werden über die ISR in den Puffer gelegt werden. Die ISR müsste also irgendwie über einen globalen Zeiger auf die Adresse des nächsten zu sendenen Wortes zeigen, und diesen Zeiger nach dem Befüllen des SPI-Sendepuffers inkrementieren. Ist das so? Wie geht man aber dann damit um, wenn konstant Daten zum Weiterschicken generiert werden (zum Beispiel über einen ADC)? Diese Daten müsste ich ja dann immer weiter hinten im Speicher anstellen. Irgendwann ist dann der Speicher voll. Ich muss also irgendwann wieder vorne anfangen.... macht man das so? :)
Genauso. Fast. Den Sendepuffer füllt allerdings nicht die ISR, sondern das Userprogramm. Die ISR leert den Sendepuffer, indem sie bei jedem IRQ "Zeichen verschickt" das nächste zu verschickende Zeichen aus dem Sendepuffer entnimmt und auf die Reise schickt. Umgekehrt bei einem Empfangspuffer. Hier füllt die ISR den Empfangspuffer und das Userprogramm entnimmt daraus. Den Puffer kann man z.B. als FIFO (First in first out) Puffer einrichten oder als Ringpuffer. Beispiel findet man haufenweise im Netz besonders im Zusammenhang mit UART/RS232. Das Verhalten bei "Puffer voll" kannst du je nach Gusto implementieren. Das ist frei wählbar; von "Still drüber hinweggehen und Daten wegschmeissen" bis zum "Hilfeschrei mit Abschuss einer Signalrakete" ist alles möglich.
Krapao schrieb: > Hilfeschrei mit Abschuss einer Signalrakete :D - Danke für dieses anschauliche Beispiel. Ok Ringpuffer ist wohl hier dann echt das Schlagwort :)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.