Forum: Compiler & IDEs 2 Programme in einem AVR


von Benedikt (Gast)


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.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

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).

von Jürgen Schuhmacher (Gast)


Lesenswert?

Ich glaube, er möchte die beiden Programme parallel laufen laasen und
kreuzweise aufrufen.

von Benedikt (Gast)


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.

von Werner A. (homebrew)


Lesenswert?

löte zwei AVRs huckepack und per Schalter wählst Du aus, welcher gerade
Strom bekommen soll...

von Rolf Magnus (Gast)


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.

von Peter D. (peda)


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

von ..,- (Gast)


Lesenswert?

> 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.

von Benedikt (Gast)


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.

von Ingo Elsen (Gast)


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.

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.