Fragen zur Speicherbelegung
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
Re: Fragen zur Speicherbelegung
Zitat:
Zitat von Kornhaas.net
Es sieht so aus als würde er das char mit dem Menü in das RAM und nicht ins Flash legen.
Ja, genau richtig.
Schau dir mal folgendes Beispiel an:
http://www.kreatives-chaos.com/index...e=c_uart_flash
Daten aus dem Flash laden ist bei den AVRs aufgrund der Harvard Architektur leider ein bißchen umständlicher.
MfG Kjion