PIC32: Define ändern

Gast #2632499
Lesenswert?

allo zusammen,

ich habe angefangnen ein wenig mich mit dem PIC32MX795F512L sprich mit 
dem Ethernet Starter Kit zu beschäftigen.
Bis jetzt habe ich es geschaft einen TCP Server zum laufen zu bringen 
und mein kleines Protokol zu implementieren.

Nun möchte ich über das Protokoll dem PIC eine neue statische IP Adresse 
senden diese im PIC speichern und der PIC neu starten...

Auf PIC Seite
Schritt 1 : neue IP Adresse empfangen --> erledigt
Schritt 2 : IP Adresse speichern --> ???
Schritt 3 : Reboot des PIC's --> reicht ein Aufruf der Funktion 
SoftwareReset(); ?


Zu Schritt2
Momentan habe ich die IP Adresse in einem config.h File unter
1
#define IP_ADDR_BYTE1        (192ul)
2
#define IP_ADDR_BYTE2        (168ul)
3
#define IP_ADDR_BYTE3        (200ul)
4
#define IP_ADDR_BYTE4        (111ul)
konfiguriert und nun müsste ich irgendwie die DEFINES überschreiben... 
oder welcher Lösungsansatz gäbe es da?

Vielen Dank schon mal im voraus
#2632532
Lesenswert?

flownfluid schrieb:

> Zu Schritt2
> Momentan habe ich die IP Adresse in einem config.h File unter
>
1
> #define IP_ADDR_BYTE1        (192ul)
2
> #define IP_ADDR_BYTE2        (168ul)
3
> #define IP_ADDR_BYTE3        (200ul)
4
> #define IP_ADDR_BYTE4        (111ul)
5
>
> konfiguriert und nun müsste ich irgendwie die DEFINES überschreiben...
> oder welcher Lösungsansatz gäbe es da?

#define umschreiben ist schon mal nicht.
Schau dir die Stelle an, wo das Zeug verwendet wird. Dort musst du den 
Hebel ansetzen. Mit IP_ADDR_BYTE1 wird ja im Programm etwas gemacht. 
Dort ist dein Eingreifpunkt.
Gast #2632559
Lesenswert?

Vielen Dank,

vielleicht habe ich mich ein wenig falsch ausgedrückt.

Wo kann ich Informationen dauerhaft speichern und wieder verändern. Das 
heisst wenn ich eine neue IPAdresse speichere soll diese auch bei 
Stromausfall noch vorhanden sein...

Ich kann momentan die Adresse temp. speichern und nachher in meinem Code 
verwenden und alles jedoch weiss ich nicht wie und wo ich diese im 
Speicher ablegen kann damit diese immer gültig bleibt.

Vielen Dank und hoffe nun ist es ein wenig klarer
#2632563
Lesenswert?

flownfluid schrieb:

> Wo kann ich Informationen dauerhaft speichern und wieder verändern.

So wie jede andere Information auch, die persistent gehalten werden 
muss: EEPROM oder Flash.

> Ich kann momentan die Adresse temp. speichern und nachher in meinem Code
> verwenden und alles jedoch weiss ich nicht wie und wo ich diese im
> Speicher ablegen kann damit diese immer gültig bleibt.

Und damit verweise ich auf Saschas Antwort weiter oben.
#2632621
Lesenswert?

Karl Heinz Buchegger schrieb:
> flownfluid schrieb:
>
>> Wo kann ich Informationen dauerhaft speichern und wieder verändern.
>
> So wie jede andere Information auch, die persistent gehalten werden
> muss: EEPROM oder Flash.

Wobei der EEPROM für genau diese Aufgaben gemacht ist. Die Speicherung 
im Flash ist eigentlich nur bei geschwindigkeitskritischen Anwendungen 
von Vorteil. Für Kalibrationswerte, etc verwendet man (schon immer TM) 
den EEPROM.

flownfluid schrieb:
> und nun müsste ich irgendwie die DEFINES überschreiben...
> oder welcher Lösungsansatz gäbe es da?

Das ist natülich nicht in diesem Sinne möglich. Ein Define ist eine 
Präprozessoranweisung und die wird nur 1x beim compilieren ausgeführt. 
z.B.
#define LED1 LATAbits.LATA0
Das bedeutet dem Compiler (nur einmal beim kompilieren): "Ersetze alle 
Stellen im Quelltext an denen "LED" steht durch "LATAbits.LATA0" und 
kompiliere dann. Nachdem das nur einmal ausgeführt wird, kann man es 
natürlich nicht verändern und im Betrieb schon garnicht. Nur neu 
compilieren würde helfen. BACKGROUNDWISSEN !!!
Gast #2632853
Lesenswert?

Vielen Dank für eure Antworten...

Da ich sowieso noch einen Bootloader einbauen muss/darf/will, geht das 
ca. ins gleiche. Werde mich mal zuerst in Sachen PIC und 
Speichermanagement einlesen und mich dann bei Unklarheiten noch einmal 
hier melden.

Dank und Gruss
Gast #2633138
Lesenswert?

Ich gehe jetzt mal davon aus, dass du den TCP-Stack von Microchip 
verwendest. Die Defines in der tcpip.h geben nur die Default-Werte an. 
Die werden nur einmalig in der Init verwendet. Und das auch nur, wenn 
die Werte im SPI-EEPROM ungültig sind (sofern du eins angeschlossen und 
die Defines für die SPI-Pins gesetzt hast). Ansonsten musst du nur zur 
Laufzeit die entsprechenden Variablen und der ApConfig-Struktur 
verändern. Zur Laufzeit werden natürlich nicht die statischen Werte aus 
dem Define verwendet, sondern die IP-Adressen aus dem RAM.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren