Wenn die Zykluszeit meines mikrocontrollers bspw. 10 ms beträgt, der Programmcode aber 20 Mikrosekunden braucht um ganz durchzulaufen, wird der programmcode alle 10ms neu gestartet auch wenn sich der programmcode ändert und größer wird? Bedeutet das auch, dass eine Funktion immer im selben zeitlichen Abstand gestartet wird? Also 10ms zykluszeit, oder ändert sich der Abstand in jedem Durchlauf?
:
Bearbeitet durch User
Toni E. schrieb: > wird der programmcode alle 10ms neu gestartet auch wenn sich der > programmcode ändert und größer wird Wenn du einen Timer für dein einfaches Zeitscheiben-Scheduling nutzt, ja. Im allgemeinen haben Mikrocontroller an sich keine Zykluszeit wie SPSen, außer man bringt es ihnen bei. mfg mf
Der μC hat keine Zykluszeit, sowas macht das spezifische Programm und das kann man so oder so oder anders machen.
Toni E. schrieb: > ... wird der programmcode alle 10ms neu gestartet ... Nein, solange du nicht irgendwelche Dinge mit Watchdog o.ä. programmierst, läuft des Programm immer durch.
Toni E. schrieb: > Wenn die Zykluszeit meines mikrocontrollers bspw. 10 ms beträgt, der > Programmcode aber 20 Mikrosekunden braucht um ganz durchzulaufen, wird > der programmcode alle 10ms neu gestartet auch wenn sich der programmcode > ändert und größer wird? Hallo, die Zykluszeit deines Controllers sind deine 20us. Während eines Programmdurchlaufes wird immer wieder geschaut was zu tun ist. Deine 10ms Aktion ist nur eine Folge davon. Die Zykluszeit wird in der Praxis immer leicht variieren je nach Programmstruktur. > Bedeutet das auch, dass eine Funktion immer im selben zeitlichen Abstand > gestartet wird? Also 10ms zykluszeit, oder ändert sich der Abstand in > jedem Durchlauf? Das hängt davon ab wie die zeitliche Abhängigkeit programmiert ist.
Toni E: >Wenn die Zykluszeit meines mikrocontrollers bspw. 10 ms beträgt, der >Programmcode aber 20 Mikrosekunden braucht um ganz durchzulaufen, wird >der programmcode alle 10ms neu gestartet auch wenn sich der programmcode >ändert und größer wird? Wenn der Programmcode unterschiedlich lange braucht, kannst Du eine Schleife mit einem Timer synchronisieren: Beitrag "Re: rollover save timer in c"
Toni E. schrieb: > Wenn die Zykluszeit meines mikrocontrollers bspw. 10 ms beträgt Ein üblicher RISC-Prozessor mit 10 MHz Taktfrequenz braucht für 1 Maschinenzyklus 100ns. Also ist diese "Zykluszeit" 100ns. Weil das um den Faktor 100000 niedriger ist als deine Angabe, kann diese Zykluszeit nicht gemeint sein. Also die Frage: was ist in deinem Satz mit "Zykluszeit" gemeint? > der Programmcode aber 20 Mikrosekunden braucht um ganz durchzulaufen Dann wäre die Zykluszeit meines Programms 20µs. Denn das Abwarten bis zum nächsten 10ms-Tic bedeutet 9,98 ms Rechenzeitvergeudung, was in einer Nutzungseffizienz von 0,2% gipfelt. Oder andersrum: 99,8% der von deinem µC aufgenommenen Energie ist vergeudet. Miserable Bilanz. > wird der programmcode alle 10ms neu gestartet auch wenn sich der > programmcode ändert und größer wird? Zeig doch einfach mal deinen Code...
:
Bearbeitet durch Moderator
Toni E. schrieb: > Wenn die Zykluszeit meines mikrocontrollers bspw. 10 ms beträgt, der > Programmcode aber 20 Mikrosekunden braucht um ganz durchzulaufen, wird > der programmcode alle 10ms neu gestartet ... Du schreibst hier einmal Milli- und das andere Mal Mikrosekunden. Ist das ein Schreibfehler? > Bedeutet das auch, dass eine Funktion immer im selben zeitlichen Abstand > gestartet wird? Also 10ms zykluszeit, oder ändert sich der Abstand in > jedem Durchlauf? Ein Mikrocontroller hat nicht so etwas wie eine Zykluszeit (bzw. bezeichnet der Begriff da was ganz anderes, siehe Lothars Post). Ein Mikrocontroller ist keine SPS. Ein Mikrocontroller arbeitet sein Programm ab. Meist ein Programm, das in einer Endlosschleife läuft. Und dann kann jeder Schleifendurchlauf mit einer Uhr synchronisiert sein. Aber das ist nicht zwingend so, sondern eher ein seltener Spezialfall. Und dann hängt es von der Implementierung ab, ob ein einmal begonnener Schleifendurchlauf nach einer festen Zeit abgebrochen wird, oder ob die Schleife einfach länger dauert. In den weitaus meisten Fällen letzteres. Wenn ein Mikrocontroller zu festen Zeitpunkten etwas ausführen soll, gibt es i.d.R. bessere Methoden dafür. Etwa einen Timer mit einer ISR[1]. Aber auch da gibt es natürlich das Problem, daß der Code in der ISR nicht länger dauern darf als bis zum nächsten Timer-Interrupt. Auch in diesem Fall wird sonst ein Interrupt "verpaßt", sprich einfach ausgelassen. [1] ISR = Interrupt Service Routine.
:
Bearbeitet durch User
Lothar M. schrieb: > was in einer Nutzungseffizienz von 0,2% gipfelt Anstelle 10MHz mit 128kHz takten = Effizienz 9x % ;-)
Toni E. schrieb: > Wenn die Zykluszeit meines mikrocontrollers bspw. 10 ms beträgt, der > Programmcode aber 20 Mikrosekunden braucht um ganz durchzulaufen, wird > der programmcode alle 10ms neu gestartet auch wenn sich der programmcode > ändert und größer wird? Bisher dachte ich, das Konzept "Zykluszeit" halbwegs verstanden zu haben. Du machst mir zweifeln. Welche Bedeutung hat für dich das Wort "Zykluszeit"?
Axel S. schrieb: > Ein Mikrocontroller hat nicht so etwas wie eine Zykluszeit (bzw. > bezeichnet der Begriff da was ganz anderes, siehe Lothars Post). Ein > Mikrocontroller ist keine SPS. Hier muss ich leider widersprechen. Egal ob µC oder SPS. Die Definition der Zykluszeit ist immer gleich. Ein Durchlauf des Programms definiert die Zykluszeit. Die kann und wird auf einem µC und auch SPS je nach Programmverzweigungen immer schwanken. Die Besonderheit einer SPS ist noch das man eine Mindest- und Maximal-Zykluszeit einstellen kann und diese überwacht werden. Bevor darüber Diskussionen aufkommen. Steht alles im Siemens Funktionshandbuch.
Nichts gegen die Siemens Handbücher, aber sind sie hier anwendbar? Und wenn, dann würde der TO doch sicher zuerst da nachschauen. Sonderlich geheim sind die ja nicht.
Hallo, es beschreibt was die Zykluszeit bei einer SPS ist. Nämlich die Zeit genau eines Programmdurchlaufes. Das ist auf einem µC genau das Gleiche. Darum ist die Begrifflichkeit für SPS und µC auch gleich. Mehr wollte ich nicht sagen.
Veit D. schrieb: > Darum ist die Begrifflichkeit für SPS und µC auch gleich. Ähnlich, mag sein.... Vom TO habe ich nichts von SPS gehört. Auf µC werden auch mal Round-Robin Verfahren eingesetzt. Dann bekommt der Begriff schon einen anderen "Geschmack".
Beitrag #7582163 wurde vom Autor gelöscht.
Hallo, du hast aber schon gesehen das ich mich ursprünglich auf Axel bezogen und ihn zitiert habe?
Toni E. schrieb: > oder ändert sich der Abstand in jedem Durchlauf? Kommt auf Dein Programm an. Wenn eine CPU verschiedene Befehle bekommt, können diese verschieden lang brauchen. Axel S. schrieb: > Wenn ein Mikrocontroller zu festen Zeitpunkten etwas ausführen soll, > gibt es i.d.R. bessere Methoden dafür. Etwa einen Timer mit einer ...
Veit D. schrieb: > Axel S. schrieb: > >> Ein Mikrocontroller hat nicht so etwas wie eine Zykluszeit (bzw. >> bezeichnet der Begriff da was ganz anderes, siehe Lothars Post). Ein >> Mikrocontroller ist keine SPS. > > Hier muss ich leider widersprechen. Egal ob µC oder SPS. Die Definition > der Zykluszeit ist immer gleich. Ein Durchlauf des Programms definiert > die Zykluszeit. Und wenn ich gar kein Hauptprogramm im herkömmlichen Sinn habe, sondern alles in ISR (Plural) erledige? Dann besteht mein "Hauptprogramm" aus Initialisierung und einer sehr kurzen Endlosschleife. Eventuell noch mit einem SLEEP darin. Sowas habe ich auch schon gemacht. Ganz allgemein stimmt das mit der Zykluszeit nicht mehr, sobald man irgendeine Art von Nebenläufigkeit hat.
Veit D. schrieb: >> Ein Mikrocontroller hat nicht so etwas wie eine Zykluszeit (bzw. >> bezeichnet der Begriff da was ganz anderes, siehe Lothars Post). Ein >> Mikrocontroller ist keine SPS. > > Hier muss ich leider widersprechen. Egal ob µC oder SPS. Die Definition > der Zykluszeit ist immer gleich. Ein Durchlauf des Programms definiert > die Zykluszeit. Die kann und wird auf einem µC und auch SPS je nach > Programmverzweigungen immer schwanken. Die Besonderheit einer SPS ist > noch das man eine Mindest- und Maximal-Zykluszeit einstellen kann und > diese überwacht werden. > > Bevor darüber Diskussionen aufkommen. Steht alles im Siemens > Funktionshandbuch. Also ich programmiere auf Controllern jetzt >15 Jahre. Diverse Modelle, diverse Einsatzgebiete. Aber so etwas wie Zykluszeit hatte ich noch nie. Es gibt dort kein Programm, welches durchläuft. Das Programm läuft immer, und kommt nie an ein Ende. So etwas ist gar nicht vorgesehen. Gewisse Dinge lauf alle 10mS, andere jede Sekunden, wiederum andere nur auf Interrupt, oder bei externem Input. Manchmal habe ich auch mehrere Threads, die parallel laufen, vollkommen asynchron. Die einzige Zykluszeit kenne ich bei meiner Freundin. Aber das ist eine andere Geschichte.
Peter schrieb: > Also ich programmiere auf Controllern jetzt >15 Jahre. Diverse Modelle, > diverse Einsatzgebiete. > Aber so etwas wie Zykluszeit hatte ich noch nie. Weil meine Programme auf µC üblicherweise Zustandsautomaten in der Mainloop sind, ist 1 Durchlauf der Mainloop ein "Zyklus". Wenn diese Zykluszeit größer als 10ms wird, dann habe ich noch Verbesserungbedarf und muss z.B. irgendwelche Berechnungen in 2 "Häppchen" unterteilen. > Gewisse Dinge lauf alle 10mS, andere jede Sekunden, wiederum andere nur > auf Interrupt, oder bei externem Input. > Manchmal habe ich auch mehrere Threads, die parallel laufen, vollkommen > asynchron. Dieses Modell geht von "unendlicher" Rechenleistung aus. Es geht von Null Jitter auf den Zeitscheiben und jederzeitiger umgehender Reaktion auf einen Interrupt aus. Da wundert sich dann so mancher, warum sein Programm manchmal "stolpert". Frag mal unsere Softies. So mancher meint, ein Quadcore könne tatsächlich "gleichzeitig" auf den einzigen Speicherbus zugreifen. Axel S. schrieb: > alles in ISR (Plural) erledige? Sowas habe ich auch schon gemacht. Ja, bei Abhängigkeiten hat mann dann aber pfeilschnell ein Semaphorenproblem an der Backe. Wenn z.B. ein Read-Modify-Write Portzugriff wie z.B. das Manipulieren eines einzelnen Bits im Port unterbrochen wird und in dieser unterbrechenden ISR am selben Port ebenfalls ein Pin beschrieben werden soll. Da hat man dann Glück, wenn es beim verwendeten µC nur 1 Interruptlevel gibt...
:
Bearbeitet durch Moderator
Lothar M. schrieb: > Axel S. schrieb: >> alles in ISR (Plural) erledige? Sowas habe ich auch schon gemacht. > Ja, bei Abhängigkeiten hat mann dann aber pfeilschnell ein > Semaphorenproblem an der Backe. Wenn z.B. ein Read-Modify-Write > Portzugriff wie z.B. das Manipulieren eines einzelnen Bits im Port > unterbrochen wird und in dieser unterbrechenden ISR am selben Port > ebenfalls ein Pin beschrieben werden soll. Ja, man muß schon wissen was man macht. Immer und überall. Sonst bleibt man auf ewig im Sandkasten sitzen. Das mag zwar gut mit der politischen Richtung zusammenstimmen die die Infantilisierung aller Lebensbereiche eifrig vorangetreibt (Stichwort: betreutes Denken), aber es ist auch die Ursache des stetigen Abrutschens Deutschlands, ja des gesamten Westens im Vergleich mit z.B. China. Ansonsten war das nur ein Beispiel, wie man ein µC-Programm ohne ständig durchlaufene Hauptschleife schreiben kann. Eine andere wäre eine blockierende Hauptschleife, weil es ohne das entsprechende Ereignis schlicht nichts zu tun gibt. Nicht jede Vorgehensweise paßt für alle Probleme. Aber zum Glück haben wir ja einen µC (und keine SPS) und wir haben die Wahl.
Axel S. schrieb: > Und wenn ich gar kein Hauptprogramm im herkömmlichen Sinn habe, sondern > alles in ISR (Plural) erledige? Dann kann man doch viel besser in der Mainloop die Flags pollen und den Code ausführen. Das geht sogar nen Tick schneller als sich ständig den Interruptoverhead (Kontext sichern, wiederherstellen) ans Bein zu binden. Und der Compiler kann viel besser optimieren (Registervariablen), da nur eine Instanz. Daher auch kein volatile/atomic Hassle notwendig. Außerdem kann kein häufiger Interrupt die langsamen verdrängen, jeder kommt mal dran. Interrupts sollte man nur für die Tasks anlegen, die andere unterbrechen müssen, d.h. einen höheren Level auch benötigen.
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.