Forum: Compiler & IDEs Initial Value für globales Array (PIC32-GCC)


von Peter (Gast)


Lesenswert?

Hallo

Ich programmiere einen PIC32 mit PIC32-GCC. Ich habe ein globales Array 
aus unsigned chars welches ich mittels attribute in einer von mir 
angelegten Section ablege:
1
static unsigned char u8testArray[256] __attribute__ ((section (".TestArraySection")))
Gibt es nun eine Möglichkeit dieses Array resp. diesen Memory-Bereich 
mit Werten zu füllen die das Array nach dem Start-Up hat ohne = {0xFF, 
0xFF, ...} zu schreiben? Dies würde zwar funktionieren (ich habe dann im 
Hex-File für diesen Memory-Bereich die gwünschten Werte), sieht aber im 
Code nicht schön aus und brauch viel Platz.

Peter

von Volker Z. (vza)


Lesenswert?

zur Laufzeit mit memset

Volker

von Peter (Gast)


Lesenswert?

Das geht leider nicht da ich diesen Bereich nur einmal nach dem 
Programmieren so gesetzt haben möchte. Er wird anschliessend geändert 
(ist im Flash) und sollte dann auch beim nächsten Start so bleiben. 
Klar, mann könnte eine Überprüfung einbauen aber da nicht klar ist was 
da für Daten reinkommen ists unter Umständen heikel.

Peter

von Karl H. (kbuchegg)


Lesenswert?

Peter schrieb:
> Das geht leider nicht da ich diesen Bereich nur einmal nach dem
> Programmieren so gesetzt haben möchte. Er wird anschliessend geändert
> (ist im Flash) und sollte dann auch beim nächsten Start so bleiben.
> Klar, mann könnte eine Überprüfung einbauen aber da nicht klar ist was
> da für Daten reinkommen ists unter Umständen heikel.

Dann mach dir noch ein zusätzliches Byte rein, welches deinem Programm 
mitteilt, ob es initialisieren soll oder nicht. Dieses Byte 
initialisierst du ganz normal (in einer ganz normalen Section) und 
fertig.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Peter schrieb:
> Er wird anschliessend geändert
> (ist im Flash) und sollte dann auch beim nächsten Start so bleiben.

Flash ist aber initial ohnehin 0xFF.

von Peter (Gast)


Lesenswert?

Jörg Wunsch schrieb:
> Flash ist aber initial ohnehin 0xFF.

Ja normalerweise schon, wenns leer ist. Im Bereich, in den ich die 
Struktur lege ists aber 0, da wahrscheinlich die Struktur 0 als initial 
value hat. So nehme ich das jedenfalls an. Ich kann sehen, dass dort wo 
die struct liegt das Flash als Inhalt 0 hat und danach (falls die 
Section grösser als die struct ist) ists dann 0xFF.

von Volker Z. (vza)


Lesenswert?

Ah Ja.
Die Informationen kommen wieder Scheibchenweise.

Lösung 1: ( Karl heinz Buchegger) mit einem Flag im Flash.
Lösung 2: Mit einer Checksumme (z.B. CRC).

Auf jeden Fall solltest du das Kapitel über die Flash-Programmierung von 
deinem µC mal genauer durchlesen.

Volker


p.s. Bei weiteren Informationen giebt es auch mehr Tips. Dies ist direkt 
proprtional.

p.p.s  Soll das ein Bootloader werden?

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Peter schrieb:
> Ja normalerweise schon, wenns leer ist. Im Bereich, in den ich die
> Struktur lege ists aber 0, da wahrscheinlich die Struktur 0 als initial
> value hat.

Dann versuche deine Tools zu überzeugen, dass er deine Variable
nicht initialisiert.  Ich weiß nicht, wie das beim PIC-GCC gelöst
ist, beim AVR-GCC könnte man sie als
1
__attribute__((section(".noinit")))

deklarieren und der Linkerscript würde sie dann so platzieren, dass
für sie keine Initialisierung durchgeführt wird.

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.