Forum: Mikrocontroller und Digitale Elektronik Array befüllen


von Newbie (Gast)


Lesenswert?

Hallo zusammen,

bei meinem aktuellen Projekt muss ich den Mittelwert einer sehr sehr 
langsamen (0,2 Hz bis 1 Hz) harmonischen Schwingung ermitteln.

Ich lese einen Neigungssensor über den AD-Wandler ein und möchte nun wie 
folgt vorgehen:

- Maximum der Schwingung ermitteln,
- wenn Maximum gefunden Befüllen eines Arrays starten,
- Array so lange befüllen, bis Minimum ermittelt,
- Mittelwert ausrechnen.

Dieser Alorithmus dürfte funktionieren. Jedoch mein Problem dabei ist, 
dass ich die Abtastrate des AD-Wandlers immer gleich lassen möchte und 
somit bei unterschiedlicher Schwingungsdauer immer unterschiedlich viele 
Werte zwischen Maximum und Minimum habe.

Kann mir jemand von Anfang an erklären, wie ich ein Array deklariere und 
befülle, bzw. wieder auslese ohne dass ich weiß wie groß er ist/wird?

Danke und Gruß

von Timmo H. (masterfx)


Lesenswert?

Zwei möglichkeiten.
1. Array übergroß deklarieren. Also das Array fest auf die maximal 
mögliche Größe festlegen.
2. Malloc, realloc, free. Damit kannst du dynamisch neuen Speicher 
anfordern. Malloc gibt dir einen Speicherbereich einer gewünschten 
größe. Realloc erweitert schon vorhandenen Speicher und free gibt diesen 
wieder frei.

Allerdings ist die Lösung mit malloc etc. sehr langsam und sollte nur 
verwendet werden, wenn der Speicher knapp ist.

von Johannes M. (johnny-m)


Lesenswert?

Wozu brauchst Du überhaupt ein Array? Maximum und Minimum finden geht 
auch einfach mit zwei Variablen, wobei in eine Variable immer dann der 
aktuelle Wert übernommen wird, wenn er größer bzw. kleiner ist als der 
Wert, der schon drin steht. Und für den Mittelwert brauchste auch nur 
zwei Variablen, eine zum Aufaddieren aller Werte und eine Zählvariable, 
die mitzählt, wie viele Werte aufsummiert wurden. Das Addieren der Werte 
kann dann jeweils direkt nach der Erfassung gemacht werden...

von Timmo H. (masterfx)


Lesenswert?

Vielleicht will er ja auch dir Kurve noch im Speicher behalten oder so?

von Johannes M. (johnny-m)


Lesenswert?

Timmo H. wrote:
> Vielleicht will er ja auch dir Kurve noch im Speicher behalten oder so?
Hat er zumindest nix von gesagt...

von Til S. (Firma: SEGGER) (til)


Lesenswert?

"2. Malloc, realloc, free...."

Naja, prinzipiel nicht verkehrt, aber dann muss ich mir ja auch 
überlegen, wie groß mein Heap ist, damit das passt ;-). Und wenn ich mir 
schon diese Überlegung gemacht habe, kann ich das ganze doch auch lieber 
statisch machen.

Ich denke aber auch eher, das eine mathematische Mittelwertbildung 
einfacher ist, wie Johannes schon sagte brauchst du für eine 
arithmetische Mittelwertbildung die Werte nur aufsummieren und dann 
durch die Anzahl der Werte dividieren.

von Timmo H. (masterfx)


Lesenswert?

>> Vielleicht will er ja auch dir Kurve noch im Speicher behalten oder so?
>Hat er zumindest nix von gesagt...
Stimmt, hatte ich jedoch angenommen, da er schon mit nem Array anfing. 
Wahrscheinlich hat er daran gar nicht gedacht, dass man die 
Mittelwertbildung auch währenddessen machen kann. Wie dem auch sei

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.