ForumPortal
Dein letzter Besuch: Aktuelle Zeit: 21. Feb 2018 10:21


Alle Zeiten sind UTC + 1 Stunde




Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 
AbonnentenAbonnenten: 1
LesezeichenLesezeichen: 0
Zugriffe: 302

AutorNachricht
 Betreff des Beitrags: Timer Interrupt stört Programmierung über ETS
BeitragVerfasst: 12. Sep 2016 11:04 

Registriert: 08.2014
Beiträge: 34
Wohnort: Moormerland / Ostfriesland
Geschlecht: männlich
Hallo,

ich möchte einen Timer Interrupt nutzen, um zeitlich relativ genau Messungen durchzuführen.
Diese Messungen sollen im Abstand von 50ms druchgeführt werden. Es sind zwei verschiedene Messungen, die immer abwechselnd durchgeführt werden sollen.
Also: Messung 1 -> 50ms Pause -> Messung 2 -> 50ms Pause -> Messung 1 -> ...

Der Ansatz bisher: einen Timer (bei mir timer32_0) mit 1ms Schrittweite und match (MAT0) bei 50ms starten.
In dem generierten Interrupt (TIMER32_0_IRQHandler) werden dann die Messungen abgearbeitet.

Dieser Timer Interrupt scheint jedoch die Programmierung über die ETS zu stören.
Mit eingeschaltetem Timer bricht die Programmierroutine der ETS bei dem Neustart des Gerätes ab.
Sobald ich den Timer auslasse, bzw. den Interrupt nicht aktiv setze, lässt sich das Gerät problemlos mit der ETS bedaten.


Ein weiterer Ansatz war:
Den Timer nach jedem Messzyklus (Messung 1 und Messung 2) stoppen und in der loop() Funktion wieder zu starten.
Also: Timer start im loop() -> 50ms Pause -> Messung 1 -> 50ms Pause -> Messung 2 -> Timer stop

Dieses hat meiner Meinung nach den Vorteil, dass wenn die loop() Funktion aufgrund anstehender Programmierung nicht mehr ausgeführt wird, auch der Timer nach spätestens 100ms keine Interrupts mehr generiert.
Leider funktioniert dieser Ansatz genauso wenig wie die erste Variante mit durchlaufendem Timer.


Ich habe bisher wirklich keine Idee zu diesem Thema, zumal ich die Befehle aus der sblib zur Timersteuerung verwende. (aus example-int-blink)

Habt ihr eine Idee?

Vielen Dank!

Grüße,
Olli


Nach oben
Offline Profil  
 
 Betreff des Beitrags: Re: Timer Interrupt stört Programmierung über ETS
BeitragVerfasst: 13. Sep 2016 07:12 

Registriert: 05.2013
Beiträge: 586
Geschlecht: nicht angegeben
Hört sich nach Echtzeitprogrammierung an. Den Timer nur in der Applikation-Run-loop auszuführen, ist schon mal ein Ansatz, nur gibt es auch ausserhalb der Programmierangelegenheit Telegramme, die verstanden und abgearbeitet werden müssen. Generell ist es ein Problem wenn man 2 Dinge sehr zeitnah machen muß. Bus versus Messung. In einen solchen Fall hilft entweder sehr viel Rechenleistung oder ein Teil muß ausgelagert werden. Wichtig ist klar auch dass der BUS interrupt die höhere Priorität hat.

_________________
liebe Grüße
Andreas


Nach oben
Offline Profil  
 
 Betreff des Beitrags: Re: Timer Interrupt stört Programmierung über ETS
BeitragVerfasst: 14. Sep 2016 21:15 

Registriert: 08.2014
Beiträge: 34
Wohnort: Moormerland / Ostfriesland
Geschlecht: männlich
Hallo oldcoolman,

danke für den Hinweis mit der Priorität der Interrupts.
Daran hatte ich noch gar nicht gedacht.

Ich habe nun mittels NVIC_SetPriority(TIMER_32_0_IRQn, 1) meinem Interrupt eine niedrigere Priorität (Level 1) gegeben als alle standardmäßig initialisierten Interrupts, die den Level 0 (=höchste Priorität) bekommen.

Nun funktioniert die Programmierung über ETS problemlos.

Grüße,
Olli


Nach oben
Offline Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
cron
Powered by phpBB® Forum Software © phpBB Group | Theme created StylerBB.net
phpBB3 Forum von phpBB8.de
» Kontakt & Rechtliches Support / Hilfe Forum Gooof Webdesign Kostenloses Forum Dein Forumo Forum web tracker