Hallo Stefan
Das Problem bei der Lösung von Christof ist, dass jede Benutzung einen eigenen Eintrag im ROM benötigt.
Es sieht bei mir so aus, dass ich Text-Strings als Konstante
abgelegt habe, um damit den Platz im RAM freizuhalten. Nun
habe ich in einem Modul des Programms eine Funktion, die mir
eine Variable übergibt. Und nun muss ich eine Möglichkeit
finden, am besten ohne viele ‚if-‘ und ‚switch-case-Abfragen‘,
anhand dieser Variable auf die in einem anderen Modul
abgelegten Konstanten zuzugreifen.
z.B.
const char konstante1 = „Hallo“;
const char konstante2 = „Welt“;
in einem anderen Modul rufe ich dann die Funktion
ausgabe(variable1) auf.
Wenn ich es richtig verstanden Habe, verteilt sich das ganze auf 3 Module:
Modul 1: enthält die Texte
Modul 2: will einen dieser Texte Ausgeben
Modul 3: macht die Ausgabe
Problem: möglichst wenig ROM und RAM verwenden. ?
Eine Möglichkeit wäre das ganze mit einer Array zu lösen:
File „texte.h“:
typedef enum
{
HELLO,
WELT,
TEXT3,
.....
TEXTn,
\_\_SIZE\_\_ /\* damit hast du die die Anzahl der enums \*/
} TEXTE;
**file "modul1.c"**
#include "texte.h"
const char konstanten[\_\_SIZE\_\_][] =
{
"Hello",
"World",
"text1",
.......,
"textn"
};
**file "modul2.c"**
#include "texte.h"
void ausgabe(TEXTE text);
void f(void)
{
ausgabe(WELT);
}
**file "modul3.c"**
#include "texte.h"
extern const char konstanten[\_\_SIZE\_\_][];
/\* Falls der Compiler Probleme mit der undefinierten
Dimension macht, alternativ:
extern const char \* const konstanten[\_\_SIZE\_\_];
\*/
void ausgabe(TEXTE text)
{
puts( konstanten[text] );
}
> Mfg und vielen Dank für die Mühen beim Durchlesen und Nachdenken
War nur Erfahrung.
> Stefan Hager