Hallo,
ich programmiere einen Atmega16 in C. Mit folgender Funktion gebe ich
Strings über die UART Schnittstelle aus:
1 | void putstring(char *string, unsigned char channel)
|
2 | {
|
3 | while (*string != '\0')
|
4 | {
|
5 | if(*string == '\n') // CR senden ?
|
6 | {
|
7 | putch('\r',channel);
|
8 | string++;
|
9 | }
|
10 | else
|
11 | {
|
12 | putch(*string,channel); // Jedes Zeichen einzeln in den Sendebuffer schreiben
|
13 | string++;
|
14 | }
|
15 | }
|
16 | }
|
So kann ich z.B.:so eine Ausgabe realisieren:
1 | putstring("\nTaster 1 wurde als gedrueckt erkannt\n",0);
|
Das blöde daran ist, das der String "\nTaster 1 wurde als gedrueckt
erkannt\n" durch den Funktionsaufruf im EEPROM gespeichert wird und
dieser leider viel zu voll wird bei mir. Also würde ich den String gerne
im ROM speichern, aber ohne meine Funktion groß umzuschreiben (da ich so
halt variabler bin z.B.: wenn ich Arrays ausgeben will) und ohne den
eigendlichen Aufruf groß zu ändern. Ich habe es jetzt so gelöst:
[c]
#define Text "\nTaster 1 wurde als gedrueckt erkannt\n"
putstring(Text,0);
[\c]
Das fuktioniert zwar (der String wird im ROM gespeichert), aber
besonders elegant erscheint es mir nicht.
Klar ich kann es anstatt mit einem define auch mit einem konstantem
Array machen, aber dann habe ich ja vom Aufwand her auch nicht
gewonnen...
Am liebsten währe es mir, wenn ich an meinem eigendlichem Aufruf nichts
ändern müsste, also einfach nur den Text in den Funktionsaufruf
hereinschreiben und dem Compiler mitteilen, dass er den String im ROM
speichern kann. Jemand eine Idee?