Forum: Compiler & IDEs 3D arrays auf ARM?


von Alexander P. (alexatmikro)


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

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.