Forum: Compiler & IDEs Interrupt Vektoren beim ATmegaxx


von Martin Raffelsieper (Gast)


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

von Matthias (Gast)


Lesenswert?

Hi

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

Matthias

von Martin Raffelsieper (Gast)


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

von mthomas (Gast)


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.

von Martin Raffelsieper (Gast)


Lesenswert?

DAS hört sich gut an, werde ich mal probieren!

Gruß Martin

von Matthias (Gast)


Lesenswert?

Hi

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

Matthias

von Wolfgang Niegsch (Gast)


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

von Jörg Wunsch (Gast)


Lesenswert?

Es kann schon: man muß sich seinen eigenen Linkerscript bauen.

von Wolfgang Niegsch (Gast)


Angehängte Dateien:

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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.