mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Dynamisches Array


Autor: Student 08 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo ich beschäftige mich gerade mit dem 28035 Dsp von TI.Ich soll nun 
eine Routine schreiben welche CAN Nachrichten empfängt und in einem 
Array speichert.Eine Nachricht kann aus mehreren Teilen bestehen.Aus 
diesem Grund kann ich die Grösse meines Arrays nicht vorher 
festlegen.Kann mir irgend Jemand einen Tipp geben wie ich dies 
realisieren kann?
Besten Dank schon mal.

Autor: Manuel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
mit Zeigern? Ist aber nicht so trivial...

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Student 08 schrieb:
> Hallo ich beschäftige mich gerade mit dem 28035 Dsp von TI.

Schön.
Welche Programmiersprache?
Ich nehme mal C an.

> festlegen.Kann mir irgend Jemand einen Tipp geben wie ich dies
> realisieren kann?

Indem du in die nächste Buchhandlung gehst und dir ein C-Buch kaufst?
Im Ernst. Ich sag das nicht, weil ich dich ärgern will. Aber solche 
Dinge, und noch viele, viele mehr, stehen in jedem C Buch drinnen.

Wenn du weiterhin programmieren willst, wirst du um den Ankauf von 
Literatur nicht umhinkommen (das gilt wieder für alle 
Programmiersprachen).

Autor: Olaf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann muesstest du das das Array zur Laufzeit anlegen indem
du dir mit malloc Speicher vom Heap besorgt. Das sind aber
eigentlich C Grundlagen die in jedem Buch stehen duerften.

Allerdings frage dich mal warum man das macht und was dein
Prozessor machen soll wenn er Speicher anfordert und keiner
da ist. Swappt er dann auf eine SD-Karte? Wird ein kleiner
Motor eingeschaltet der eine rote Fahne schwenkt? :-)

Es ist bei Microcontrollern IMHO guenstiger wenn man sich
vorher klarmacht wie gross ein Array maximal werden kann
und das statisch allokiert. Schliesslich musst du dir
deinen Speicher ja nicht mit anderen Programmen teilen
und das vermeidet spaeter VIEL Stress.

Olaf

Autor: Arne (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Array kann ja nicht beliebig groß werden (wg. endlicher Speicher). 
Wie wäre es, wenn Du einen Ringpuffer mit Zeigern auf Speicherbereiche 
anlegst, die dann per malloc allokiert werden? In diese 
malloc-Speicherbereiche kannst Du ja eine eigene Struktur für die 
CAN-Nachrichten legen. Irgendjemand muss ja auch die CAN-Nachrichten 
abarbeiten?
Wobei ich dyn. Speicherallokierung auf einem embedded Target nicht für 
sonderlich knusprig halte! Wir hatten sowas mal mit 1-2MB SRAM gemacht 
und dann einen eigenen Speichermanager geschrieben, der auch sog. 
Handles (gibts m.W. bis MacOS9 auch) anfordert, deren Speichersegment 
dann im SRAM verschiebbar war, um Fragmentierung zu umgehen. Läuft aber 
schlecht bis gar nicht mit preemptiven RTOS zusammen.

Autor: Marko B. (glagnar)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Linked List?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Marko B. schrieb:
> Linked List?

Hoffentlich aber aus einem statischen Array heraus.
dynamische Allokierung mit malloc möchte man in einem kleinen µC 
eigentlich nicht haben. Dann schon lieber die Pest.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.