Ich habe diese Frage auf dem SCB-Forum, aber habe keine Antwort Ich versuche, einige Projekte von uVision IDE zu SCB zu portieren. Die Probleme begannen mit der Implementierung der Vektortabelle. Für examle habe ich einfache C++ CodeSourcery CodeBench ARM Cortex-M-Vektor Tabelle Implementierung
#define STACK_TOP 0x20000800
typedef void (*handler_ptr)();
void ResetHandler() { while (1); }
void NMIHandler() { while (1); }
void HardFaultHandler() { while (1); }
__attribute__ ((section("vectors"))) handler_ptr const vector_table[] = {
(handler_ptr) STACK_TOP,
ResetHandler,
NMIHandler,
HardFaultHandler,
};
Dieser Code kompiliert nicht, weil SCB-Bibliothek für "int main (void)" Erklärung suchen. Ok, ich kann diese Funktion hinzufügen, aber dann ignoriert SCB meine Implementierung der Vektortabelle und verwendet eigene (wenn ich Funktion, die Adresse in VT aufrufen, sehe ich SCB Dummy-Handler).
Wie kann ich SCB VT-Implementierung von mir neu schreiben? Bitte bieten Sie nicht die Verwendung von speziellen SC3-Funktionsnamen an (es ist nicht gut, sie mit 2 IDEs zu unterstützen) oder verschieben Sie die Vektortabelle an einen anderen Speicherort.
__attribute__ ((section(".isr_vector"))) void (* const g_pfnVectors[])(void)
von Luminary Micros "startup_gcc.c - Startup-Code für die Verwendung mit GNU-Tools" hat keine Auswirkung zu
Danke.
Igor, danke. Du hast recht. Die beste Lösung ist eine separate Header-Datei für jeden Compiler. Ich finde den richtigen Sektionsnamen in der Linker-Datei - ".cs3.interrupt_vector", aber Linker platziere meine Vektor-Deklaration nachdem SCB generiert wurde. –
Ich habe es geschafft, ein C++ - Projekt mit der gleichen "vectors.c/h" -Datei für Keil ARM 6.6 und GCC 6 für den Cortex M7 zu erstellen. Da der Keil-Compiler (der über uVision aufgerufen wird - benötigt einen dedizierten Rant) - vordefinierte Abschnitte (z. B. RESET) hat, habe ich das GCC-Linker-Skript so geändert, dass es übereinstimmt. Der schwierigere Teil besteht darin, den Stapel so einzurichten, dass er derselbe ist. Nicht so gut sortiert. – Flip