www.mikrocontroller.net

Forum: Compiler & IDEs Interrupt Vektoren beim ATmegaxx


Autor: Martin Raffelsieper (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Weiss jemand, wie man den Compiler / Linker veranlassen kann, die
Tabelle mit den Interuptvektoren NICHT einzubauen?

Das würde viel Speicher sparen


Gruß Martin

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

AFAIK nicht.
Beim Mega16 spart das ganze max. 42 Befehlswörter wenn du keine INT
nutzt. Also nicht wirklich viel.

Matthias

Autor: Martin Raffelsieper (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
beim mega64 scheinen es immerhin knapp 0x88 = 136 Byte zu sein, wenn ich
das Linkerlisting richtig deute.

Bei einem Bootloader mit Daten-Entschlüsselung wäre das schon mal
hilfreich


Gruß Martin



Disassembly of section .text:

00000000 <__vectors>:
   0:  0c 94 85 01   jmp  0x30a
   4:  0c 94 a0 01   jmp  0x340
   8:  0c 94 a0 01   jmp  0x340
   c:  0c 94 a0 01   jmp  0x340
  10:  0c 94 a0 01   jmp  0x340
  14:  0c 94 a0 01   jmp  0x340
  18:  0c 94 a0 01   jmp  0x340
  1c:  0c 94 a0 01   jmp  0x340
  20:  0c 94 a0 01   jmp  0x340
  24:  0c 94 a0 01   jmp  0x340
  28:  0c 94 a0 01   jmp  0x340
  2c:  0c 94 a0 01   jmp  0x340
  30:  0c 94 a0 01   jmp  0x340
  34:  0c 94 a0 01   jmp  0x340
  38:  0c 94 a0 01   jmp  0x340
  3c:  0c 94 a0 01   jmp  0x340
  40:  0c 94 a0 01   jmp  0x340
  44:  0c 94 a0 01   jmp  0x340
  48:  0c 94 a0 01   jmp  0x340
  4c:  0c 94 a0 01   jmp  0x340
  50:  0c 94 a0 01   jmp  0x340
  54:  0c 94 a0 01   jmp  0x340
  58:  0c 94 a0 01   jmp  0x340
  5c:  0c 94 a0 01   jmp  0x340
  60:  0c 94 a0 01   jmp  0x340
  64:  0c 94 a0 01   jmp  0x340
  68:  0c 94 a0 01   jmp  0x340
  6c:  0c 94 a0 01   jmp  0x340
  70:  0c 94 a0 01   jmp  0x340
  74:  0c 94 a0 01   jmp  0x340
  78:  0c 94 a0 01   jmp  0x340
  7c:  0c 94 a0 01   jmp  0x340
  80:  0c 94 a0 01   jmp  0x340
  84:  0c 94 a0 01   jmp  0x340
  88:  0c 94 a0 01   jmp  0x340

0000008c <__ctors_end>:
  8c:  d3 dd         rc
immerh

Autor: mthomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Beim einem Bootloader funktioniert es mit einem "Trick":
Beschrieben ist das (etwas kryptisch) in der Dokumentation der
avr-libc.

Man versieht alle Funktionen, die im Bootloader benutzt werden mit
einem eigenen "section attribute" also z.B. BOOTLOADER nach dem
Beispiel der avr-libc/boot.h. Dann teilt man dem Linker mit, wo die
bootloader section abgelegt werden soll (also z.B. bei Byte-Adresse
0x3800). Der Interrupt Vector wird in die ".text" section abgelegt,
die typischerweise bei 0x0000 beginnt. Flasht man die
bootloader-hex-Datei wird der Interrupt-Vector bei 0x0000 geschrieben
(.text) und der Bootloader code bei der gegeben Startadresse fuer die
Bootloader Sektion. Sobald man nun eine Applikation ueber den
Bootloader auf den AVR programmiert, wird der ueberfluessige
Interrupt-Vektor aus dem Bootloader-Code mit dem "gewollten" der
Applikation ueberschrieben.

Autor: Martin Raffelsieper (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
DAS hört sich gut an, werde ich mal probieren!

Gruß Martin

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

der Starupcode (setzen des SP usw.) landet dann aber AFAIK auch ab
0x0000 und nicht in der Bootloadersection.

Matthias

Autor: Wolfgang Niegsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Martin,
es gibt für den Linker eine option .noinit damit kann es verhindert
werden, das die Vektoren und Starup-code eingebunden werde. Siehe die
Docus avr libc manual bei memory sections.

Wolfgang

Autor: Jörg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es kann schon: man muß sich seinen eigenen Linkerscript bauen.

Autor: Wolfgang Niegsch (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Martin,
meine Info vom 03.02.2004 11:16 ist leider verkehrt ;(
Die richtige Option lautet:-nostartfiles
Einfach vorhandene anpassen. Mache ich auch.

Wolfgang

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.