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

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.