Kornhaas.net
04.09.2005, 22:15
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:
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"
// 12345678901234567890123456789012345678901234567890 12345678901234 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
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:
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"
// 12345678901234567890123456789012345678901234567890 12345678901234 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