Hallo zusammen,
ich versuche gerade einen eigentlich recht einfachen Codeschnipsel
fertig zu bekommen und habe dabei gemerkt, dass mir offensichtlich an
einer essenziellen Stelle C-Kenntnis fehlt.
Ziel: Es gibt ein Array namens "Window" aus den aktuellsten drei
elementen eines ADWandlers. Eine funktion aktualisiert diese mit neuen
werten. Eine funktion bildet den Rang2 Median und gibt ihn aus.
Nun möchte ich, dass die Update-Funktion das im speicher feststehende
window ändert, das Medianfilter beim Sortieren aber gerade nicht das
ursprüngliche Window verändert, damit in jeder stufe die aktuellsten
drei werte genommen werden.
Mein Code:
1 | uint16 new_value = adcValue0;
|
2 | static uint16 window[3] = {0,0,0};
|
3 |
|
4 |
|
5 | void update_window (uint16 new_value, uint16 window[]) // fügt neuen Wert nach FiFo Prinzip hinzu
|
6 | {
|
7 | window[2] = window[1];
|
8 | window[1] = window[0];
|
9 | window[0] = new_value;
|
10 | }
|
11 |
|
12 | uint16 median (uint16 window[]) // sortiert Window und gibt Median aus
|
13 | {
|
14 | uint16 buffer;
|
15 |
|
16 | if(window[1]>window[2])
|
17 | {
|
18 | buffer = window[2];
|
19 | window [2] = window[1];
|
20 | window [1] = buffer;
|
21 | }
|
22 | if (window[0]>window[1])
|
23 | {
|
24 | buffer = window[1];
|
25 | window [1] = window[2];
|
26 | window [0] = buffer;
|
27 | }
|
28 | if(window[1]>window[2])
|
29 | {
|
30 | buffer = window[2];
|
31 | window [2] = window[1];
|
32 | window [1] = buffer;
|
33 | }
|
34 |
|
35 | return window[1];
|
36 | }
|
37 |
|
38 |
|
39 | // Aufruf:
|
40 | update_window(adcValue0, window);
|
41 | signal = median(window);
|
Ich weiß nun nicht wie ich das o.g. Problem löse. Bei einer normalen
Variablen, die ich mit einer Funktion im Speicher bearbeiten möchte
übergebe ich ja die Adresse der Variablen und arbeite mit Pointern. Wenn
die funktion nur die werte nutzen soll, übergebe ich die variable
einfach so.
Das array selbst ist ja nun bereits ein pointer - wie übergebe ich es
richtig wenn ich a) die funktion nur lokal und b) die funktion global
damit arbeiten lassen will?