Forum: Mikrocontroller und Digitale Elektronik ISP-Programmer - Vereinfachung


von Ralf (Gast)


Lesenswert?

Hi,

ich hab mir einen kleinen ISP-Programmer gebastelt, der in der Lage
ist, verschiedene Controller über die SPI-Schnittstelle zu
programmieren.

Die Software des Programmers verwendet aktuell für jeden Controller
separat einzelne Unterprogramme für das Lesen, Schreiben usw.,
da die Controller jeweils Unterschiede im "Protokoll" aufweisen.
(Als Beispiel: Der AT89S52 wird über SPI anders programmiert als der
AT89S53)

Aktuell habe ich drei Controller implementiert, und es funktioniert
auch.

Aber mir sind dabei jetzt zwei Sachen aufgefallen, die ich nicht gut
finde:

1. Der Controller des Programmers hat nun schon 5kB von 8kB belegt, das
heisst, ich kann nicht mehr viele weitere Controller implementieren.

2. Das Hinzufügen weiterer Controller gestaltet sich aufwendig, da ich
wie bereits erwähnt für jeden Controller-Typ eigene Funktionen habe.

Natürlich habe ich mir auch Gedanken um eine Lösung des Problems
gemacht:

Anstatt für jeden Controller eigene Funktionen zu schreiben, die sich
nur in kleinen Details unterscheiden, wäre es denke ich geschickter,
wenn ich dem Controller eine Art Protokoll-Beschreibung mitteilen
könnte.
Aus meiner Sicht hat dies mehrere Vorteile:

1. Der Code wird (aus meiner aktuellen Sicht) kleiner --> in der Praxis
später hoffentlich auch!
2. Neue Controller können einfacher implementiert werden

So, jetzt hapert es mir aber am Lösungsansatz, wie ich es denn
realisieren könnte.

Hat mir da jemand ne kleine Grundhilfestellung?

Ralf

von Hobbylöt (Gast)


Lesenswert?


von Klaus Leidinger (Gast)


Lesenswert?

Hallo,

um die erwertungen etwas zu dämpfen, Ralf schreibt anscheinend einen
Programmer für 89xxx Controller. Der avr910 programmer von meiner Seite
ist für AVRs gedacht, (und auch in avr assembler programmiert) kann
allerdings auch 2 89xx Typen.

Ralf,
der Ansatz ist schon richtig, und so auch in meiner Software
implementiert.

Z.B. Unterscheidung der Controller nach ID und verzweigen je nach ID in
die richtige Routine.

Oder ein Bitcode: jedes Bit in einem Byte ist einer Funktion zugeordnet
(Flag). Du bestimmst welcher Controller welche Funktionen hat und
verzweigst je nach gesetzten Flags.

HTH,
Klaus

von Ralf (Gast)


Lesenswert?

Hi Klaus,

das wäre im Prinzip genau das, was ich bereits habe.
Mir geht es nun eher darum, ob es nicht eine einfachere Möglichkeit
gibt, als für jeden Controller eigene Funktionen zu schreiben.

Mir schwirrt eben die Idee im Kopf, dem Programmer über einen relativ
einfach aufgebauten Datensatz mitzuteilen, wie er z.B. ein empfangenes
Hex-File auf den zu programmierenden Controller umsetzen muss.
Das geht wahrscheinlich schon in die Richtung Interpreter.

Und es stellt sich natürlich die Frage, ob diese Lösung dann auch
effektiver ist, was die Wartbarkeit und die Programmgröße angeht.

Ralf

von Klaus L. (kllei)


Lesenswert?

Ralf,

na das hatte ich ja mit den Flags gemeint, nicht für jeden Controller
eine eigene Routine, sondern nur für die Unterschiede eine eigene. Mit
den Flags bestimmst Du dann für jeden Controller welche der Routinen
benutzt werden.

Natürlich bringt das nur was, wenn die Routinen überwiegend gleich
sind, und es nur ein paar Ausnahmen gibt. Alle gleichen Routinen kannst
Du auch als Unterprogramme ausführen.

Das warten der Routinen wird einfacher, da z.B. ein Bugfix in einer
Routine nicht in jedem Programmteil einzeln gemacht werden muss.

Zu lesen und nach einiger Zeit zu verstehen ist das allerdings
schwieriger ;-) also gut dokumentieren!

Ciao,
Klaus

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.