Verständnisfrage zu Processen

  • 1
  • 2
  • 3
  • 4
  • 5
  • Page 3 of 5
Harry
Moderator
Avatar
Gender:
Location: zwischen Augsburg und Ulm
Age: 59
Posts: 2134
Registered: 03 / 2003
Subject:

Re: Verständnisfrage zu Processen

 · 
Posted: 24.10.2018 - 21:03  ·  #17
Hi Gunter,

ist es überhaupt relevant, ob Interrupts oder der Scheduler noch laufen? Wenn der Task gelockt ist (und das auch funktioniert) und der am Ende in den Endlos-Loop läuft, ist doch alles gut.

Harry
Gunter
Administrator
Avatar
Gender:
Location: Frankfurt Main / Germany
Posts: 1697
Registered: 02 / 2003
Subject:

Re: Verständnisfrage zu Processen

 · 
Posted: 24.10.2018 - 21:04  ·  #18
ein Task KANN nicht gelockt werden !!!

mach folgendes:

DisableInts;
WatchdogStop //falls notwendig
"Disable BOD" //falls notwendig, muss man wohl selber Bits setzen
...
... Do the Job
...
Loop
Endloop

dann geht nur noch ein Reset oder
- wenn du auch den Reset Vector noch auf die Loop verbiegst -
nur noch der Power Switch
Gunter
Administrator
Avatar
Gender:
Location: Frankfurt Main / Germany
Posts: 1697
Registered: 02 / 2003
Subject:

Re: Verständnisfrage zu Processen

 · 
Posted: 25.10.2018 - 13:38  ·  #19
Quote by Harry
ist es überhaupt relevant, ob Interrupts oder der Scheduler noch laufen?
Wenn ... gelockt ... ist

Hallo Harry,

noch zur Erklärung:
ein "Lock" ändert nur die Stati in der Run Queue vom Scheduler.
z.B setzt ein "Lock(self)" innerhalb von Prozess_2 den Status von
Prozess_2 in der RunQueue auf "locked", die Stati von allen anderen
Prozessen auf "Wait4Unlock". Damit erhält in Zukunft nur noch Prozess_2
"seine" Rechenzeit (lt. seiner Priorität) + die unverbrauchte Zeit von allen
Tasks.

Somit ist "Lock" auch nur bei laufendem Scheduler sinnvoll.

Einen Task zu "locken" macht keinen Sinn, da dieser nach einem Tick
ohnehin abgebrochen wird. Sein Status geht dabei verloren, da er ja
wieder von Beginn an gestartet und nicht fortgesetzt wird.
Folglich hat auch jeder Prozess seinen Stack und Frame, alle Tasks
aber nur einen gemeinsamen Speicherbereich für deren Stack/Frame.

Der einzige Weg zu verhindern, dass ein Task nach 1 Tick abgeschossen
wird, ist das Multitasking ausser Kraft zu setzen.

Gruß, Gunter
Harry
Moderator
Avatar
Gender:
Location: zwischen Augsburg und Ulm
Age: 59
Posts: 2134
Registered: 03 / 2003
Subject:

Re: Verständnisfrage zu Processen

 · 
Posted: 25.10.2018 - 16:14  ·  #20
Hallo Gunter,

wäre es dann evtl. sinnvoller die Procedure OnSysTick zu verwenden?

..... wobei, wenn ich das richtig verstanden habe, bei jedem Tick ein AD-Wandler gelesen wird, also bei 7 aktiven ADs ich nur alle 7 SysTicks einen neuen Wert habe.

Gruss
Harry
Gunter
Administrator
Avatar
Gender:
Location: Frankfurt Main / Germany
Posts: 1697
Registered: 02 / 2003
Subject:

Re: Verständnisfrage zu Processen

 · 
Posted: 25.10.2018 - 16:36  ·  #21
Hi Harry,

der CallBack OnSysTick ersetzt die normalen Systick-Funktionen doch nicht.
Damit kannst du zusätzlich eigene Statements ausführen.
Oder was willst du da machen?
Ich würde möglichst die Finger von dieser Funktion lassen.
Damit machst du dir schnell das System dicht.
Ein paar ASM Statements mögen darin ja OK sein - aber mehr auch nicht.

Ja. Pro Systick wird ein ADC Kanal gelesen.
Da ist mit der Zusammenhang nicht klar.
Was stört dich denn an DisableInts wenn das System an dieser Stelle
nur noch in eine Endlos-Schleife gehen soll ?

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

Re: Verständnisfrage zu Processen

 · 
Posted: 25.10.2018 - 19:48  ·  #22
Hallo Gunter,

das Programm soll möglicht schnell erkennen, wenn die Spannung abgeschaltet wird. Ich weiß, was jetzt von dir kommt: Interrupt. Die Schaltung ist fertig und es gibt einen AD der die Betriebsspannung mißt. Weitere 6 ADs sind für Temperaturmessungen und einen Touch in Verwendung. Irgendeine Idee?

Wenn die Betriebsspannung abgeschaltet wurde, puffern Goldcaps die Spannung für ca. 50-300ms (je nachdem, wie lange das vorher in Betrieb war).

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

Re: Verständnisfrage zu Processen

 · 
Posted: 25.10.2018 - 21:21  ·  #23
Interessanter Thread.

Quote

wäre es dann evtl. sinnvoller die Procedure OnSysTick zu verwenden?


Nein, Das FAT ist nicht reentrant.
Der Zugriff auf das FAT System muss thread-safe erfolgen. Im einfachsten Fall macht nur ein einziger Thread Zugriffe. Mit DeviceLock sind auch mehrere Threads möglich. Ich will jetzt nicht ausschließen, dass Tasks oder Interrupt Callbacks, wie onSystick, nicht auch auf das FAT zugreifen könnten. Aber die dürfen dass dann nur, wenn ganz sicher ist, dass kein anderer Thread zur gleichen Zeit das FAT benutzt. Führt nicht zum Ziel.

1.) Man muss den ADC Treiber von AVRco nicht benutzen, sonder könnte einen interrupt getriebenen programmieren, um eine höhere Aktuallisierungsrate zu erreichen.

2.) Jetzt weiß ich auch nicht genau weiter. Im ADC Interrupt die Erkennung einer Unterspannung einbauen und im Falle einer Unterspannung dem Scheduler mitteilen, dass ab sofort nur noch der SD-Karten Thread laufen soll. Ich weiß nicht, ob das möglich ist.

Wie gesagt, interessanter Thread. Wollte auch eigentlich nur auf das Problem mit dem FAT aufmerksam machen.

Quote

puffern Goldcaps die Spannung für ca. 50-300ms

Wieso soviel Varianz?

Warum nicht immer nach jedem Schreibvorgang FileClose?

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

Re: Verständnisfrage zu Processen

 · 
Posted: 25.10.2018 - 21:41  ·  #24
Hallo Thomas,

die Varianz der Pufferzeit ergibt sich dadurch, daß die Kondensatoren nur über einen Widerstand geladen werden. Wird dieser Widerstand zu klein, und die Ladezeit kürzer, startet der uC nicht mehr, da der Schaltregler einbricht. Um sicher mit meinem Prog die Abschaltung zu erkennen und herunter fahren zu können, muß mindestens 10 Minuten geladen werden. Ja danach weiß man immer alles besser und hätte z.B. mit einer höheren Spannung vor dem Schaltregler laden, die Kondensatorspannung messen und die Ladung abschalten können. Aber irgendwie bekomm ich das hin :)

Warum die Datei nicht jedesmal schliessen? Naja was passiert, wenn die Spannung während des Schreibvorganges abgeschaltet wird? Evtl. reicht der Kondensator aus um den Schreibvorgang immer abschliessen zu können, aber danach darf keiner mehr gestartet werden. Ich schreibe ca. 180 Bytes zykisch jede Sekunde (also immer einen kompletten Datensatz auf einmal).

Ich habe auch schon beobachtet, daß das perfekt funktioniert, das Display bringt noch die "Power off"-Meldung, aber dann startet der uC komplett neu (immer noch mit der Kondensatorladung). BOD hab ich auf 2.9V ..... evtl. sollte ich den aml auf niedrigste Spannung stellen, damit der uC so lange wie möglich in der Loop bleibt.

Gruss
Harry
  • 1
  • 2
  • 3
  • 4
  • 5
  • Page 3 of 5
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.056673s · Memory Usage: 2 MB · GZIP: on · Viewport: SMXL-HiDPI