Lassen sich 2 komplette C Programme (WinAVR) in einen AVR packen ? Hintergrund: Zum Testen von LCD Modulen über USB verwende ich einen AVR, der die Low Level Routinen für das LCD übernimmt. Für die verschiedenen LCD Typen habe ich jeweise eine eigene Software. Diese jetzt umzuschreiben, dass beide in einem C Programm stecken, wäre ein ziemlicher Aufwand. Zwei uC sind auch nicht das beste. Daher wäre ein Schalter das beste, mit dem man eines der beiden Programme auswählen kann, das dann gestartet wird.
Nun, du kannst doch direkt am Anfang von main() abfragen, ob der Schalter gesetzt ist, und danach dann entsprechend zwei verschiedene Funktionen aufrufen, die jeweils für sich praktisch ein eigenes main() darstellen (aber natürlich anders heißen).
Ich glaube, er möchte die beiden Programme parallel laufen laasen und kreuzweise aufrufen.
Ich möchte nur eines von beiden laufen lassen, aber: Beide Programme sind nahezu gleich (vom Aufbau und der Variablennutzung her), d.h. die Funktionen und Variablen haben alle die gleichen Bezeichnung. Die zu ändern wäre zwar die einfachste (und sauberste) Lösung, ist aber ein großer Aufwand.
> Beide Programme sind nahezu gleich (vom Aufbau und der > Variablennutzung her), d.h. die Funktionen und Variablen haben > alle die gleichen Bezeichnung. Die zu ändern wäre zwar die > einfachste (und sauberste) Lösung, ist aber ein großer Aufwand. Wenn das Programm in C++ geschrieben wäre, könntest du die Sachen einfach in verschiedene Namespaces stecken. Du kannst ja mal probieren, ob sich dein Programm mit wenig Änderungen auch mit dem C++-Compiler übersetzen läßt.
"d.h. die Funktionen und Variablen haben alle die gleichen Bezeichnung." Kein Problem, deklariere alle Unterfunktionen und globale Variablen in den einzelnen LCD-Objekten als static. Nur die Hauptfunktionen, die Du aufrufen willst, müssen verschiedene Namen haben. Peter
> Beide Programme sind nahezu gleich [...]
Na dann dürfte es doch kein Problem sein, eben nur ein Programm zu
benutzen, welches du an den wenigen Stellen änderst bzw. erweiterst.
Ich habe das Problem jetzt gelöst, zwar etwas unkonventionell aber schnell und einfach: 2 AVRs parallel in der Schaltung, die sich über Reset abschalten lassen. Da der AVR dann alle Pins auf Hochohmig schaltet läuft es so wunderbar.
Sollte sich in C++ recht Platzsparend implementieren lassen: Basisklasse implementiert allen gemeinsamen Code. Pro LCD eine Subklasse, die nur den unterschiedlichen Code implementiert. Im Hauptprogramm einen (oder mehrere) Portpin(s) abfragen und nur das gewünschte Objekt instantiieren. Vorteil: Der gemeinsame Code belegt nur einmal Platz im Speicher und Du brauchst nur einen AVR (statt pro LCD einen) Nachteil: Die üblichen Einschränkungen für C++ auf AVR, die Dich aber wahrscheinlich nicht treffen. Ist vielleicht einen Versuch wert, wenn Du den nächsten LCD-Typ hinzu bekommst.
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.