Hallo Leute

hab hier ein kleines Problem. Versuche gerade ein Programm zu erstellen, welches mir ein Menü beim Reset des ATmega128 ausgibt.

Nun hab ich das Problem, das wenn ich das Array mit dem Menü normal mit const char initialisiere ergibt sich nach dem Compelieren das es mit das Menu nach dem Reset ausgibt aber der ca. 20 Zeile nur noch mist ausgibt.

WinGCC sagt nach dem Compilieren:
Program: 5942 bytes (4.5% Full)
Data: 5658 bytes ( 138,1% Full)

Somit kann ich mir auch den Fehler erklären. Es sieht so aus als würde er das char mit dem Menü in das RAM und nicht ins Flash legen.

Kann mir einer helfen und sagen wie es mit der pgmspace.h geht.

Hier nun mein Programm Auszug:

Code:
char help[][255] PROGMEM = 
{ "\r\n\r\n",
  "****** SPI to UART Umwandlung ******\r\n",
  "****** Beta 1.0   Kornhaas.net ******\r\n\r\n",
  "Bitte treffen Sie ihre Auswahl:\r\n",
  "[?] - Status anzeiegn\r\n",
  "[X] - Sequenz eingeben \r\n",
  "[Q] - SCK Frequenz ( ----SPI2X=0-----    ----SPI2X=1----- )\r\n",
  "               ( 0=F/4   921.6kHz    4=F/2  1.8432MHz )\r\n",
  "               ( 1=F/16  230.4kHz    5=F/8   460.8kHz )\r\n",
  "               ( 2=F/64   57.6kHz    6=F/32  115.2kHz )\r\n",
  "               ( 3=F/128  28.8kHz    7=F/64   57.6kHz )\r\n",
  "[S] - Slave Select pin level (0=low, 1=high)\r\n",
  "[P] - Auto-toggle SS control (0=low, 1=high, 2=off)\r\n",
  "[T] - Bit Transmission Order (0=MSB first, 1=LSB first)\r\n",
  "[M] - SPI Clock Mode         (0 : 1 : 2 : 3)\r\n",
  "      Mode  Leading-Edge     Trailing-Edge   CPOL CPHA\r\n",
  "       0    Sample(Rising)   Setup (Falling)   0    0\r\n",
  "       1    Setup (Rising)   Sample(Falling)   0    1\r\n",
  "       2    Sample(Falling)  Setup (Rising)    1    0\r\n",
  "       3    Setup (Falling)  Sample(Rising)    1    1\r\n",
  "[W] - Write (save) configuration (auto loaded at reset)\r\n\r\n"
// 1234567890123456789012345678901234567890123456789012345678901234  64 char
};


int main (void) 
{
	char tmp,uart_input;
	int i=0;

	USART0_Init();				// UART-Port initialisiernen 
	SPI_Init ();				// SPI-Port initialisieren 
	
	DDRA=0xff;					// Port B als AUsgang


	for(i=0; i<20;i++)
	{
		_delay_ms(10);
		USART0_TransmitString(help[i]); // Menü soll  über UART ausgegeben werden
	}
	for (;;)
	{
// Weiterer Code folgt hier noch
gruß Holger