Registrieren    Anmelden    Forum    Superkato.net



Ein neues Thema erstellen Auf das Thema antworten  [ 1 Beitrag ] 
Autor Nachricht
 Betreff des Beitrags: Re: STM32 - EXTI
 Beitrag Verfasst: Sa Sep 15, 2012 1:28 pm 
Offline
Site Admin
Benutzeravatar

Registriert: Fr Sep 30, 2011 4:06 pm
BeitrÀge: 49
Wohnort: Hessen
Zitat:
Nested Interrupts, also erneuten Interrupt innerhalb meiner Interrupt Funktion, verhindere ich mit dem "pending register". Richtig?


Jap!

Zitat:
Deshalb sollte man das PR bit auch erst am Ende der Funktion zurĂŒcksetzen. Selbst da hat man das Problem, dass rein theroretisch, noch kurz vor Verlassen der Funktion ein erneuter Interrupt auftreten könnte. Bei oftmaliger Wiederholung der nested Interrupts kann es den Stack aufbrauchen, was zum Absturz des Programm fĂŒhren wird. Quasi könnte ein sehr schnelles Signal am EXTI Pin zum Problem fĂŒhren (Tasten prellen, Glitch Angriff, hochfrequentes Signal ...).


Und deswegen gibt es PrioritĂ€ten. Du kannst auch den Stack leerrĂ€umen nach jedem Interruptzugriff aber klar da muss man sich gedanken machen. du kannst ja mal ein vom Timer erzeugtes signal per BrĂŒcke auf dein Eingang mit EXTI RĂŒckkoppeln und mit 50mhz schwingen lassen. Da wirst du das verhalten nachstellen können.

Zitat:
Abgesehen vom Problem der nested Interrupts, - wenn man komplett Event gesteuert implementiert, dann ist das grĂ¶ĂŸte Problem, wenn man eine Flanke verliert/ĂŒbersieht.
Angenommen eine Flanke low/high löst einen EXTI Interrupt aus. Die Routine benötigt 20”s zur AusfĂŒhrung. Das PR Bit wird also mit der Flanke gesetzt und am Ende der Funktion (nach 20”s) wieder zurĂŒckgesetzt.
Wenn jetzt innerhalb der 20”s die high/low Flanke kommt, dann verliert man den EXTI Interrupt weil das PR bit zurĂŒckgesetzt wird. Ist fatal, weil das Programm dann von einem falschen Pin Status ausgeht.
Setzt man jedoch das PR Flag bereits am Anfang der Routine zurĂŒck, dann kommt es zu nested Interrupts mit all seiner Problematik.
Wie löst man das richtig? Habe ich da was falsch verstanden?

Im zweifel in RTOS eine STatemachine ;)
NE im ernst dann hast du dein Programm schlecht konstruiert. Du musst sicherstellen das jeder Event eindeutig zugeordnet werden kann so das es nicht möglich ist das eine falsche Flanke dein Programm fĂŒhrt.
Schilder mal den konkreten ablauf. Du kannst auch per EXTI in ein Register schreiben

0 Inter.1
0 Inter 2
0 Inter 3
0 Inter 4
0 Inter 5

das Register schreibst du in die MPU. Wenn der exti das bit setzt, startet nach einer plausibilitĂ€tsprĂŒfung ein interrupt der dann deine funktion benachrichtigt.
Und falls nicht plausibel ist, geht das bit unter.

Aber bitte gib mal mehr details zum programm damit ich dir besser helfen kann. So kann ich nich viel machen.


Nach oben 
 Profil  
 
BeitrĂ€ge der letzten Zeit anzeigen:  Sortiere nach  
 
Ein neues Thema erstellen Auf das Thema antworten  [ 1 Beitrag ] 


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 GĂ€ste

 
 

 
Sie dĂŒrfen keine neuen Themen in diesem Forum erstellen.
Sie dĂŒrfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dĂŒrfen Ihre BeitrĂ€ge in diesem Forum nicht Ă€ndern.
Sie dĂŒrfen Ihre BeitrĂ€ge in diesem Forum nicht löschen.
Sie dĂŒrfen keine DateianhĂ€nge in diesem Forum erstellen.

Gehe zu:  
cron