Vector Table Offset setzen: Nur multiple of 0x200 ?

Gast #5539340
Hallo,

ich habe ein kleines Projekt (STMF103CB..) mit ST HAL Treibern via 
STM32CubeMX erstellt. Wenn ich den Vector Table Offset setzen möchte, 
finde ich dazu in der Datei system_stm32f1xx.c:

#define VECT_TAB_OFFSET  0x4100 /*!< Vector Table base offset field.
                                  This value must be a multiple of 
0x200. */

Warum sind hier nur multiple of 0x200 vorgesehen? Ich habe den Grund 
noch nicht gefunden. Es scheint auch mit multiple of 0x100 zu gehen. 
Zumindest habe ich noch keine Einschränkung festgestellt. So habe ich es 
bisher in der ARM Doku gefunden. :-\

Kann mir bitte jemand den richtigen Hinweis geben?

Danke im Voraus!
Ist das nicht ein Cortex-M3?

In dessen ARM Architekture Reference Manual geht VTOR bis Bit 7, d.h. es 
wäre  ein Alignment auf 128 Byte nötig.

Es könnte sein das ST da aus dem falschen oder veraltetem Dokument 
abgeschrieben hat. Ähnlichees habe ich in NXP Doku gefunden.
(Firma: fritzler-avr.de)
Hehe, und ich hab gelesen, dass das auchnoch/zusätzlich von der Länge 
der IVT abhängig ist.
Um die Länge der IVT zur nächsten 2er Potenz muss aligned werden.

http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0552a/Ciheijba.html

(Der Begleittext unter der Tabelle)

Bit 6..0 sind reserved, bei JEDEM M3.
Wenn eine Implementierung mehr Einträge hat als 128Byte (also 32 
Einträge), dann wird der Offset noch größer.

Son STM32 mit M3 Kern hat ja schonmal gut und gerne 100 IRQ Quellen und 
somit Einträge.

0x200 = 512/4 = 128 Einträge oder weniger
Gast
Moin,

naja, aber ARM erstellt die IP, während ST das Silizium bäckt.
Wenn ST ein anderes VT Alignment braucht oder haben will, dann machen
sie das halt einfach.
Kann aber auch ein Fehler sein.
Aber darauf sollte man sich nicht verlassen.

Von Armv7-M Architecture:
The offset address is 32-word aligned. Where more than 16
external interrupts are used, the offset word alignment must be
increased to accommodate vectors for all the exceptions and
interrupts supported and keep the required table size naturally
aligned.

Die Vector Tabelle hat ja etwas mehr als nur 16 Einträge.
Jim M. schrieb:
> In dessen ARM Architekture Reference Manual geht VTOR bis Bit 7, d.h. es
> wäre  ein Alignment auf 128 Byte nötig.

Gnarf. Im Kapitel B1.5.3 "The vector table" steht das mit dem Alignment 
genauer drin, und für "lange" Vector Tabellen muss das die nächst 
größere 2-er Potenz sein - 128 Byte ist nur das Minimum.

Praktisch jeder Cortex-M3 hat mehr als 32 Interrupts (die Faults zählen 
hier mit), und viele mehr als 64. Daraus erklärt sich die Anforderung 
auf 0x200 Alignment.

Der STM32F103CB scheint aber nur 59 Interrupts zu haben, was ein 
Alignment auf 0x100 ermöglichen würde. Hier hat ST möglichwerweise bei 
der Doku von einem "dickeren" Cortex-M3 abgeschrieben.
Gast
Moin,

Jim M. schrieb:

> ... (die Faults zählen hier mit)...

Im Refman sieht man, dass die ersten 13 Vectoren sind nicht numeriert
sind und somit Int Nr 59 bereits an Offset 0x0000_012C steht.
Also >0x100. Daraus folgt das Alignment von 0x200.
Gast
Oha,
hab mich in der eile vertan, die ersten 16 Vectore sind nicht 
nummeriert.
Daher liegt Int Nr. 0 bei Offset 0x40. und Int Nr 59 eben bei 0x12C.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 8 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.