AVR GCC, Fehlersuche, Harvard Architektur

Gast #2569179
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
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
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

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.