Hallo, ich habe einen LPC1115 µC, den ich mit LPCXpresso programmiere. Da diese Controller "nur" SRAM und Flash-Speicher (keinen EEPROM Bereich) besitzen, gibt es für die dauerhafte Speicherung von Daten die IAP Funtionen. Diese ermöglichen die Speicherung von Daten im Flash Speicher. Das Abspeichern und wieder aus dem Flash funktioniert (auch nach einem Spannungsausfall sind die Daten vorhanden) Nun ist allerdings mein Projekt gewachsen und scheinbar legt der Compiler Programmdaten in den Speicherbereich, den ich zum Speichern der Daten verwendet habe. Das darf natürlich auf keinen Fall passieren. Nun könnte ich mir jedes Mal die Speicherbelegung nachsehen und den Bereich der Daten verschieben, aber kann man dem Compiler nicht mitgeben, welche Speicherbereiche nicht beschrieben werden dürfen (also freibleiben müssen)? Eventuell habe ich auch einen Denkfehler drin, wäre nett, wenn ihr mich aufklären könnt. Grüße, Olli
Gast
#4845033
Oliver S. schrieb: > Hallo, > > Nun könnte ich mir jedes Mal die Speicherbelegung nachsehen und den > Bereich der Daten verschieben, aber kann man dem Compiler nicht > mitgeben, welche Speicherbereiche nicht beschrieben werden dürfen (also > freibleiben müssen)? > Das lässt sich per Linker-Script kontrollieren. Weiss aber nicht, ob LPCespresso das unterstützt
Gast
#4845145
Da gibt es ganz viele Wege. Im linker Script eine section erstellen und die Daten dort reinschreiben. Es gibt wahrscheinlich auch fertige Makros dafuer in LPCOpen. Oder im linker Script die Flashsize verringern und deine Daten dahin schreiben Oder ....
Hallo. Das funktioniert am leichtesten in den Projekteinstellungen in dem du die µC Einstellungen veränderst, siehe Anhang. Beachte, dass die IAP Funktionen auch das Ended des RAMs verwenden und es somit nicht vom restlichen Programm verwendet werden soll. (Bei mir ab 0x1000 1FE0) Ich verwende hier den Flash ab 0x0000 DFE0 für das Speichern von ein paar Parametern. Die Funktion dazu sieht so aus:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
42 | |
43 | |
44 | |
45 | |
46 | |
47 | |
48 | |
49 | |
Viel Erfolg, Christian_RX7
Gast
#4845169
Die MCU Settings hätte ich auch empfohlen. Das setzt voraus das du auch das 'Managed Linker Script' verwendest, also das LPCXpresso das selber generiert aus den MCU Settings. Und es setzt voraus das überhaupt noch genügend Flash frei ist. Der Code wächst üblicherweise von Flash Start nach Ende, wenn der jetzt schon in die Daten reicht dann wird der Linker meckern mit 'region text overflowed with xxxx bytes' dann musst du erstmal Code abspecken. Die code size wird üblicherweise nach erfolgreichem kompilieren angezeigt, das lässt sich also leicht ausrechnen ob noch genügend Platz ist.
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.
