Hallo zusammen,
ich habe einen kontinuierlichen Strom an Messwerten und möchte mir aus
diesen einen gleitenden Durchschnitt errechnen. Habe mir dazu einen
Vektor mit den Werten angelegt und bilde über diesen den Mittelwert -
bei einem neuen Messwert wird der älteste entfernt und der neue
hinzugefügt.
So weit so gut. Da es aber eigentlich 3 Messdatenströme mit long Werten
sind und die Mittelwerte am besten über ca. 500 Werte gebildet werden
ist das schon eine Menge Speicherbedarf.
Der MSP430FG439 hat 2kB RAM und da ich die Vektoren mit den Messwerten
als globale Variablen speicher scheint es ein Problem mit dem RAM zu
geben. Zumindest gibt mir die IAR Workbench ab ca. 150 Messwerten zur
Mittelung beim Linken folgende Fehlermeldung:
1 | Error[e16]: Segment DATA16_Z (size: 0xb18 align: 0x1) is too long for segment definition. At least 0x31a more bytes needed. The problem occurred while
|
2 | processing the segment placement command "-Z(DATA)DATA16_I,DATA16_Z,DATA16_N,DATA16_HEAP+_DATA16_HEAP_SIZE=0200-09FF", where
|
3 | at the moment of placement the available memory ranges were "CODE:201-9ff"
|
4 | Reserved ranges relevant to this placement:
|
5 | 200-9ff DATA16_I
|
Das beste wäre es den RAM zu entlasten - aber wie kann ich das machen?
Auf andere Berechnungs-Methoden wie z.B.:
MW(n+1) = ( MW(n) * (N-1) + x(n) ) / N
möchte ich eigentlich nicht zurückgreifen.
Wäre toll, wenn jemand eine Idee dazu hätte.