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


von Sebastian (Gast)


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

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

> Wie kann ich das realisieren?

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

von Sebastian (Gast)


Lesenswert?

Wie geht denn das?

von Sebastian (Gast)


Lesenswert?

Gibt es da keinen Befehl in C?

von Sebastian (Gast)


Lesenswert?

Kann ich nicht mit Konstanten arbeiten?

von Hans W. (Firma: Wilhelm.Consulting) (hans-)


Lesenswert?

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

aja welcher compiler ?
welcher prozessor?

73

von Sebastian (Gast)


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.

von Karl H. (kbuchegg)


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.

von holger (Gast)


Lesenswert?

@ Sebastian

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

von Sebastian (Gast)


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.

von Karl H. (kbuchegg)


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.

von Sebastian (Gast)


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.

von holger (Gast)


Lesenswert?

>Der  Compiler arbeitet aber unetnlich lange.

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

von Sebastian (Gast)


Lesenswert?

Ne der Compiler versucht aus dem Quekkcode ein Programm zu erzeugen

von Karl H. (kbuchegg)


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?

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.