Forum: Mikrocontroller und Digitale Elektronik Array beliebiger Grösse


von Cman (Gast)


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?

von Harry L. (mysth)


Lesenswert?

Cman schrieb:
> Wie macht man das nun mit einem undefiniert grossen Array

verkettete Listen

von A. S. (Gast)


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.

von Toni Tester (Gast)


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.

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.