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


von Sebastian Z. (sz1985)


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

von Karl H. (kbuchegg)


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.

von Thomas E. (thomase)


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.

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.