mikrocontroller.net

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


Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
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

Autor: Volker Zabe (vza)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
zur Laufzeit mit memset

Volker

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Volker Zabe (vza)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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
__attribute__((section(".noinit")))

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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.