Forum: Mikrocontroller und Digitale Elektronik Arraygröße zur Laufzeit ändern oder anders lösen?


von Chris T. (chris0086)


Lesenswert?

Hallo Leute, ich melde mich mal wiede weil ich eine Denkblockade habe 
und nicht weis wie ich das Problem am besten angehen soll.
Folgende Ausgangssituation:
Über ein PC Programm wird ein Mikrocontroller in dem sinne Programmiert, 
ds er später, wenn er an einer Steuerung hängt, dort Daten abfragt. 
Welche Daten das dann sind und diverse Umrechnungsfaktoren, das wird 
alles vorher im PC programmiert und dann übertragen.
Jetzt ist es so das ich mehr oder weniger Daten später ausgewertet haben 
will.
Auf den PC Programm hab ich ein dynamisches Array was je nachdem, 
wieviel Daten ich übertragen haben will größer oder kleiner ist.
Da ich dieses Array dann auf den MC übertragen muss(es muss dann 
irgendwo om ROM oder Flash abgelegt werden) und der dann auf die Daten 
zugreifen muss und verarbeiten muss, weis ich jetzt nicht wie ich die 
Arraygröße definiere oder einen komplet anderen Weg gehe? Wie mach tihr 
das?

Bei Initialisierung einfach bei Definition der Arraygröße einen Wert aus 
dem ROM lesen für die Arraygröße geht nicht oder? es muss schon bei der 
Programmierung feststehen oder irre ich mich?
also :
1
integer Array[Groesse_aus_ROM];
 geht nicht oder?
Wäre für Hilfe dankbar.
Grüße Christian

von tc0 (Gast)


Lesenswert?

Moin,

wie wäre es mit der Verwendung von malloc() & free()?

von Mark B. (markbrandis)


Lesenswert?

Daten, die erst zur Laufzeit übertragen werden, wird man wohl kaum in 
den Flash-Speicher schreiben. Sondern ins RAM. Wie oben schon gesagt, 
kann man mit malloc() und free() arbeiten. Oder man kann ein Array 
fester Größe anlegen, das Größe hat welche maximal erforderlich ist, und 
dann benutzt man soviel davon wie man eben braucht.

von cskulkw (Gast)


Lesenswert?

Entweder allozierst Du mit den üblichen alloc() auf dem Heap Deine 
Array-Elemente und kettest Sie einfach per Pointer aneinander. Das 
könnte zur Laufzeit geschen. Dieser Weg ist nur sinnvoll, wenn ersten 
ein SW-Mechanismus den globalen Heap-Verbrauch überwacht und ggf. 
weitere Allozierungsgesuche nicht durchführt, damit der MCU noch 
arbeitsfähig bleibt. Wichtig: Nicht mehr benötigte Array-Element mit 
free() wieder freigeben. Dieses hat mit einem mega8 vielleicht eher 
wenig Sinn.

Ein mega2560 mit 8 kB RAM verkraftet so etwas schon eher.

Die andere Variante wäre das Speichern der Daten auf einem externen 
EEPROM. Das ist zwar langsam, aber so kannst Du kaskadiert entsprechend 
viel Speicherplatz physikalisch verfügbar machen. Naja, eine Verwaltung, 
wie auch immer geartet, muß her.

Das Programmieren des Flashs (ROM) während der Laufzeit mit Daten 
verstehe ich nicht, wenn Du es so gemeint hast. Weil dann der MCU in 
einem anderen Modus wäre.

Generell ist es eher ungeschickte, Datenstrukturen des PC auf MCUs 
abzubilden. Vielleicht solltest Du die Aufgabe Datenerfassung auf den 
MCU verlagern und das sammeln, sortieren und packen auf den PC.

Ich hoffe, dass diese Gedanke Dir wie auch immer weiterhelfen.

...

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.