www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik in C eine feste Adresse vegeben


Autor: Christian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!
Eine Frage: Wie kann ich einem Array in C eine feste Adresse in meinem
Flash Speicher vergeben?

unsigned char array[10]; // soll z.b. an Adresse 0x046E

Danke

Autor: Oryx (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Christian,

unsigned char* test = (unsigned char*)0x046E;

int main(void)
{
  test[2] = 7; // Die 7 sollte bei Adresse 0x0470 stehen
}

Aber aufpassen, ob der Controller überhaupt mit einem Datenpointer auf
den Flash zugreifen kann.

Weiterere Nachteile: sizeof hat nicht die Längeninformation.

Bei solchen Ansätzen sollte man genau wissen, was man macht. Die
Speicherverwaltung geht am Compiler vorbei. Die Speicherstellen sind
nicht initialisiert.

Wenn es geht, sind solche Ansätze zu vermeiden.

Viel Spass
Oryx

Autor: schneidertobi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
sowas muss ich staendiog machen, wenn ich auf mein externes ram
zugreifen will. Denn wenn ich z.b. ein großes array direkt in c
deklariere

unsigned char buffer[240*8];

dann setzt mir der AVR-GCC das direkt hinter die anderen variablen im
ram. Das bedeutet bei solch großen feldern natuerlich, dass er mir
damit auch den internen stack ueberschreibt, den ich ja wegen der
geschwindigkeit moeglichst im internen ram haben mochete.

Tobias

Autor: Jörg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann lies Dir mal die Doku durch, wie man es schafft, daß nur die
Variablen und/oder nur der Heap im externen Speicher landet, während
der Stack natürlich nach Möglichkeit intern bleiben sollte (schon aus
Geschwindigkeitsgründen).

Autor: Christian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke erstaml für die Antworten!
Glaub so gehts nicht!
Mein Array wird in einer Headerdatei angelegt, aber komischerweise
beginnt es immer an einer ungeraden Adresse(Wortmitte)!
Es soll aber am Wortanfang und darum an einer geraden Adresse
beginnen!
Verständlich? Hoffe ja!

Autor: Oryx (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Christian,
ich hoffe mal, das ich das falsch verstanden habe.

Wie wird ein Array in einer Headerdatei angelegt?
Welcher Controller?
Welcher Compiler?

Noch eine Kleinigkeit für das allgemeine Verständnis. Was soll das
ganze eigentlich. Ist dein Ansatz evtl. so richtig daneben?

Oryx

Autor: Christian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Texas MSP430F149 und der IAR C Compiler!
Hab den Quellcode und muss den jetzt ändern! Ja doch das Array wird in
der Headerdatei angelegt. Denke schon dass das richtig ist! Aber immer
an einer ungeraden Adresse! Soll aber gerade sein!

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.