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