mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ISP-Programmer - Vereinfachung


Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Hobbylöt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Klaus Leidinger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Klaus Leidinger (klausleidinger)
Datum:

Bewertung
0 lesenswert
nicht 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

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.