www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Zwei Programme auf einem uC ablaufen lassen


Autor: Maxim (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Es geht um ein Schulprojekt, genauer um eine Schrittmotorsteuerung.

Da an dem Projekt zwei Leute arbeiten, habe ich es aufgeteilt in die 
Benutzerschnittstelle (Display, Drehimpulsgeber, Menüs, ...) und die 
Steuerprogramme, welche einen anderen IC ansteuern (der wiederum den 
Motor steuert).

Nun haben wir also praktisch zwei getrennte Programme und können 
parallel daran arbeiten. Erst am Ende werden beide Programme zu einem 
zusammengefügt. Damit das auch funktioniert, wurden einige Register 
festgelegt, welche wichtige Werte enthalten. Also z.B. die 
Motorgeschwindigkeit, Richtung, An/Aus u.s.w. ...

Das alles wird in den sogenannten "Status Registern" gespeichert und 
bildet die gemeinsame Schnittstelle zwischen beiden Programmen.

Mein Programm (die eigentliche Steuerung) greift auf die "Status 
Register" nur lesend zu und handelt entsprechend den darin enthaltenen 
Werten.

Das andere Programm (Benutzerschnittstelle) fragt dagegen immer die 
Taster und den Drehimpulsgeber ab und verarbeitet diese Daten, sodass 
die vom Benutzer gewünschten Einstellungen in die "Status Register" 
geschrieben werden.

Eine Grafik im Anhang soll das etwas verständlicher gestalten.

Der uC ist ein 89S8252 @ 12Mhz

Ist das möglich?

Autor: Karl-j. B. (_matrixman_)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zwei Programme gleichzeitig sind auf einer CPU (außer Dualcore) nie 
möglich! Du musst deine Programme immer nacheinander aufrufen.

Du könntest beide Programme in eine Hauptschleife einbinden welches die 
einzelnen Programme immer nacheinander aufruft.

mfg Karl

Autor: Maxim (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ja, ich meine quasi-gleichzeitig. Natürlich sollen die Programme 
nacheinander verarbeitet werden ...

Habe die Grafik überarbeitet, die erste war Mist.

Autor: Power (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Na, wenn beide Programme (Bedienung und Visualisierung ist ein Teil und 
Steuerung der Komponenten der Zweite wenn ich richtig verstanden habe) 
zu einem vereint werden hast du ja wieder ein Programm.
Ich mache das ähnlich, ich teste auch einzelne Programmteile und füge 
sie nachher zusammen, wieso sollte das nicht funktionieren?
Man muss nur gemeinsame Schnittstellen festlegen (wie du's ja gemacht 
hast), bei Hardwarezugriff auf Überschneidungen achten (immer nur eine 
Komponente bedient einen Hardwareteil) und unterschiedliche Variablen 
benutzen, dann kann nicht viel schiefgehen.

Autor: JojoS (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
oder ein schlankes µC Betriebssystem verwenden, sowas wie FreeRTOS. Was 
es da für die i51 Architektur gibt weiss ich allerdings nicht.
Ein RTOS hat den Nachteil das erstmal mehr Einarbeitungsaufwand nötig 
ist und das OS zusätzliche Resourcen für sich braucht. Vorteil ist dann 
aber eine leichtere Erweiterbarkeit wenn weitere Tasks dazukommen.

Autor: Bernd Rüter (Firma: Promaxx.net) (bigwumpus)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Maxim wrote:

> Habe die Grafik überarbeitet, die erste war Mist.

Die zweite ist nicht viel besser. (Programm kommt NIE aus der 
Steuerschleife raus)
Aber vielleicht bringt Dir eine richtige Zeichnung auch die Lösung des 
Problems näher ?

Entweder Du nimmst EIN Hauptprogramm (hier: die Benutzerschnittstelle) 
und läßt das Steuerprogramm interruptgesteuert immer wieder aufrufen 
(keine Zeitschleifen möglich!),
oder Du läßt beide Teile immer wieder hintereinander ablaufen,

oder Du denkst über ein Timesharing-System nach und startest je nach 
Bedarf die beiden Programme oder besser noch - einzelne Tasks.
Dann darf es wieder keine Pausen oder Zeitschleifen geben, sondern es 
gibt dann Tabellen mit Zeitpunkten, wann welche Routinen aufgerufen 
werden sollen....

Autor: Matthias S. (da_user)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also in einer anderen Welt (SPS) haben wir mal 5 "Einzel-Programme" auf 
einer SPS laufen lassen. Lief ungefähr genauso ab, wie in deinem. 
Mehrere Teams (5 Stück á 2 Personen) haben zusammen an ner Anlage mit 5 
Stationen verbunden mit einem Band gebastelt. Jedes Team hatte eine 
Station.

Mit der entsprechenden Kommunikation über die Schnittstellen, wer welche 
Speicherplätze/Timer/... benutzen darf alles kein Problem.

Wir haben dann ein Hauptprogramm geschrieben, welches die Steuerung des 
Bandes und der einzelnen Stationen übernahm.

Wie gesagt: Kommunikation und Planung ist alles!

Autor: Maxim (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Cool, danke euch!

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

wie bereits erwähnt, sollte das eine klassische Aufgabe für eine 
Aufteilung in Hauptprogramm (Main-Schleife o.ä.) und eine 
Interruptroutine sein (Timer-Interrupt, da bestimmt eine genaue Zeit 
einzuhalten ist).

Globale Variablen regeln dann den Zugriff (volatile bei C nicht 
vergessen, und dafür sorgen, dass immer nur einer auf die Daten 
zugreift).

der Gast.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn man die Programme so schreibt, daß sie bei Nichtstun sofort zur 
Mainloop zurückkehren, dann ist das kein Problem.
Dann kann man sie einfach beide in die Mainloop packen.

Nichtstun ist auch auf Zeitablauf warten.
Dazu muß ein Timerinterrupt einen Zeittakt bereitstellen, mit dem dann 
das Delay pro Aufruf vom Main runtergezählt wird.


Peter

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.