Sie müssen in der .map
Datei schauen, um zu sehen, was es dort setzt. Es kann aber auch Ihr Code oder eine Bibliothek sein. Sie verwenden eine absolute Adresse, keine relative Referenz zum "Ende des Bildes".
Verwenden Sie stattdessen eine benutzerdefinierte linker file zu explizit verknüpfen Sie diese Tabelle an das Ende des Bildes.
LR_IROM1 0x08000000 0x0007000 {
; Program ROM Area
ER_IROM1 0x08000000 (0x0007000-3) {
*.o (RESET, +First)
*(InRoot$$Sections)
.ANY (+RO)
}
; Program SRAM Area
RW_IRAM1 0x20000000 0x00001000 {
.ANY (+RW +ZI)
}
; Version area
VERSION (0x08000000 + (0x0007000-3)) 0x3 {
version.o
}
}
Ich habe keine Ahnung, über Ihre Ziellayout sich die Zahlen anpassen.
Einmal an einem sonnigen Tag schrieb ich eine little tool, um die Map-Datei zu lesen. Vielleicht klappt es bei deiner Version von keil?
Update:
Sie haben die .sct Datei (Linker-Datei) geteilt.
LR_IROM1 0x08000000 0x00008000 {
ER_IROM1 0x08000000 0x00008000 {
*.o (RESET, +First) *(InRoot$$Sections)
.ANY (+RO)
}
RW_IRAM1 0x20000000 0x00001000
{
.ANY (+RW +ZI)
}
}
Ihr ROM-Region erstreckt sich über LR_IROM1 0x08000000
-0x08007FFF
.
Daher 0x08006E00
ist nicht das Ende Ihres Bildes und der Linker darf alles (.ANY) nach dem statisch verknüpften Objekt AppVersion
setzen.
Wenn Sie das nicht möchten, weisen Sie den Linker explizit an, eine Region nur für Ihr version
-Objekt zu erstellen, wie im obigen Beispiel.
Drogi Kolego Pawle - ein Dlaczego Cię zu nehmen Niepokoi. (Ich habe Pawel gefragt, worüber er sich Sorgen macht). Macht es einen Unterschied, was in der Hex-Datei ist? Ich denke, dass tatsächlich Inhalt geladen ist wichtig –
@PeterJ, ich bin nur neugierig. Ich möchte wissen, warum etwas passiert. Das Problem bedeutet nicht, sich hier Sorgen zu machen. –
Haben Sie bereits in der .map-Datei gesucht? – Jeroen3