Stringausgabe in den ROM verschieben

OP #3540201
Lesenswert?

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?
Persönliche Seite #3540217
Lesenswert?

Markus Wi*** schrieb:
> 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.

Du meinst RAM, nicht EEPROM.

Wie man Daten im Flash ablegt, und wieder daraus extrahiert, wird hier 
beschrieben:

http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Speicherzugriffe
OP #3544946
Lesenswert?

Ich meinte eigendlich den FLASH, war nur bisschen verwirrt ; )

Wie auch immer, jedenfalls habe ich mir deinen Link angeschaut und auch 
weitere Quellen im Netz und hab es aber nicht komplett verstanden. Dann 
bin ich auf eine kleine Anleitung hier gestoßen, wo es super erklährt 
ist.

Also für die Nachwelt:

http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=38003

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren