mikrocontroller.net

Forum: Compiler & IDEs 3D arrays auf ARM?


Autor: Alexander Poddey (alexatmikro)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich schreibe eine anwendung für einen arm prozessor ohne betriebssystem, 
also alles irq basiert.
für den datenaustausch mit dem pc brauche ich die fähigkeit, 
verschiedene 'datenformate' während der laufzeit festzulegen. dabei 
wären lauzeitalloziierbare, mehrdimensionale arrays nützlich.
ich habe bisher eine eigene methode für 2D arrays. da ich nun auch 3D 
(warum genau s.u.) verwenden müßte, würde ich ggf. auf eine bibliothek 
ausweichen, z.B.:
http://www.fz-juelich.de/zam/cv/tools/VarArray/

dynamische anforderung von speicher & interrupts is ggf. gefährlich, das 
hab ich aus dem letzen posting gelernt.
wenn ich mich aber an folgendes schema halte, dürfte es doch keine 
probleme geben - oder?:
ich habe eine 'hauptroutine', die alle daten verarbeitet und ggf die 
arrays alloziiert;
die irq serviceroutinen halte ich kurz, darin wird nichts alloziiert, 
sondern nur die anfallenden meßdaten in vorgesehene container 
gespeichert.
ein timer, der einen irq mit niedriger priorität auslöst, ruft die 
hauptroutine regelmäßig auf, falls sie nicht läuft.
die idee dabei ist, die timerintervalle später im betrieb so anzupassen, 
daß die daten noch 'rechtzeitig' verarbeitet werden, und der controller 
nach beendigung der verarbeitung schlafen geschickt werden kann um 
energie zu sparen.
(ich lege mir für die anfallenden daten einen kleinen ringpuffer an; 
stelle ich in der hauptroutine fest, daß dieser pro aufruf mehr als x% 
gefüllt ist, dreh ich die timerinterfalle runter und umgekehrt. fallen 
dann mal viele daten an, läuft der controller voll durch - und in 
ruhigen zeiten schläfter er mehr).


entschuldigt, das wird ein mörder-posting...

hier noch ein erklärungsversuch für den bedarf der 3d arrays (vielleicht 
gehts einfacher?):

je nachdem welche daten nach außen geschickt werden sollen, habe ich ein 
2d array data[nsetzs][n8bitbloecke] (ich codiere meine daten in 8 bit 
blöcke; bedarf ein format ein uint16_t und eine uint32_t, habe ich 6 
blöcke)

wenn ich nun z.B. 2 firmate zulasse, habe ich 2 solche arrays, wobei 
n8bitblöcke] unterschiedlich ist.
das format 'entsteht' ggf erst zur laufzeit (da der anwender 
entscheidet, welche daten er haben will).
ich würde nun eine routine newformat schreiben, die das anstprechende 
array anlegt, und eine int zurückgibt. mittels dieser int würde ich dann 
auf das array zugreifen:

also data[iformat][iset][iblock].


gruß
alex

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.