Forum: Mikrocontroller und Digitale Elektronik PIC32: Define ändern


von flownfluid (Gast)


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

von Sascha F. (sascha_focus) Benutzerseite


Lesenswert?

Hallo,

schau dir doch mal die Microchip Beispiele an. Die IP ist zwar im 
Header, aber es wird auch aus einem Eeprom ( oder auch interner Flash) 
eine andere IP gespeichert oder auch geladen.

Gruss Sascha

von Karl H. (kbuchegg)


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.

von flownfluid (Gast)


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

von Karl H. (kbuchegg)


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.

von Lehrmann M. (ubimbo)


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 !!!

von flownfluid (Gast)


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

von heinzhorst (Gast)


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.

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
Noch kein Account? Hier anmelden.