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

Eine eigene Frage? Dieser Thread ist über 21 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.