Ich arbeite mit Invensense IMU3000 und einem PIC18 Mikrocontroller. Ich migriere eine in MSVS2005 geschriebene Bibliothek nach MPLAB und nehme die richtigen Änderungen vor, um sie auszuführen. Der Code selbst enthält nur Warnungen, aber wenn es um das Verknüpfen geht, bekomme ich Folgendes:
Fehler – Abschnitt „.idata_dmpDefault.o“ passt nicht in den Abschnitt. Abschnitt „.idata_dmpDefault.o“ Länge=0x000004b0
Was bedeutet das?
Alle Variablen im Programm nehmen Platz ein, und Sie verwenden zu viel für den Chip, für den Sie es kompilieren möchten. Das Programm, das Sie zu kompilieren versuchen, benötigt 0x4B0 Bytes (1200 dezimal), und Sie haben etwas weniger als das.
Finden Sie heraus, wie viel RAM-Speicher Ihr PIC18 hat. Stellen Sie sicher, dass es mit dem übereinstimmt, wofür Sie kompilieren. Möglicherweise gibt es irgendwo eine Linker-Definitionsdatei, die die Größe der verschiedenen Abschnitte definiert. Abschnitt IDATA ist Ihr aktuelles Problem.
Jemand, der sich besser mit MPLAB auskennt, kann möglicherweise Details darüber ausfüllen, was Ihre tatsächlichen Einschränkungen sind und wie Sie den Compiler für Ihren Chip richtig konfigurieren.
Das Lesen von FAQ-8 und FAQ-10 im Microchip C18 Compiler Getting Started Guide sollte Ihnen helfen, die Probleme zu lösen. Ich bin mir nicht sicher, ob Sie C18 verwenden oder nicht, um Ihren Code zu kompilieren, aber selbst wenn Sie es nicht sind, müssen Sie wahrscheinlich Ihr Linker-Skript ändern, um die Größe der RAM-Bank zu erhöhen.
Sie sind entweder
(A) Der Flash-Speicher zum Speichern der Anfangswerte der Variablen geht aus, oder
(B) Ihre Variablen sind größer als das Segment.
Der Linker versucht, die dmpDefault-Datei zu verknüpfen, aber es überläuft die definierten Speichersegmente des Linkers.
ODER
Bei MCC18 erzeugt jede Datei 1 Datenabschnitt mit maximal 256 Bytes (1 Bank). .idata_dmpDefault ist viel größer als das. Sie können benannte Datenabschnitte erstellen, indem Sie Banken im Linker kombinieren und #pragmas um die Variablen setzen, um diese Variablen in diesem Abschnitt zu lokalisieren.
Ich danke Ihnen allen für Ihre freundliche Hilfe!
Vielleicht kann ein Teil der Lösung allgemein helfen: Ich habe herausgefunden, dass ich große konstante Arrays habe (ich hatte den Code nicht selbst geschrieben ...) und ich habe den RAM-Bedarf drastisch reduziert, indem ich sie in Flash anstelle von RAM eingefügt habe, indem ich die verwendet habe Schlüsselwort "rom" in ihrer Deklaration.
Kortuk
mjh2007
Nick T
Stefan
Stefan
Nick T
Benutzer2974