AVR GCC, Fehlersuche, Harvard Architektur

Gast #2569179
Lesenswert?

Hallo alle,

Ich habe die Harvard Architektur und den GCC noch nicht ganz verstanden.

In meinem Programmsystem habe ich irgendwann zufällige Programmaufrufe.
Nach meiner Erfahrung geht das nur mit "Stacküberschreibern" und 
"Interruptvektorüberschreibern".

Stacküberschreiben in C tut man mit Varargs. Verwende ich nicht, gibts 
noch eine Möglichkeit ?
Wie müßte ein Code in C aussehen, der den Interruptvektor ändert?

Wie ist das mit  "(void *) 0" an eine Funktion als Basisadresse eines 
Arrays übergeben, und dann auf das X-te Element zugreifen? Schreibt das 
Programm Code oder Datencode? Und liegen die IVs im Programmbereich?

Oder ist das alles ganz anders mit Harvard ...

Danke für Tips, Mario
#2569237
Lesenswert?

EDUARDO Mario schrieb:
> Stacküberschreiben in C tut man mit Varargs. Verwende ich nicht, gibts
> noch eine Möglichkeit ?

Zu große lokale Variablen, Schreiben hinter ein Array-Ende, Benutzung 
von nicht/falsch initialisierten Zeigern oder Array-Indizes, zuviele 
globale Variable, zuviel dynamische Speicheallokation, ...

> Wie müßte ein Code in C aussehen, der den Interruptvektor ändert?

Gibt's nicht, zumindest nicht aus Versehen.

> Wie ist das mit  "(void *) 0" an eine Funktion als Basisadresse eines
> Arrays übergeben, und dann auf das X-te Element zugreifen? Schreibt das
> Programm Code oder Datencode?

Zuerst kommen die normalen Register, dahinter die I/O-Register, dann das 
RAM.

> Und liegen die IVs im Programmbereich?

Auf Programmspeicher kannst du beim avr-gcc nur über spezielle 
C-Funktionen zugreifen.
Gast #2569360
Lesenswert?

EDUARDO Mario schrieb:
> Oder ist das alles ganz anders mit Harvard ...

Mal es dir halt mal auf. Du hast einen Speicherbereich (Flash) für das 
Programm, und einen zweiten (SRAM) für die Daten. Beide fangen bei 
Adresse 0 an.

Am Anfang des Flashs liegen die Interruptvektoren. Schreiben kann man 
das Flash aus dem Programm zwar prinzipiell auch, aber nicht 
unbeabsichtigt.

In den Anfang des SRAM sind die Register des Prozessors gemappt, im 
weiteren SRAM dann die globalen und statischen Variablen, vom Ende her 
wächst der Stack.

Oliver

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren