Forum: Mikrocontroller und Digitale Elektronik Shell für Mikrocontroller programmieren?


von Gast (Gast)


Lesenswert?

Hallo,
ich will folgendes programmieren:
Auf meinem Mikrocontrollersystem will ich eine Art Shell bauen. Also so 
ähnlich wie die Konsole unter Windows oder Linux. Der Controller ist 
über RS232 mit einem PC gekoppelt, auf dem ein Terminal läuft. Dort gibt 
man Befehle ein, und die führt der Mikrocontroller dann aus.
Das ansich wäre ja noch nicht so schwierig.
Komplizierter wird es, wenn das ganze möglichst flexibel bzw. modular 
sein soll. Also ich möchte möglichst einfach neue 'Befehle' 
implementieren können, am besten wärs wenn das auch dynamisch (also zur 
Laufzeit!) möglich wäre.
Mal ganz grundsätzlich: Wie könnte man sowas anpacken?
Ziel und Zweck der Sache ist eigentlich, dass man Grundlegende Dinge in 
so einer Shell verpacken könnte. z.B. Programm runterladen, bestimmte 
Speicherbereiche ändern und so weiter. Halt so debugging-Sachen. Und je 
nach Anwendung könnte man dann noch weitere Befehle implementieren.
Habt ihr schon mal sowas gemacht?

Extrem nützlich wäre es auch, wenn man verschiedene 'Pakete' 
programmieren könnte. Also jeweils kleine, unabhängige Programme, die 
man nach belieben zusammensetzen könnte. Ziel davon wäre es, dass man 
sich die Software für verschiedene Mikrocontroller schön modular 
zusammenbauen könnte.
So als Beispiel: Man hat ein Paket für CAN, eines für USB und eines für 
Ethernet. Auf einem kleinen 44pin-ARM, wo z.B. nur der CAN-Controller 
verwendet wird, lädt man nur das CAN-Paket runter. Auf einem anderen 
will man dafür USB und Ethernet verwenden, deshalb installiert man da 
noch die beiden anderen Pakete. Der Zweck davon wäre, dass man nicht 
immer wieder extra was neues schreiben muss, sondern nur noch fertige 
'Bauklötzchen' zusammenschustern muss.
Hat dazu jemand ne Idee, wie das gehen kann?

von Der G. (g0nz00)


Lesenswert?

So genau kenne ich mich damit nicht aus aber es gibt doch das µC linux 
ist das nicht sowas?

Habe mal einen ATTiny inner Platine für ein CNC Fräse gesehen die konnte 
man über das Terminalprogramm ansprechen und Einstellungen ( 
Konfigurieren )und nebenbei hat der µC noch 1 Achse der CNC Fräse 
Gesteuert.

bei: http://www.peters-cnc-ecke.de

Das nennt sich UHU Servocontroller.

Da gibt es dann kleine befehle zum setzen von Parametern oder zum 
anzeigen von eingestellten Parametern usw.

von Martin (Gast)


Lesenswert?

Hallo,

ich habe für meine Teleskopsteuerung so eine Shell programmiert.

Sie arbeitet mit Tabellen, die Schlüsselwörter (Befehle) mit 
Sprungadressen für die entsprechenden Routinen enthalten.
Die jeweilige Routine holt dann weitere Parameter aus dem Eingabestring 
ab. Diese können Zahlen (beginnend mit Ziffern, '0x' oder '0b') oder 
wiederum Labels sein.

Hier ist der Quelltext zu finden:

http://www.martin-cibulski.de/atm/mount_controller_4/mc_4_asm_main/index_de.htm

Die Shell steht in monitor.asm.

Modular ist das Ganze auch, weil es mehrere Befehlstabellen gibt, die 
nacheinander durchsucht werden. In monitor.asm gibt es dazu die 
'mon_master_label_tab', die auf die Untertabellen verweist.


Gruß,
Martin

von Frank W. (Firma: DB1FW) (frankw) Benutzerseite


Lesenswert?

Wenn Du Dich mit UPN anfreunden kannst, dann wäre vielleicht ein FORTH 
das richtige.

Forth gibt es überall für AVR's, ARM's und alle möglichen Prozessoren.

Gruss
Frank

von Gast (Gast)


Lesenswert?

Hallo,
ja eigentlich wäre ja uC Linux gut. Aber damit kenne ich mich nun 
wirklich nicht aus, und so wie ich das einschätze, braucht das wohl auch 
ziemlich viel RAM bzw. FLASH, was nicht in jedem Fall zur Verfügung 
steht. Aber gut wäre es auf alle Fälle....

@Frank:
das mit UPN und FORTH interessiert mich.
Du meinst aber doch wohl nicht DAS UPN, das auch bei 
hp-Taschenrechnern zum Einsatz kommt oder? ;)

von Frank W. (Firma: DB1FW) (frankw) Benutzerseite


Lesenswert?

Gast wrote:
> @Frank:
> das mit UPN und FORTH interessiert mich.
> Du meinst aber doch wohl nicht DAS UPN, das auch bei
> hp-Taschenrechnern zum Einsatz kommt oder? ;)


Doch, genau das meine ich.
Wenn es Dich interessiert - schau Dir ruhig mal FORTH an.

1 1 + .    <enter>
2


Bei den meissten Forth bekommst Du ein Terminal, kannst "online" das 
Programm erweitern. Wird im Flash gespeichert. Ist halt UPN :-)

Ich kenne es zwar nur für AVR's und PC's, aber gibt es auch für ARM
Vielleicht kann ja jemand von den Kollegen hier ein's vorschlagen.

Gruss
Frank

von Fabi (Gast)


Lesenswert?

Klingt gut. Ich hab nen funktionierenden Commandline-Parser, den könnte 
man ganz leicht nach C portieren und verwenden.

von MaWin (Gast)


Lesenswert?

Das nannte man früher Monitor
damit wurde der uC fernbedienbar,
http://forums.freescale.com/t5/8-Bit-Microcontrollers/Sorce-code-and-Doc-for-BUFFALO-or-other-Monitor-for-68HC11/td-p/2121

und die MS-DOS Kommandozeile (oder CP/M oder Bourne) verfolgt genau den 
Ansatz, alles was noch nicht als eingebautes Kommando bekannt ist, als 
Extension zu suchen und aufzurufen, dort hat auf Diskette/Platte und 
nicht im Speicher, aber im Prinzip ist das nichts anderes.

Deine Idee ist also nichts Neues, sondern seit 50 Jahren gängige Praxis,
und die Leute sind zu dutzenden leicht unterschiedlichen Lösungen 
gekommen,
bei denen du nun bewerten darfst, welcher Aufwand welchen Effekt wert 
war und dann hältst du dich einfach an so eine Vorlage.

Die meisten sind inzwischen im Source verfügbar.

von Mark B. (markbrandis)


Lesenswert?

Gast schrieb:
> Extrem nützlich wäre es auch, wenn man verschiedene 'Pakete'
> programmieren könnte. Also jeweils kleine, unabhängige Programme, die
> man nach belieben zusammensetzen könnte. Ziel davon wäre es, dass man
> sich die Software für verschiedene Mikrocontroller schön modular
> zusammenbauen könnte.

Genau das macht man doch. Wer zum Beispiel einen CAN-Treiber braucht, 
der linkt ihn in seinem Programm mit - den schreibt man ja in der Regel 
nicht selbst.

> So als Beispiel: Man hat ein Paket für CAN, eines für USB und eines für
> Ethernet. Auf einem kleinen 44pin-ARM, wo z.B. nur der CAN-Controller
> verwendet wird, lädt man nur das CAN-Paket runter. Auf einem anderen
> will man dafür USB und Ethernet verwenden, deshalb installiert man da
> noch die beiden anderen Pakete. Der Zweck davon wäre, dass man nicht
> immer wieder extra was neues schreiben muss, sondern nur noch fertige
> 'Bauklötzchen' zusammenschustern muss.

Und wie genau soll das zur Laufzeit gehen? Das CAN-Paket soll ja 
vermutlich im Flash-Speicher landen. Oder nicht?

Ansonsten, um Treiber (eben für CAN oder für anderes) dynamisch zu laden 
oder aus dem (Haupt-)Speicher wieder zu entfernen, braucht es eben ein 
Betriebssystem.

Irgendwie sehe ich noch nicht so richtig, was Du machen willst, was aber 
mit modularer Programmierung in C und Linken der entsprechenden 
Bibliotheken die man braucht und Weglassen derer, die man halt nicht 
braucht, nicht gehen soll... dass man die Treiber für verschiedene 
Schnittstellen sehr oft ändert, erscheint mir jedenfalls als ein leicht 
exotischer Anwendungsfall.

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.