www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Hilfe bei Initialisierung eines großen Arrays


Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo @ all

Ich will ein Bild auf einem LCD-Display ausgeben. Dieses Bild liegt als 
BMP vor. Das Bild ist 320x240 Pixel groß genau wie das Dipslay. Deshalb 
will ich ein Array erzeugen, das die Pixelinformationen (die Farben) 
enthält. Demnach muss das Array 76800 Elemente besitzen.

mein Quellcode sieht wie folgt aus:

unsigned int Bilddaten[] = {0xA4232342, 0x32738237, 0x87628273, ...};

Nun soll das Array aber nicht in irgendeinen Speicherbereich geschrieben 
werden, sondern in einen bestimmten.

Die Startadresse ist 0x20005000;

Wie kann ich das realisieren?

Grüsse

Sebastian

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Wie kann ich das realisieren?

Indem Du das Array in ein eigenes Segment packst und per Linkerskript 
dessen Adresse festlegst.

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie geht denn das?

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gibt es da keinen Befehl in C?

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kann ich nicht mit Konstanten arbeiten?

Autor: Hans Wilhelm (hans-)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
c legt dir nicht fest wo was steht.. das macht der linker...

aja welcher compiler ?
welcher prozessor?

73

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich verwende den IAR-Compiler (Demoversion). Als µC habe ich den 
AT91SAM9263.

Bei einem Pointer geht es aber. Ich kann ja einen Pointer erzeugen und 
ihm die Adresse, auf die der Pointer zeigt, zuweisen.

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

Bewertung
0 lesenswert
nicht lesenswert
Sebastian wrote:
> Ich verwende den IAR-Compiler (Demoversion). Als µC habe ich den
> AT91SAM9263.
>
> Bei einem Pointer geht es aber. Ich kann ja einen Pointer erzeugen und
> ihm die Adresse, auf die der Pointer zeigt, zuweisen.

Und, was bringt dir das?
Nur weil du einen Pointer hast und dem eine Adresse zuweist, heist
das ja noch lange nicht, das dann der Speicherbereich an dieser
Adresse reserviert wird. (*)

Merke: Du musst mit dem System arbeiten, nicht dagegen!

Speicherreservierungen für globale Variablen macht nun mal der
Linker. Also muss man mit dem Linker arbeiten und ihm sagen, wo
man den einen bestimmten Speicherbereich gerne hin hätte.

(*) Ausnahme: wenn der Speicher in einem externen EEPROM liegt,
so dass du die volle Kontrolle über diesen Speicher hast und auch
Compiler/Linker nichts von diesem Speicher wissen, dann kann
man das so machen: Pointer und dem die Adresse zuweisen.

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Sebastian

Was soll es eigentlich bringen wenn du das Array
auf eine bestimmte Adresse festnagelst ?

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe auf dem Demo Board einen großen externen Speicher. Dort kann 
ich ein großes Array anlegeden, dass dann meine Bilddaten enthält. Bis 
jetzt habe ich in diesen externen Speicher mit Hilfe einer For-Schleife 
einen Farbwert reingeschrieben. Somit erscheint auf dem Display ein 
großes Rechteck. Jetzt möchte ich aber ein Bild auf dem Display 
ausgeben. Hierzu wollte ich ich ein Array anlegen.

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

Bewertung
0 lesenswert
nicht lesenswert
Sebastian wrote:
> Ich habe auf dem Demo Board einen großen externen Speicher.

Weiss der Compiler von diesem Speicher?

Wenn nein, dann kannst du das mit dem Pointer so machen.

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der  Compiler arbeitet aber unetnlich lange. Ich habe ein For.Schleife 
erzeugt, die Adresse x den 1. Wert schreibt, dann die Adresse 
incrementiert und anschließend den nächsten Wert reingeschriebn. Dafür 
braucht der Compiler unendlich lange.

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Der  Compiler arbeitet aber unetnlich lange.

Der Compiler ? Oder meinst du das das Programm sich aufhängt ?

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ne der Compiler versucht aus dem Quekkcode ein Programm zu erzeugen

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

Bewertung
0 lesenswert
nicht lesenswert
Sebastian wrote:
> Ne der Compiler versucht aus dem Quekkcode ein Programm zu erzeugen

Da der Compiler nichts von diese Speicher weiss, musst du dir
was anderes ausdenken, wie du dein Bild dorthin bekommst.

Oder versuchst du gerade dieses: Ein Programm zu schreiben
welches diesen externen Speicher mit dem Bild lädt?

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.