Das RT 1020-Board verwendet 64K "SRAM_DTC", um .bss-Daten zu speichern, meine Anwendung erfordert mehr

Ich versuche, meine Anwendung auf ein NXP-Board (RT 1020) zu portieren .

Ich verstehe, dass dieses Board keinen internen Flash hat und daher von SRAM läuft. Es verwendet "SRAM_DTC" (fest gekoppelte Daten) und "SRAM_ITC" (fest gekoppelte Anweisungen), um dies zu verwalten.

In MCUXpresso kann ich das Speicherlayout sehen:

Geben Sie hier die Bildbeschreibung ein

Wenn ich meine Anwendung kompiliere, gibt der Linker einen Fehler aus, der besagt, dass der .bss-Abschnitt nicht in seinen SRAM_DTC-Abschnitt passt.

Region `SRAM_DTC' ist um 12172 Bytes übergelaufen

Ich versuche zu verstehen, ob dieser Abschnitt "SRAM_DTC" obligatorisch ist , um meine Anwendung auf diesem Board auszuführen. Ich habe versucht, einfach den Abschnitt SRAM_DTC zu löschen und die Anwendung auszuführen, aber das wird nicht in MCUXpresso kompiliert:

board/board.c:198: undefinierter Verweis auf `__base_NCACHE_REGION'

Wenn ich in der Speicherkonfiguration auch die NCACHE_REGION lösche, bootet das Board nicht mehr. Ich kann mich davon erholen, indem ich die Schritte zur Fehlerbehebung hier befolge .

Ich habe alles gelesen, was ich zu diesem SRAM_DTC/ITC/OC-Thema finden kann. Ich kann immer noch nicht herausfinden, ob ich den .bss-Abschnitt an eine Stelle im externen SRAM "verschieben" kann.

Meine Fragen:

  • kann jemand bestätigen (oder verneinen), ob es möglich ist, mein Problem zu lösen, indem ich den .bss-Abschnitt von "SRAM_DTC" nach "BOARD_RAM" verschiebe?
  • ist dies von Xpresso aus möglich (Linker-Skripte werden für mich generiert, ich kann meines Wissens keine Änderungen vornehmen)?

Einige Hintergrundinformationen habe ich hier und hier zu SRAM_DTC/ITC/OC gefunden .

Ich habe keine direkte Erfahrung mit Ihrem Board, aber Sie sollten in der Lage sein, die Linker-Einstellungen zu ändern, um verschiedene Speicherbereiche an anderer Stelle zu platzieren. Beachten Sie, dass Sie sicherstellen müssen, dass Ihr Startcode den externen Speichercontroller konfiguriert hat, damit er betriebsbereit ist. Auch die Leistung wird viel langsamer sein und es kann Probleme bei der Neuordnung geben, die NXP nicht allzu offen anerkennt (zumindest mit dem RT1062).

Antworten (1)

Für diejenigen, die sich für das gleiche Thema interessieren und Schwierigkeiten haben, Dokumentation zu finden:

Viele DTC/ITC-Informationen werden hier erklärt: https://www.nxp.com/docs/en/application-note/AN12077.pdf

DTC ist tatsächlich für Daten optimiert, während ITC für Anweisungen optimiert ist. Ich habe immer noch keine endgültige Dokumentation gefunden, die behauptet, dass ITC nur für Code verwendet werden soll, der von SRAM ausgeführt wird.

In meinem Fall benötigte meine Anwendung mehr DTC-SRAM als die standardmäßig verfügbaren 64 KB.

Daher bin ich letztendlich dieser Anleitung gefolgt: https://community.nxp.com/t5/i-MX-RT-Knowledge-Base/Reallocating-the-FlexRAM/ta-p/1117649

Beim Schreiben auf 3 verschiedene Register kann die Speicherkonfiguration geändert werden. Ich habe meine Speicherkonfiguration auf 0 B ITC, 192 KB DTC und (das zulässige Minimum) 64 KB für OC geändert.

Das OC wird für den standardmäßig ausgelieferten Bootloader verwendet und kann daher nicht vollständig entfernt werden.