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