> wie kann ich an Speicherplatz sparen
Deine Texte sind alle gleich:
an einer bestimmten Bildschirmposition steht der Text "Alarm"
gefolgt von einer laufenden Nummer, gefolgt von einem ":"
und wahlweise dem Text "OFF" bzw, "ON".
Du wirst mir doch nicht erzählen wollen, dass du die Texte
nicht zur Laufzeit erzeugen kannst, während du in einer
Schleife durch die Alarmbits durchgehst:
Die Zeilennummer der Alarmmeldung mit der Nummer x ist
offensichtlich x % 10, während die Spaltenposition
x / 10 * irgendeine_Konstante beträgt.
#define ESC "\x1B"
void Transmit( char* String )
{
while( *String ) {
while( !(UCSRA & (1<<UDRE)) )
;
UDR = *String++;
}
}
int main()
{
char Buffer[20];
int i;
...
Transmit( ESC "1B[2J" );
for( i = 0; i < 30; ++i ) {
sprintf( Buffer, ESC "%d;%dH", ( i + 1 ) % 10,
( i + 1 ) / 10 * 20 );
Transmit( Buffer );
sprintf( Buffer, "Alarm%02d:", i + 1 );
Transmit( Buffer );
if( Alarm[i] )
Transmit( "ON" );
else
Transmit( "OFF" );
}
...
}
Falls dir sprintf im Programm zu viel aufträgt, kann man
auch itoa bei etwas eingeschränkter Funktionalität
stattdessen verwenden. sprintf ist ziemlich teuer, das
relativiert sich allerdings wenn man die ganzen
Formatiermöglichkeiten gebrauchen und einsetzen kann.
Auf jeden Fall: Was bringt dir dein vorgefertigter
Totalstring? Der kostet nur Platz, und das Problem dass je
nach festgestelltem Zustand das OFF durch ON ersetzt werden
muss hast du auch nicht gelöst.