Forum: Mikrocontroller und Digitale Elektronik konstante an einer absoluten Adresse ablegen (PIC32)


von Micha (Gast)


Lesenswert?

hallo Leute,

weiss jemand wie man Konstanten an bestimmte Zellen im Flash (PIC32) 
speichern kann?

Gruß

von Winfried J. (Firma: Nisch-Aufzüge) (winne) Benutzerseite


Lesenswert?

ja

von Micha (Gast)


Lesenswert?

wäre dann sehr dankbar wenn du es mir verraten kannst!

Gruß

von Winfried J. (Firma: Nisch-Aufzüge) (winne) Benutzerseite


Lesenswert?

Dazu müsstet du erst mal damit rausrücken  ob du Assembler C oder Basic 
benutzt um das Ding zu programmieren, meine Kristallkugel ist nämlich 
seit 5 Jahren in der Werkstatt und die bekommen das nicht hin ;-)

von Micha (Gast)


Lesenswert?

ich habe Pic32 erwähnt, also microchip, und wird mit C progrtammiert

von Winfried J. (Firma: Nisch-Aufzüge) (winne) Benutzerseite


Lesenswert?

o.k. vielleicht hilft dir das hier weiter

http://www.sprut.de/electronic/pic/grund/eeprom.htm

obwohl es sich noch auf die 16er bezieht dürfte die stategie noch die 
Gleiche sein nur mit längere Adresse halt im besonderen solltest du das 
Datascheet des prozessors konsultieren.


In Assembler ist ein dirkter Speicherzugriff normal nicht so in 
Hochsprachen

Basic böte noch Peek und Poke

In C ist das Schon Komplizierter hier sorgt sich normaler weise der 
Compiler um soetwas. Die Hintertür ist die Verwendung von Zeigern in 
welche man direkt die Adresse schreibt. aber vorsicht der Compiler weiß 
davon nichts und das kann zum Programmbsturz führen.
ansonsten bliebe Inline-Assembler

von (prx) A. K. (prx)


Lesenswert?

Der Linker kann's auch, jedenfalls der GNU-Linker vom C32. Muss man nur 
im Linker-Script rumfroschen, dann kann man dafür sorgen, dass die Daten 
exakt an der richtigen Stelle liegen und der Linker nicht Sonstwas dort 
plaziert. Ist halt eine eigene "Programmiersprache", dieses Zeug vom 
Linker-Script.

von Micha (Gast)


Lesenswert?

Genau, der Linker ist es, kriege aber irgendwie die .rodata nicht auf 
meiner section verschoben.

Solle eigentlich nur die Firmware-Version (const) für meinen Bootloader 
sein, wird aber zusammen mit der App .rodata platziert.

Gruß

von (prx) A. K. (prx)


Lesenswert?

Wird vermutlich einfacher, wenn du diese Variable in einer separaten 
Section plazierst. Siehe "__attribute__" im GCC Manual. Musst dann im 
Linker-Script nur diese spezielle Section an die richtige Stelle legen, 
nicht .rodata.

von Micha (Gast)


Lesenswert?

jep, das ist es  _attribute_ ((section ("BOOTLOADER"))), muss nur an 
der richtigen Stelle platziert.

vielen dank an beide.

Gruß

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.