Schrift
[thread]12302[/thread]

Projektidee: Perl->Assembler->Mikrocontroller

Leser: 1


<< >> 9 Einträge, 1 Seite
Ronnie
 2008-08-06 01:35
#113134 #113134
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
Vor einer halben Ewigkeit, als ich in der Ausbildung war, hatten wir primitive speicher-programmierte Steuerungen (SPS) auf Basis eines Mikroprozessor-basierten System (AFAIR: 8085). Programmiert wurde sowas über Anweisungslisten (AWL):
Code: (dl )
1
2
3
U E 01
U E 02
= A 01

Sinngemäß: Wenn am Eingang 1 UND am Eingang 2 ein High-Signal liegt, schalte den Ausgang 1 auch auf High.

Im Moment quält mich die Idee, sowas in Perl umzusetzen. Obiges Beispiel ist trivial, aber es sind rekursive Bezüge über Merker möglich, um z.B. SR-Flipflops zu realisieren usw.

Meine Idee hat zwei Ebenen, eine in Perl, wo ich die AWL gerne parsen würde und das Schaltverhalten emulieren, sowei eine weitere Ebene wo ich das Ganze gerne in Assembler für einen ATmega8-Mikrocontroller umwandeln möchte, sodass man es relativ bequem in Hardware "verwandeln" kann.

Das Ganze ist aktuell nicht mehr wie eine Idee, aber ich wollte mal hören was ihr davon haltet?!

Gruß,
Ronnie
Gast Gast
 2008-08-06 02:52
#113137 #113137
Hallo Ronnie

ein Freund von mir hat letztens einen Assembler in Perl realisiert um nen exotischen Microprozessor programmieren zu können und ist auch den Weg gegangen extra einen Parser zu schreiben.

Find es aber viel einfacher, wenn man dafür direkt Perl Subroutinen nimmt:

Code: (dl )
1
2
3
U E 01
U E 02
= A 01


könnte man auch
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
U   E, 01;
U   E, 02;
EQ  A, 01;

{package SPS;
 sub U {...}
 sub EQ {...}
 sub E {...}
}


mit nem Globalen Flag entscheidest du dann ob die Subroutinen den Code dann ausführen oder Opcodes erstellen.

Und als netter Seiteneffekt kannst du so Perl als Macrosprache nutzen : )

Grüße
Rolf
LanX-
 2008-08-06 04:28
#113138 #113138
User since
2008-07-15
1000 Artikel
BenutzerIn

user image
allerdings muss ich nachtragen, dass ich nicht wirklich viel von SPS verstehe, insbesondere bereitet es mir Schwierigkeiten mit vorzustellen wie man simultanes Schaltungsverhalten mit einem sequentiellen Programm simulieren könnte...

das Programm stellt doch letztendlich eine sehr große Statemachine dar, deren Zustände über Eingangs und Ausgangssignalen definiert werden.

Ein Brute-Force-Ansatz wäre ein großes Array oder Hash zu bauen, dass die Zustandübergänge abbildet.


Hmm ... im Inf-Nebenfach-Grundstudium haben wir Schaltungslogik als Polynome darstellen müssen und die Aufgabe gehabt diese in eine minimale Darstellung überzuführen. Wortproblem oder so...

Habe das Gefühl die Problematik ist verwandt ...



Du kannst doch Schaltungen bauen die durch Rückbezüge zu unvorhersehbaren Zuständen führen, oder? Wie will man diese simulieren?


Naja nur ein paar Gedanken, das Thema ist mir vielleicht zu hoch ...
lichtkind
 2008-08-06 13:44
#113147 #113147
User since
2004-03-22
5697 Artikel
ModeratorIn + EditorIn
[Homepage]
user image
natürlich ist es sinnvol eine logikebene in einer hochsprache zu schreiben, in der es einfacher zu machen ist und für die low level anbindung über XS in C(reicht doch oder?) oder ASM zu schreiben.
Wiki:Tutorien in der Wiki, mein zeug:
kephra, baumhaus, garten, gezwitscher

Es beginnt immer mit einer Entscheidung.
Ronnie
 2008-08-06 16:33
#113157 #113157
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
Hallo Rolf,

man kann natürlich keine wirkliche Gleichzeitigkeit bei einer SPS auf Mikroprozessor-Basis erreichen (außer womöglich durch rekonfigurierbare Logikbausteine [Xilinx baut so Teile]). Alles was passiert hängt von der Dauer der Bearbeitungsschleife ab. Ich bin gerade am überlegen welche Einschränkungen die Sache deutlich vereinfachen würden (wie z.B. zirkuläre Bezüge zu verbieten). Dennoch sollte eine Schrittfolge Steuerung sinnvoll umsetzbar bleiben. Außerdem will ich nicht allzuweit von der klassischen AWL (http://de.wikipedia.org/wiki/Anweisungsliste) abrücken. Ich denke ich probiere erst mal in 'ner ruhigen Minute einen Emulator zu schreiben.

@lichtkind: Mit XS ist da nix zu gewinnen. Die Zielplattform hat 4 MHz, 8 Bit und nur ganz wenige KByte RAM.

Gruß,
Ronnie
GwenDragon
 2008-08-06 16:37
#113158 #113158
User since
2005-01-17
14760 Artikel
Admin1
[Homepage]
user image
Ich empfehle (Sakrileg!) FORTH für sowas. Es sei denn die Stackdenkweise stört.

1985 hatte ich schon µC-Steuerungen programmiert, da gab es noch keine C-Compiler für µC, die kleinen Code erstellen konnten.
LanX-
 2008-08-12 15:32
#113391 #113391
User since
2008-07-15
1000 Artikel
BenutzerIn

user image
Hallo Ronnie

bin gestern aus em Urlaub zurück ... und du hast recht ich habe SPS mit FPGA's verwechselt. Die genaue Funktionsweise ist mir aber immernoch etwas fremd, ET war nie so mein Fall.

Was die Realisierungs des Parsers anbelangt, würde mein Ansatz es quais als Perldialekt umzusetzen IMHO auf lange Sicht viele Vorteile bringen, weil du viele Perlstrukturen für Umme geliefert bekämmst.

Z.B. Perldebugger oder Modularisierung. Für ein Profiassemblerpacket müsstest du sowas aufwendig nachrealisieren ...

Syntaktische Gleichheit (z.B. keine semikolons, '=' zu EQ) könntest du Anfangs mit einem simplen Codefilter erreichen. Da AWL-Code großgeschrieben ist gäbs keine Konflikte mit Perl.

IMHO ne Quick and Dirty Lösung die du sukzessive sehr schnell und sehr mächtig machen könntest.

Also je nachdem was du langfristig erreichen möchtest.

BTW: Wie schauts, Darmstadt PM nächsten Donnerstag?
LanX-
 2008-08-12 15:46
#113393 #113393
User since
2008-07-15
1000 Artikel
BenutzerIn

user image
OK, nach einem Blick auf einen längeren AWL Code http://www.techniker-forum.de/automatisierung-51/f... denke ich dass du um einen richtigen Parser doch nicht herum kommst, hatte eher Assembler ala 68000 oder 6502 im Sinn. : )

EDIT: vielleicht hilft dir ja sowas konzeptionell weiter
http://search.cpan.org/~bricas/Games-NES-Emulator-...
http://search.cpan.org/~dcantrell/CPU-Emulator-Z80...
http://search.cpan.org/~pscust/CPU-Z80-Assembler-2...
Ronnie
 2008-08-30 18:16
#114133 #114133
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
So, die Brocken sind jetzt gekommen. Den InSystemProgramming-Adapter muss ich nächste Woche noch zusammen löten. Dann wird es in kleinen Schritten vorwärts gehen!
<< >> 9 Einträge, 1 Seite



View all threads created 2008-08-06 01:35.