Beholder321
11.07.2006, 15:57
Hi Leute,
habe vorhin schom im mikrocontroller.net Forum gepostet, vielleicht kann mir hier jemand eine Antwort geben?
Ich verwende einen ATmega128, der mit dem externen Speicherinterface
zwei SRAM-Bausteine a 512kB anspricht. Dazu verwende ich drei weitere
Port Pins als Adressleitungen und zwei Port Pins um die SRAM-Bausteine
mittels Chip Enable zu de- / aktivieren.
Um den Speicher zu testen, habe ich ein kleines Testprogramm
geschrieben, das unten dargestellt ist. Das ganze klappt auch
wunderbar
und ist soweit alles in Ordnung, ich habe nun eine Frage zu der
Initialisierung des externen Speicherinterface.
Im speziellen habe habe ich ne Frage zu dieser Codezeile
void xram(void) __attribute__ ((naked)) __attribute__ ((section (".init1")));
So wie ich es verstanden habe sorgt man somit dafür, dass das
Speicherinterface frühzeitig initialisiert wird. Wobei die Funktion void xram(void) die jeweiligen Register setzt. Somit wird dem
Compiler? oder Linker? mitgeteilt, das er den externen Speicher nutzen
kann.
Oder sehe ich das falsch?
Ich habe das ganze auch mal ohne diese vorzeitige Initialisierung
gemacht, sondern die Funktion void xram(void) ganz normal in der
main()aufgerufen. Das Ergebnis war, dass es auch so funktionierte.
Deshalb meine weitere Frage, wozu macht man es dann und was kann
passieren, wenn mann es nicht macht?
Mir geht es darum, den Hintergrund zu verstehen, da ich es für eine
Ausarbeitung gebrauche und den Quellcode begründen soll.
Vielleicht hat der werte Herr Jörg Wunsch Zeit und Möglichkeit mir
darauf zu antworten, da ich diesen Code bzw. diese Befehlszeile in
einen Beitrag von ihn gefunden habe.
Mein kleines nicht sehr anspruchvolles, aber funktionierendes
Testprogramm ist als Dateianhang beigefügt.
Gruß und Freude
Thomas
habe vorhin schom im mikrocontroller.net Forum gepostet, vielleicht kann mir hier jemand eine Antwort geben?
Ich verwende einen ATmega128, der mit dem externen Speicherinterface
zwei SRAM-Bausteine a 512kB anspricht. Dazu verwende ich drei weitere
Port Pins als Adressleitungen und zwei Port Pins um die SRAM-Bausteine
mittels Chip Enable zu de- / aktivieren.
Um den Speicher zu testen, habe ich ein kleines Testprogramm
geschrieben, das unten dargestellt ist. Das ganze klappt auch
wunderbar
und ist soweit alles in Ordnung, ich habe nun eine Frage zu der
Initialisierung des externen Speicherinterface.
Im speziellen habe habe ich ne Frage zu dieser Codezeile
void xram(void) __attribute__ ((naked)) __attribute__ ((section (".init1")));
So wie ich es verstanden habe sorgt man somit dafür, dass das
Speicherinterface frühzeitig initialisiert wird. Wobei die Funktion void xram(void) die jeweiligen Register setzt. Somit wird dem
Compiler? oder Linker? mitgeteilt, das er den externen Speicher nutzen
kann.
Oder sehe ich das falsch?
Ich habe das ganze auch mal ohne diese vorzeitige Initialisierung
gemacht, sondern die Funktion void xram(void) ganz normal in der
main()aufgerufen. Das Ergebnis war, dass es auch so funktionierte.
Deshalb meine weitere Frage, wozu macht man es dann und was kann
passieren, wenn mann es nicht macht?
Mir geht es darum, den Hintergrund zu verstehen, da ich es für eine
Ausarbeitung gebrauche und den Quellcode begründen soll.
Vielleicht hat der werte Herr Jörg Wunsch Zeit und Möglichkeit mir
darauf zu antworten, da ich diesen Code bzw. diese Befehlszeile in
einen Beitrag von ihn gefunden habe.
Mein kleines nicht sehr anspruchvolles, aber funktionierendes
Testprogramm ist als Dateianhang beigefügt.
Gruß und Freude
Thomas