Hallo GCC Gemeinde, ich erhalte folgende Fehlermeldung und kann nicht wirklich etwas damit anfangen, zumal eigentlich auch alles funktioniert! Fehlermeldung: d:/programme/atmel/arm/programme/yagarto/bin/../lib/gcc/arm-elf/4.3.3/.. /../../../arm-elf/bin/ld.exe: warning: dot moved backwards before `Flash_Buffer_Section'. Aufruf: arm-elf-gcc -nostartfiles -Wl,--cref -lc -lgcc -TEVBmmTm_SAM7S256_RAM.cmd -Ttext 0x00100000 -Wl,--section-start,Flash_Buffer_Section=0x0013A000 -Tdata 0x0020B000 -n -o evbmmtm_sam7S256_flash.elf cstartup_flash.o cpu_init.o pit_unit.o spi_unit.o flash_unit.o pio_unit.o uart_unit.o glcd_unit.o main.o > evbmmtm_sam7S256_flash.map. Durch diesen Aufruf möchte ich eine Tabelle in die Flash_Buffer_Section laden. Wenn ich nun das übersetzte Programm in den Flash_Speicher lade, funktioniert alles und die Tabelle steht an der richtigen Adresse, warum also die Fehlermeldung (Warning)?
Wenn Linker-Skript (EVBmmTm_SAM7S256_RAM.cmd) und das Map-File (evbmmtm_sam7S256_flash.map) gezeigt würden, könnte man evtl. besser helfen. Hatte diese Warnung selbst noch nicht, wahrscheinlich weil ich für ARM-Projekte mit etwas speziellem Memory-Layout ein angepasstes Linkerskript statt Kommandozeilenparameter nutze. Somit nur eine Interpretation der Warnung (sicher ist das aber irgendwo auch richtig dokumentiert): der Adresszähler des Linkers ("dot") wird durch die Vorgabe der Startadresse der "Flash_Buffer_Section" auf einen Wert gesetzt wird, der kleiner ist als der zu diesem Zeitpunkt aktuelle Wert.
Hallo Martin, erst einmal danke für die Antwort. Das .map und .cmd File habe ich mal angehangen, aber ich glaube, dort steht nichts besonderes drin. Ich habe die section-start auch schon an anderer Stelle, sprich in der Reihenfolge der Speicheradressierung probiert, die Meldung ist immer gleich. Natürlich verwende ich auch ein Makefile, die Fehlermeldung war nur ein Auszug aus dem make Vorgang. Habe ich aber auch im Anhang. Wenn ich eine Doku über die Einträge in der ".cmd" finden könnte, würde ich die Einträge für die Tabelle "Flash_Buffer" auch dort machen, denn die Fehlermeldung nervt!
Bitte eine minimale Beispielanwendung erstellen, in der alle
erforderlichen Dateien (Makefile, Linker-Skript, Assembler- und C-Codes)
für ein einfaches "make all" enthalten sind. Es ist etwas knifflig ein
brauchbare Lösung zu zeigen, wenn man nicht genau weiß was in die
Section soll, vermute mal es sind es read-only Daten aber evtl. ja auch
noch Code.
Würde das in der Art lösen:
- je ein Linker-Skript für "RAM/Debug" und "Flash/relaease".
- In den Beiden Linker-Skripten MEMORY eintragen
Diese Punkte ersparen zumindest mal die Kommandozeilenparameter -Ttext
und -Tdata und schließen damit eine Problemquelle aus. Vorlagen dafür
z.B. in den softpacks von atmel.com
Sieht so aus, also ob die section genau an einer bestimmten
Speicherstelle beginnen soll (falls nicht, nochmal fragen). Würde dann
in der Art fortfahren (gibt mglw. bessere Alternativen):
- einen weiteren Eintrag im MEMORY-"Array" des Linker-Skripts für diesen
Speicherbereich und ORIGIN/LENGTH der sonstigen Einträge anpassen.
- analog zu ".text/.data" in den vorhandenen Linker-Skripten weitere
Einträge für die selbstdefinierte Section anlegen darin statt auf z.B.
>flash ein >flash_buffer_mem damit diese dem Speicherbereich für
zugewiesen werden, den man für den Buffer nutzen will.
Vorgehensweise ist ähnlich der, die man verwenden kann, wenn ein
Controller nur DMA für bestimmte Speicherbereiche bietet. Dann muss man
auch dafür sorge trage, dass das/die Arrrays für den Pufferbereich in
eben diesen Speicherbereichen abgelegt werden).
Sorry, eine etwas ungenaue Erklärung aber ich kenne die korrekten
Bezeichnungen für die Elemente von Linkerskipten selbst nicht so genau,
da bisher "einfach gemacht" ohne sich die Definitionen aus dem gnu-ld
Manual zu merken.
Hallo Martin, nochmals Danke! Ich werde mal ein minimales Beispiel erstellen und dann hier ablegen. Es wird aber etwas dauern, da ich mir ein paar Tage Urlaub genehmigt habe. Du hast recht, in dem Speicherbereich sollen Daten liegen, die als Source für SPI-send dienen sollen. Da der SAM7S für den PDC leider ein paar Fehler im SPI-fixedMode hat, muss ich im variableMode die Daten (528 * 4 Byte) zur Verfügung stellen und habe, da genug Flash zur Verfügung steht, die Tabelle im Flash abgelegt. Wenn ich nun im RAM mein Programm debuggen möchte (Tabelle ist dann nicht Bestandteil des Programms) und nicht jedes Mal der Flash neu beschrieben werden soll, sollten die Daten an festen Adressen liegen (einmal im Flash, immer im Flash) und ich kann immer darauf zugreifen. Wie gesagt, wenn ich die Syntax vom .cmd File kennen würde, könnte ich diese Tabelle als Bestandteil einbinden, aber dann wird ja doch nicht nur der RAM sondern auch der Flash beschrieben, nicht oder? Ich lasse dann wieder etwas von mir hören.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.