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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.