www.mikrocontroller.net

Forum: Compiler & IDEs 2 Programme in einem AVR


Autor: Benedikt (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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).

Autor: Jürgen Schuhmacher (Gast)
Datum:

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

Autor: Benedikt (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Werner A. (homebrew)
Datum:

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

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: ..,- (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Benedikt (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Ingo Elsen (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.