Interrupt - richtig so?

  • 1
  • 2
  • 3
  • 4
  • Page 2 of 4
rh
Administrator
Avatar
Gender:
Location: Germany
Age: 24
Homepage: e-lab.de
Posts: 5558
Registered: 03 / 2002
Subject:

Re: Interrupt - richtig so?

 · 
Posted: 19.03.2018 - 18:46  ·  #9
Hallo Harry,

in Deinem "inc(LongWord)" werden mehr Register benutzt als das
System standardmässig bei User-Ints rettet ACCA, ACCB, ACCCLO, ACCCHI.
Daher wird in Deiner Int Routine ACCBLO/HI überschrieben.
Bei User Ints sollte vorsichtiger weise mit PushAll oder SaveAll gearbeitet
werden wenn man nicht genau weiss welche Register benutzt werden.
Aber wie Miparo schon sagte, richtet der Merlin Opti das automatisch
für Dich.

rolf
Harry
Moderator
Avatar
Gender:
Location: zwischen Augsburg und Ulm
Age: 59
Posts: 2134
Registered: 03 / 2003
Subject:

Re: Interrupt - richtig so?

 · 
Posted: 19.03.2018 - 18:55  ·  #10
Hallo Rolf,

nur interessehalber: Wäre ein TickTime1:=TickTime1+1; von der Verarbeitung was anderes?

Harry
Thomas.AC
Benutzer
Avatar
Gender: n/a
Age: 43
Posts: 308
Registered: 07 / 2013
Subject:

Re: Interrupt - richtig so?

 · 
Posted: 19.03.2018 - 19:01  ·  #11
kleiner zusätzlicher Hinweis: lesender Zugriff auf TimeTick muss auch atomar erfolgen. Also Interrupt sperren beim Lesen. Sonst könnte alle 256 Sekunden der Wert falsch sein, wenn beim Lesen genau der Interrupt auftritt.

Oder 2 mal lesen

Code

repeat 
  tmp1 := TimeTick;
  tmp2 := TimeTick;
until tmp1 = tmp2;
miparo
Administrator
Avatar
Gender:
Location: Germany
Age: 58
Posts: 959
Registered: 09 / 2007
Subject:

Re: Interrupt - richtig so?

 · 
Posted: 19.03.2018 - 19:17  ·  #12
Hi Thomas,
TimeTick1 ist nur ein Longword was er hoch zählt wenn ich das richtig gelesen habe.


Und Inc(TimeTick1) oder TimeTick1:= TimeTick1+1 ergibt das gleiche im ASM.
Thomas.AC
Benutzer
Avatar
Gender: n/a
Age: 43
Posts: 308
Registered: 07 / 2013
Subject:

Re: Interrupt - richtig so?

 · 
Posted: 19.03.2018 - 19:21  ·  #13
Wie bei Systemtime16 ist hier auch beim Lesen ein atomarer Zugriff notwendig.
miparo
Administrator
Avatar
Gender:
Location: Germany
Age: 58
Posts: 959
Registered: 09 / 2007
Subject:

Re: Interrupt - richtig so?

 · 
Posted: 19.03.2018 - 19:50  ·  #14
und wenn dann wäre es SystemTime32

Quote

Ich möchte nur über den Interrupt an diesem Pin eine LongWord-Variable hoch zählen


ergibt:
Var
TickTimer1 : Longword;


miparo
rh
Administrator
Avatar
Gender:
Location: Germany
Age: 24
Homepage: e-lab.de
Posts: 5558
Registered: 03 / 2002
Subject:

Re: Interrupt - richtig so?

 · 
Posted: 19.03.2018 - 20:19  ·  #15
@all,

ja, wenn diese Var gelesen wird sollte dieser Interrupt nicht zuschlagen können.
Deshalb sollten die Interrupts beim Lesen dieser Var gesperrt sein mit:
Code
var
   TimeTick1 : longword, locked;


rolf
Harry
Moderator
Avatar
Gender:
Location: zwischen Augsburg und Ulm
Age: 59
Posts: 2134
Registered: 03 / 2003
Subject:

Re: Interrupt - richtig so?

 · 
Posted: 20.03.2018 - 11:52  ·  #16
Hallo Rolf,

dazu steht im Manual
Quote
Ein kontinuierliches Pollen/Lesen einer “locked” Variablen z.B. innerhalb einer Schleife kann zu Störungen beim Task/Prozess-Wechsel führen, weil Interrupts fast kontinuierlich gesperrt sind.

Kannst du in diesem Zusammenhang mal "kontinuierlich" näher definieren? Ist ein Zugriff lesend alle 200ms und durch den Interrupt verändernd alle 1000ms kontinuierlich?

Gruss
Harry
  • 1
  • 2
  • 3
  • 4
  • Page 2 of 4
Selected quotes for multi-quoting:   0

Registered users in this topic

Currently no registered users in this section

The statistic shows who was online during the last 5 minutes. Updated every 90 seconds.
MySQL Queries: 15 · Cache Hits: 14   137   151 · Page-Gen-Time: 0.032469s · Memory Usage: 2 MB · GZIP: on · Viewport: SMXL-HiDPI