Wie zu verlagern, Vektor-Tabelle, und ändern Sie ab addressin cortexm3 mit µvision(Keil)?
Ich bin mit STM32F107-cortex-m3-controller. Ich verwende uvision IDE für das Projekt. Ich habe eine Anwendung, die fehlerfrei läuft am Ausgangspunkt ich.e 0000 0x0800 angezeigt. Wenn ich eine änderung Ausgangspunkt, um 0x0800 angezeigt 4000 die Anwendung nicht richtig funktioniert. Ich habe änderungen vorgenommen, um die Vektor-Tabelle Position mit dieser Funktion als
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x8004000) ich.e geändert SCB->VTOR = 0x8004000 an diesem Ort.
Aber auch nach dieser Unterbrechung ist nicht passiert. Sollte ich nichts machen, um dieses Projekt zu arbeiten?
Grüße
Suraj
Ich vermute, Sie versuchen zu sagen, dass die Vektor-Tabelle in Ihrer Anwendung ist neu-befindet sich auf 0x0800 angezeigt.0000 nach dem boot-up, und jetzt sind Sie versucht, es zu verschieben, um 0x0800 angezeigt.4000? Haben Sie sichergestellt, dass die Vektor-Tabelle ist tatsächlich in der Lage von Ihrem toolset an die neue Adresse? Und Sie sagen: "die Unterbrechung ist nicht passiert" - was genau bedeutet das? Eine Menge hat zu Recht zu gehen, in der zwischen einer peripheren behauptet ein unterbrechen und Sie mit Ihren ISR - stack-setup aktivieren, interrupts an die CPU, NVIC interrupt-Priorität, die richtige interrupt-Vektor installiert, periphere interrupt demaskiert, etc.
Als ich sah auf die map-Datei ,die Vektor-Tabelle befindet sich auf 0x0800 angezeigt 4000 sich. Ich denke, es ist eine Initialisierung Fehler. die überprüfung auf, dass
Dies ist nicht die Antwort auf deine Frage, aber ich würde vorschlagen, dass Sie einen globalen oder statischen array, das groß genug ist, um ein Duplikat der Vektor-Tabelle und zeigt den Vektor, um diese, anstatt die Adresse direkt. Der Grund für meinen Vorschlag ist, dass Ihr Programm wächst, es zuordnen können Variablen, überschreiben Sie die Vektor-Tabelle als Variablen zugeordnet. Eine andere Lösung ist das Bearbeiten der linker-Skript und reservieren Sie genügend Platz für eine Vektor-Tabelle gibt.
Als ich sah auf die map-Datei ,die Vektor-Tabelle befindet sich auf 0x0800 angezeigt 4000 sich. Ich denke, es ist eine Initialisierung Fehler. die überprüfung auf, dass
Dies ist nicht die Antwort auf deine Frage, aber ich würde vorschlagen, dass Sie einen globalen oder statischen array, das groß genug ist, um ein Duplikat der Vektor-Tabelle und zeigt den Vektor, um diese, anstatt die Adresse direkt. Der Grund für meinen Vorschlag ist, dass Ihr Programm wächst, es zuordnen können Variablen, überschreiben Sie die Vektor-Tabelle als Variablen zugeordnet. Eine andere Lösung ist das Bearbeiten der linker-Skript und reservieren Sie genügend Platz für eine Vektor-Tabelle gibt.
InformationsquelleAutor suraj | 2013-02-07
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollten Sie nicht verwenden
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x8004000)
verwendenNVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x4000)
. Das zweite argument ist der "offset", nicht die absolute Adresse.InformationsquelleAutor Grissiom
Hinzufügen, die unter Anleitung einfach nach dem HAL_Init();
SCB->VTOR = (FLASH_BASE | 0x4000);
Müssen Sie auch aktualisieren Sie die interrupt-Vektor-Adresse, die in der STM32F1xc_flash.icf-Datei, wie unten beschrieben.
definieren symbol ICFEDIT_intvec_start = 0x08004000;
InformationsquelleAutor Rajesh Pappireddy
Ich Tat dies für meine STM32L496, und es war wichtig, um den neuen Vektor-Tabelle vor dem Aufruf HAL_Init(), denn er fordert HAL_MspInit(), die über die Verwendung der SysTick zu Messen timeouts beim einrichten einige Peripheriegeräte.
InformationsquelleAutor Ricardo Hassan