Array beliebiger Grösse

Gast #5624249
Lesenswert?

Hi

Ich experimentiere ein wenig in C.
Jetzt möchte ich zum einen wissen, wie man das als "Programmierer" 
vorgeben kann, ob ich nun ein definiertes Array oder sonst eine Variable 
in den ROM oder in den RAM schreiben möchte. Gibt es da einen Befehl 
dafür?


Dann habe ich ein anderes Problem und zwar habe ich zB 4 Grössen.
Ich bilde zwei Differenzen von je einem Paar, zB Diff1, Diff2.

Jetzt möchte ich mit einem Potentiometer zB ein Band durchfahren, bei 
dem sich unterschiedliche Diffs ergeben. Diese möchte ich mit einer 
Grafik in Matlab oder Ähnliches auswerten und vergleichen.
Wie macht man das nun mit einem undefiniert grossen Array und wie kann 
man es bewerkstelligen die Werte anschliessend in einem Textfile 
auszugeben?
Gast #5624264
Lesenswert?

Maximalplatz reservieren (malloc oder ein Array von xBytes statisch 
anlegen) und dann mit Pointer drauf herummachen.

Zu Textfiles siehe FILE. Einfacher: mit printf (console Anwendung) 
rauspusten und per > in eine Datei umleiten.
Gast #5624281
Lesenswert?

Cman schrieb:
> Jetzt möchte ich zum einen wissen, wie man das als "Programmierer"
> vorgeben kann, ob ich nun ein definiertes Array oder sonst eine Variable
> in den ROM oder in den RAM schreiben möchte. Gibt es da einen Befehl
> dafür?

Das hängt von der eingesetzten Architektur ab. Auf der 
Von-Neumann-Architektur basierende µCs haben naturgemäß nur einen 
Adressraum für ROM und RAM; damit muss man dem Compiler/Linker explizit, 
wie auch immer, mitteilen, welcher Speicherbereich was ist. Demgegenüber 
gibt es bei der Harvard-Architektur getrennte Adressräume für Programm 
und Daten, was in unterschiedlichen Maschinenbefehlen für den 
Speicherzugriff resultiert. Da C nun aber historisch bedingt nur einen 
Adressraum "kennt", bietet z. B. auf AVRs die AVR-libc entsprechende 
Mechanismen, um auf den Programmspeicher zugreifen zu können bzw. mit 
dort hinterlegten "Variablen" zu arbeiten: 
https://www.nongnu.org/avr-libc/user-manual/group__avr__pgmspace.html

Cman schrieb:
> Jetzt möchte ich mit einem Potentiometer zB ein Band durchfahren, bei
> dem sich unterschiedliche Diffs ergeben. Diese möchte ich mit einer
> Grafik in Matlab oder Ähnliches auswerten und vergleichen.
> Wie macht man das nun mit einem undefiniert grossen Array und wie kann
> man es bewerkstelligen die Werte anschliessend in einem Textfile
> auszugeben?

"Undefiniert/beliebig gross" ist speziell auf µCs schwierig, da, 
physikalisch bedingt, irgendwann der (Arbeits-) Speicher voll ist.
Warum müssen die Daten zuerst im RAM in einem Array gepuffert werden; 
kann man diese nicht sequentiell berechnen und direkt ausgeben/in die 
Textdatei schreiben?
Anderenfalls: Verkettete Listen wurden schon genannt; besitzen gerade 
auf µCs wieder den Nachteil, dass man für die Pointer zusätzlichen 
(ohnehin schon knappen) Speicherplatz reservieren muss.
Und dynamische Speicherreservierung á la malloc/realloc/new geht 
natürlich auch nur so lange gut, wie entsprechender freier Speicherplatz 
zum Reservieren vorhanden ist.
=> Genügend großen zusammenhängenden Speicherbereich von vorne herein 
reservieren; falls notwendig, einen Ringpuffer o. ä. implementieren.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren