Hallo, der STM32F103x gibts in div. Varianten, so zb. mit 64kb und 128 kb Flash ROM. Dabei ist es so dass das Flash lt. DB an Adresse 0x0800 0000 beginnt und bis 0x0801 FFFF reicht, eine Unterscheidung des Berichs zwischen den beiden Varianten gibts im DB nicht, dh. ich muss davon ausgehen das die 64kb Variante bis 0x0801 0000 adressiert werden kann. Die Pages sind 1kb groß so dass 64 möglich wären. Nun zur Frage, obwohl im Keil der richtige Controller mit 64kb ausgewählt wird kann ich im Code: #define Page65 0x0801 0400 definieren obwohl das Flash nur bis 0x0801 0000 reicht..!? eine Fehlermeldung oder Warnung gibts nicht.. aber was passiert wenn das Programm während dem Ablauf in diesen Bereich schreiben will? Stürzt es ab oder passiert einfach nix? Gruss Tamer
Tamer schrieb: > #define Page65 0x0801 0400 #define definiert nur dumme Textersetzungen. Da kannst du hinschreiben was du willst, wie zum Beispiel die in C ungültige Folge "0x0801 0400" (das Leerzeichen ist verboten). z.B. #define Page65 Hans Wurst ! stört überhaupt nicht. Erst wenn Page65 irgendwo im Code genutzt wird und die Textersetzung in ungültigem C resultiert, gibts da Probleme. Tamer schrieb: > aber was passiert wenn das > Programm während dem Ablauf in diesen Bereich schreiben will? Kommt drauf an wie du das machst. Wenn du das #define gar nicht nutzt sondern, wie man das korrekterweise mit Linkerscripten macht, erhälst du vermutlich einen Linker-Fehler. > Stürzt es ab oder passiert einfach nix? Wenn du über die direkte Adresse im Code schreibst, kriegst du vermutlich einen BusFault Error o.ä.
Tamer schrieb: > Dabei ist es so dass das Flash lt. DB an Adresse 0x0800 0000 > beginnt und bis 0x0801 FFFF reicht Das wäre mir aber absolut neu. Bei dem Chip, den ich vor Jahren verbaut habe: STM32F103ZET6 sieht die Speicheraufteilung etwa so aus: ; interner ROM: 0h .. 0007FFFFh (512 KB) ; interner RAM: 20000000h .. 2000FFFFh ( 64 KB) ; externer RAM: 60000000h .. 600FFFFFh ( 1 MB) an NE1 (PD7) ; externer RAM2: 64000000h .. 6407FFFFh (512 KB) und der Anfang von link.xcl sieht so aus: --device=DARMSTM --compatible=cortex-m3 --output linked.elf --ro-base 0x00000000 --rw-base 0x20000000 ... Also lies das refMan nochmal gründlich. Der Flash startet bei den STM32F103xxx immer bei 0 W.S.
Stimmt nicht, was ab 0x00000000 eingeblendet ist, ist variabel, das kann Flash oder RAM sein. Das Flash liegt erstmal immer bei 0x080000000. Ob Flash oder SRAM bei 0 gespiegelt wird, hängt von den BOOTx Pins ab.
Tassilo H. schrieb: > Stimmt nicht, was ab 0x00000000 eingeblendet ist, ist variabel, Wenn du es so nimmst, dann erwähne auch den Bootlader. Aber praktikabel ist ohnehin nur die eine Einstellung, wo der Flash bei 0 beginnt. Die Version mit dem RAM ab 0 funktioniert ja nur dann, wenn man den RAM mit irgend etwas sinnvollem zuvor gefüllt hat. Aber das hat es ja im konkreten Betrieb in einem Gerät nicht, da gibt es nach dem Einschalten von Vcc garnix sinnvolles im RAM - was bleibt, ist der Flash und zwar ab 0, sonst geht da nix. Ob es Sinn macht, nach dem Startup aus dem Flash von eben diesem Flash irgend etwas in den RAM zu kopieren und dann die softwareseitige Umschaltung zu tun, sei mal dahingestellt. Ich würde in solchem Fall eher den RAM dort lassen wo er ist und das betreffende Codestück für die RAM-Adresse linken. W.S.
Tamer schrieb: > definieren obwohl das Flash nur bis 0x0801 0000 reicht..!? eine > Fehlermeldung oder Warnung gibts nicht.. aber was passiert wenn das > Programm während dem Ablauf in diesen Bereich schreiben will? Stürzt es > ab oder passiert einfach nix? Müsste man ausprobieren. Bei einigen Cortex M3 Varianten gibt es einen (Hard-)Fault, wenn auf nicht definierten Speicher zugegriffen wird. Das entscheidet aber der Hersteller selbst. Es könnte auch einfach das zuätzliche Addressbit ignoriert werden, so dass Du dann real auf 0x0800 0400 zugreifst. Ausprobieren dürfte schneller gehen als die umfangreiche Doku zu wälzen.
Hallo, es ist schon seltsam, es sieht so aus als dass der uC immer 128kb hat, obwohl er als 64kb angeboten wird. Wir haben es ausprobiert, man kann die Speicheradressen nach 64kb beschreiben und auch auslesen! Ich muss bei ST nachfragen wie das zu verstehen ist
Tamer schrieb: > Ich muss bei ST nachfragen wie das zu verstehen ist Lieber nicht. Ich habe sowas bei NXP erlebt. Diese Chips sind welche, wo bei der Endkontrolle im Bereich >64K irgend ein Speicherfehler festgestellt wurde. Also werden sie als 64 K Versionen gelabelt und verkauft. W.S.
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.