mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AVR: dimensonslosen Array in RAM anlegen


Autor: Sebastian Z. (sz1985)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

ich habe aktuell in meinem Programm für den Atmega 32 ein Array vom Typ 
int  mit einer festen Größe definert. Dieses Nutze ich als Register um 
Daten mittels Modbus RTU auszutauschen.
Da ich jetzt weiter Datentypen austauschen möchte, habe ich mir die 
Frage gestellt, ob es nicht möglich ist ein array ohne feste Größe zu 
deklarieren und mittels Adresszuweisung direkt auf eine feste 
Speicheradresse im RAM zu legen (z.B. Adresse 0x200), damit ich es über 
einen Pointer abrufen kann. Dann ein weiteres array mit einem anderen 
Datentyp anzulegen und ihm RAM auf die Speicheradresse 0x300 zu legen. 
Das ganze würde ich dann gerne mit nur einem Pointer abfragen und je 
nach Adresse den entsprechenden Wert (Datentyp) zu speichern bzw. 
abzufragen.

Ist das irgendwie möglich??

Vielen Dank im Vorraus.

Gruss

Sebi

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

Bewertung
0 lesenswert
nicht lesenswert
Sebastian Z. schrieb:

> Da ich jetzt weiter Datentypen austauschen möchte, habe ich mir die
> Frage gestellt, ob es nicht möglich ist ein array ohne feste Größe zu
> deklarieren

nein.
Alles muss eine Größe haben.
Man könnte das Array zur Laufzeit allokieren, aber auch dann muss es 
eine Größe haben.
Allerdings: dynamisch Allokieren willst du auf kleinen µC nicht 
wirklich.

> und mittels Adresszuweisung direkt auf eine feste
> Speicheradresse im RAM zu legen (z.B. Adresse 0x200), damit ich es über
> einen Pointer abrufen kann. Dann ein weiteres array mit einem anderen
> Datentyp anzulegen und ihm RAM auf die Speicheradresse 0x300 zu legen.

Wenn das eine Array auf Adresse 0x200 und das andere auf Adresse 0x300 
liegt, dann sind da 0x100 Bytes dazwischen und bei 2 Byte pro int hast 
du daher 0x50 int angelegt. Du hast also nichts anderes getan, als die 
Größe des Arrays maximalkompliziert zu verstecken.


> Das ganze würde ich dann gerne mit nur einem Pointer abfragen und je
> nach Adresse den entsprechenden Wert (Datentyp) zu speichern bzw.
> abzufragen.
>
> Ist das irgendwie möglich??

Sieh dir in deinem C-Buch das Kapitel über struct und union an.
Insbesondere letzters dürfte das sein, wonach deine Frage klingt.

Autor: Thomas Eckmann (Firma: Thomas Eckmann Informationst.) (thomase)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Grundsätzlich geht das. Nur deine Umsetzungsidee ist etwas merkwürdig.
Lies dir mal im Tutorial unter "Speicherzugriffe" den Abschnitt "RAM" 
durch. Da steht drin, wie man das richtig macht.

mfg.

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.