2 Programme in einem AVR

Gast #239187
Lesenswert?

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.
Gast #239190
Lesenswert?

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.
Gast #239192
Lesenswert?

> 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.
#239193
Lesenswert?

"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
Gast #239195
Lesenswert?

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.
Gast #239196
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren