Grüße Ich habe ein Problem beim umstieg vom AVR auf STM32L152 Cortex-M3. Beim AVR kann man mit EEMEM eine Variable defienieren die im EEPROM liegt, welche beim flashen dan docht hin geschrieben wird. Da der STM32L152 auch EEPROM beinhaltet muss das doch irgent wie bei diesem Controller Type gehen. Ich kann aus dem laufendem Programm über eine FESTE Adresse den EEPROM lesen und schreiben. Nun will ich halt eine Variable defineieren. Es würde mich freuen wenn mir jemand helfen kann, ich finde auch über google nichts im Netz.
Moin moin, als erstes solltest du in der Lib von ST nach dem Header für die Flash Funktionen suchen (sollte stm32l1xx_flash.h heißen). Dieser ermöglicht den Zugriff auf die Speicherzellen im Flash. Die Aussage mit EEMEM und AVR ist nur teilweise richtig. Richtig ist, dass du dies nicht in deinem aktuellen Mikrocontroller hast. Jedoch ist es eine Besonderheit des Compilers und nicht jeder Compiler hat das (erste mal, dass ich davon was höre). Nun ist es abhängig von deinem aktuellen Compiler, wie du eine feste Adresse adressierst. Dies kann über statische Variablen geschehen oder indem du über den Linker und das Linkerskript festen Speicher reservierst.
Die Header ist auch schon eingebnden mit dieser schreibe und lese ich den EEPROM direkt über eine Adresse #define EEPROM_Adresse 0x08080000 Nun will ich halt dies über eine Variable machen, so das ich mich nicht mehr mit den Adressen herum ergern muss. Ich wollte die halt auch im Linker Skript definieren. EEPROM (rx) : ORIGIN = 0x08080000, LENGTH = 4K und .eeprom : { . = ALIGN(4); *(.eeprom) . = ALIGN(4); } >EEPROM und im Header dann #define EEMEM _attribute_ ((section(".eeprom"))) EEMEM const uint8_t eepromArray[4095] ; Aber wenn ich versuche dies dan zu flashen, kommt es zu einem absturz des ST-Link_gdb_server.exe Aus spaß um die Syntax zuprüfen habe ich dann die Adresse auf EEPROM (rx) : ORIGIN = 0x08010000, LENGTH = 4K geändert, so das der Code nicht im EEPROM landet sondern im Flash speicher. Dies lies sich auch dann übertragen. Warum geht dies nicht im EEPROM?
Ok, sorry, dass war mein Fehler. Der EEPROM Wird soweit ich das gerade verstehe extra angesprochen und adressiert. Er wird vermutlich nicht für das reguläre Programm oder den Linkprozess verwenden. Du musst also entweder den Speicher über Pointer verwalten oder mit Speicher im Flash arbeiten, den du als Adressen definieren kannst. Soweit sehen deine Wege dafür richtig aus. So es ist bei mir halb eins. Ich werde mir das morgen noch einmal anschauen aber wenn ich es gerade richtig sehen sind das deine Optionen.
Das Problem was ich habe ist halt, das ich für das Projekt 1K des EEPROM verwenden muss und soll, da sehr veile Parameter in den EEPROM geschrieben werden müssen. Der nutzer kann dan von ausßen über UART das Gerät sehr stark parametrieren. Dafür soll eine große Struct angelegt werden, worüber dan der zugrief erfolgt und man sich die Adressen holen kann. Zudem hat der Flash nur eine begrenzt scheibzugriefe, nach diesen ist ja die ausfall Wahrscheinlichkeit sehr hoch, was beim EEPROM nicht der fall ist. Bei diesem leigen die maximalen Schreibzugriefe um den Faktor 10000 höher. Diese brauch ich auch. Da wollte ich nicht für hunderte Variablen Adressen vergeben. Das muss doch auch indirekt gehen über Variablen. Der EEPROM ist doch im selbem Adressraum wie der Flash und das auslesen funktioniert ja auch über einen Pointer. Oder habe ich über den ST-Link keinen direkten zugrief auf den EEPROM, da dieser dann ja auch abstürzt. Muss dieser noch dafür irgent wie konfiguriert werden. Wäre supper wenn es dafür neine Lösung gäbe. Oder wie macht ihr das, wenn sehr viele Daten in den EEPROM geschrieben werden müssen.
Uwe Ro. schrieb: > Oder habe ich über den ST-Link keinen direkten zugrief auf den EEPROM, > da dieser dann ja auch abstürzt. Muss dieser noch dafür irgent wie > konfiguriert werden. Die meisten Programmier-Tools können nur den Flash beschreiben, nicht den EEPROM. Was aber auch kein Beinbruch ist: Man reserviert sich ein Identifikationsword im EEPROM, und wenn das nicht den erwarteten Wert hat, dann initialisiert man das EEPROM mit den Default-Werten aus dem Flash. Man könnte zwar auch eigene Tools zum Programmieren schreiben - der Weg dürfte aber ziemlich weit und steinig werden...
Uwe Ro. schrieb: > Das Problem was ich habe ist halt, das ich für das Projekt 1K des EEPROM > verwenden muss und soll, da sehr veile Parameter in den EEPROM > geschrieben werden müssen. Der nutzer kann dan von ausßen über UART das > Gerät sehr stark parametrieren. Dafür soll eine große Struct angelegt > werden, worüber dan der zugrief erfolgt und man sich die Adressen holen > kann. > Zudem hat der Flash nur eine begrenzt scheibzugriefe, nach diesen ist ja > die ausfall Wahrscheinlichkeit sehr hoch, was beim EEPROM nicht der fall > ist. Bei diesem leigen die maximalen Schreibzugriefe um den Faktor 10000 > höher. > Diese brauch ich auch. > Da wollte ich nicht für hunderte Variablen Adressen vergeben. Das muss > doch auch indirekt gehen über Variablen. > Der EEPROM ist doch im selbem Adressraum wie der Flash und das auslesen > funktioniert ja auch über einen Pointer. > Oder habe ich über den ST-Link keinen direkten zugrief auf den EEPROM, > da dieser dann ja auch abstürzt. Muss dieser noch dafür irgent wie > konfiguriert werden. > Wäre supper wenn es dafür neine Lösung gäbe. veile Parameter für den nutzer von ausßen im zugrief mit eine begrenzt scheibzugriefe brauch ich irgent wie auch, Wäre supper.!
Jim Meba schrieb: > Was aber auch kein Beinbruch ist: Man reserviert sich ein > Identifikationsword im EEPROM, und wenn das nicht den erwarteten Wert > hat, dann initialisiert man das EEPROM mit den Default-Werten aus dem > Flash. Die Idee ist nicht schlecht, kann man machen, wenn man das Gerät auf Default zurücksetzen muss. Aber wenn der Nutzter werte ändert, müssen diese dann ja an die richtig EEPROM Adresse geschrieben werden und diese wollte ich über eine Variable (Struct) oranisieren, die mir die Adresse dan liefert. Kann man vielleicht die im Flash liegende Variable (Struct) als ausgangspunkt nutzen und einen Offset Wert für die Adresse diffinieren, das man somit in den EEPROM landet? Müsste doch auber auch einfacher gehen ohne Speicher im Flash zuverbrauchen.
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.