Forum: Mikrocontroller und Digitale Elektronik Softwarearchitektur


von Frank R. (Gast)


Lesenswert?

Hallo,

weiß vielleicht jemand wo ich eine Idee für eine zeitbasierende
Softwarearchitektur herbekomme?
Meine Aufgabenstellung ist eine Softwareplattform für einen mobilen
Roboter zu entwickeln, in die später eine Intelligenz implementiert
werden kann, um z.B. durch ein Labyrinth zu fahren.
Vielen Dank im voraus!

Gruss

Frank

von larsen (Gast)


Lesenswert?

??? Versteh' ich nicht.

von Quark (Gast)


Lesenswert?


von Frank (Gast)


Lesenswert?

Hallo,

hab mich vielleicht ungenau ausgedrückt, ich versuchs nochmal.


Die Architektur muss ganz grob so aussehen:

Schleifenbeginn:
1. Einlesen der Sensoren

2. Programmanager, der wenn Änderungen der Sensorwerte vorliegen, die
Fahrtprogramme anspricht, z.B. bei Hindernis Kurve fahren oder halten.

3. Idlefunktion, die eine gewisse Zeit verbrät, damit jeder
Schleifendurchlauf gleichlang ist. Die Zeitbasis soll mit einem Timer,
der onboard ist realisiert werden. Zeit für einen Schleifendurchlauf:
ca. 1ms

Schleifenende:

Feste Zeitbasis ist erforderlich für die später zu implementierende
Intelligenz.

Gruss

Frank

von larsen (Gast)


Lesenswert?

Naja, da hast du doch deine Idee schon selber! Den Timer kriegst du über
einen Interrupt hin. Im Timer kannst du z.B. Flags setzen, damit du zu
bestimmten Zeiten bestimmte Sachen erledigen kannst oder damit du
weißt, wann ein Schleifendurchlauf zu Ende sein muss. Nun fehlt dir nur
noch der Code;-)

Was brauchst du denn nun noch?

von Peter Dannegger (Gast)


Lesenswert?

Das ganze nennt sich schlichtweg Mainloop, also einfach so
programmieren, wie Du es geschrieben hast.


Programmmanager kann im einfachsten Falle eine switch-Anweisung sein
oder eine Tabelle mit Funktionspointern, die per Index ausgewählt
werden.


Und die Idle-Funktion wartet, bis ein Bit (volatile) im Timerinterrupt
nach Ablauf einer bestimmten Zeit gesetzt wurde und löscht es.


Peter

von Mark S. (struberg)


Lesenswert?

Wenn du eine sequentielle Architektur verwendest hast du später
wahrscheinlich Probleme mit dem Einbau weiterer Funktionalität, wenn du
zB auf mehrere Sensoren reagieren sollst. Genau aus diesem Grund gibt es
auch Multitasking kernels. Der übernimmt für dich das timer handling,
und stellt in meinem Fall eine 250ns Zeitbasis zur Verfügung.

Beginnen wir mal ganz am Anfang: Welchen Roboter verwendest du, bzw
welchen uC setzt du ein? Danach richtet sich das ganze
Entwicklungsumfeld.

von Niels H. (monarch77)


Lesenswert?

Einen Roboter zu bauen bedeutet eben nicht nur meschanische Baugruppen
zusammenzufügen. Die Programmierung und Elektrik ist ein ganz
wesentlicher Bestandteil eines solchen Projektes. Das übersehen die
meisten diplom-Germanisten, die sich sagen "och, heute mach ich mal
was mit Robotern"

Eine fertige Software, die man nur noch bedienen muss, gibt es für
solche Projekte nicht. Die muss man sich in der Regel selber schreiben.

von Peter Dannegger (Gast)


Lesenswert?

@mark struberg

> Genau aus diesem Grund gibt es
> auch Multitasking kernels. Der übernimmt für dich das timer
handling,
> und stellt in meinem Fall eine 250ns Zeitbasis zur Verfügung.


250ns Taskwechsel, wow !!!

Kannst Du mal näher sagen, welche Hammer-CPU da werkelt ?
Ist aber bestimmt nichts für Batteriebetrieb.

Super fixe Sachen mache ich immer direkt, da ja sonst die CPU zu 99%
nur mit Register retten beschäftigt ist.

Bisher habe ich aber nur Zeiten von 5µs aufwärts benötigt, 250ns sind
ja für nen AVR doch zu heftig.

Den Scheduler nehme ich nur für langsame Sachen im ms-Bereich, da dann
der Softwareoverhead nicht so ins Gewicht fällt.


Peter

von Mark S. (struberg)


Lesenswert?

oops sorry, natürlich 250uS und nicht ns (o)(O), aber ich schrieb auch
nichts von taskwechsel, sondern von timebase ;) Der Taskwechsel
verbraucht etwa 65 instructions, also 8uS (alles bei 8MHz).
Dh bei einem sleep(1) wird der task 4000 mal pro Sekunde getriggert,
(was meist ausreicht).

von Frank (Gast)


Lesenswert?

Ich verwende einen Philips 32bit LPC2129. Der Roboter ist ein bei Conrad
bestelltes Fahrgestell zu der mein Kommiltone eine Antriebsplatine
macht.
Ich muss also zwei PWM Signale ausgeben für Motor links und Motor
rechts (Es handelt sich um ein Kettenfahrzeug) und zwei Signale für
vorwärts/rückwärts.
Die Sensoren sollen vorerst außen vorgelassen werden, da sonst die Zeit
nicht reicht.

von Mark S. (struberg)


Lesenswert?

> Ich verwende einen Philips 32bit LPC2129
Also Speicher satt, da würde ich FreeRTOS als Basis verwenden.

> Ich muss also zwei PWM Signale ausgeben
Das kann die PWM-Unit der LPC selbständig, ohne daß du softwaremäßig
einen PIN toggeln mußt.

Timer0 verwendet RTOS
Timer1 als PWM set/clear on match für linken Antrieb
PWM-Timer als PWM set/clear on match für rechten Antrieb

Im Endeffekt berechnest du in deinem main-task nur mehr die von den
PWMs zu zählenden Schritte und stellst sie in die Steuerregister der
PWM rein. Rein theoretisch kann man sogar beide Antriebsmotoren mit dem
PWM-Timer antreiben, aber da ist ein wenig Hirnschmalz notwendig.

von Frank Riever (Gast)


Lesenswert?

weiß vielleicht jemand, wo ich genauere Informationen über RTOS bekomme,
auch in Verbindung mit dem LPC2129 von Philips?

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

www.freertos.org

von A.K. (Gast)


Lesenswert?

Weitere:

http://picoos.sourceforge.net/index.html [An sich nicht übel, aber
problematische Organisation vom Sourcecode, und ein schöner Beispiel,
wie man mit reichlich Einsatz des Preprocessors jeden Code vernichtet
kriegt]

http://usmartx.sourceforge.net/

von Frank Riever (Gast)


Lesenswert?

Suche zu dem besagten LPC2129 einen kompletten instruction set. In
meinem Handbuch sind immer nur einzelne Befehle erwähnt und die nicht
vollständig. Weiß jemand wo den herbekommen kann?

von Frank Riever (Gast)


Lesenswert?

Hallo

Hab noch mal Fragen bezüglich RTOS, wieviel Tasks kann ich gleichzeitig
bearbeiten? Sind Treiber für Timer, PWM-Modul usw. vorhanden? Konnte es
auf den genannten Links nicht herauslesen.

Gruss

Frank

von A.K. (Gast)


Lesenswert?

Die komplette ARM Beschreibung gibt's m.W. nur auf recht teurem Papier,
das ARM ARM.

Die gängigen kostenlosen RTOS sind hinsichtlich I/O-Modulen sparsam.
UART ist bisweilen drin, aber mehr ist nicht zu erwarten. Ist nicht die
Aufgabe vom RTOS, und zudem hochgradig maschinenspezifisch.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Ein bisschen ARM-Beschreibung kann man sich im PDF-Format
herunterladen:
http://www.arm.com/documentation/ARMProcessor_Cores/index.html

Da dann beispielsweise das "ARM7TDMI-S (Rev 4) Technical Reference
Manual"
http://www.arm.com/pdfs/DDI0234A_7TDMIS_R4.pdf

von Mark S. (struberg)


Lesenswert?

Für freertos gibt es glaube ich auf der LPC2000 Yahoo Group Seite einige
IO module zum download.

von Frank (Gast)


Lesenswert?

Heißt das, dass ich das FreeRTOS ohne weiteres gar nicht benutzen kann?
Sind Treiber für den Timer im Internet verfügbar?

Wieviele Tasks gleichzeitig schafft das FreeRTOS?

von Frank (Gast)


Angehängte Dateien:

Lesenswert?

Der Gnu-Compiler in HiTOP5 von Hitex nimmt "__irq" als Erweiterung
einer Funktion nicht an. In uVision von Keil kann ich mein Testprogramm
compilieren. Hat jemand eine Idee wie ich den Code abändern muss, damit
es auch mit dem Gnu Compiler funktioniert?

von Frank Riever (Gast)


Lesenswert?

Habe ein Problem mit der Interrupt Service Routine. Diese soll mit einer
festen Zeitbasis von 1ms ständig aufgerufen werden. Im Simulator lief
das Ganze wunderbar, auf dem Controller wird die Routine einmal
aufgrufen und dann gar nicht mehr.
Der Interrupt wird von einem Timer ausgelöst. Mir ist aufgefallen das
der Timer nach der Init gar nicht richtig läuft. Die Register
(Prescaler, Timer Counter) nehmen rein zufällige Werte an, wie kann das
sein? Warum wird die Routine dann überhaupt einmal aufgerufen?

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
Noch kein Account? Hier anmelden.