Hallo
Ich bin gerade dabei, von einem AD Wandler auf zwei verschiedenen
Kanälen die Analogwerte einzulesen. Um die Fehlerwahrscheinlichkeit zu
verringern, möchte ich den Medianwert aus 3 Werten berechnen.
Ich lese den Wert ein über ein AD Wandler Unterprogramm und bekomme
diesen als unsigned charakter.
Jetzt möchte ich die Messung so gestalten:
1 | for(h=0;h<3;h++)
|
2 | {
|
3 | messung1[h]=ad12(ch1);
|
4 | messung0[h]=ad12(ch0);
|
5 | }
|
6 |
|
7 | wertled[0]=median(messung1);
|
8 | wertled[4]=median(messung0);
|
Wertled[#] ist das Ziel wo, der Medianwert übergeben wird.
Hier das Unterprogramm
1 | //Medianwert bestimmen
|
2 | unsigned char median(unsigned char mess[])
|
3 | {
|
4 | unsigned char j,k,f;
|
5 | unsigned char ordn[3]={0};
|
6 |
|
7 | for(j=0;j<3;j++)
|
8 | {
|
9 | for(k=0;k<3;k++)
|
10 | {
|
11 | if(mess[k]>=ordn[j])
|
12 | {
|
13 | mess[k]=ordn[j];
|
14 | f=k;
|
15 | }
|
16 | }
|
17 | mess[f]=0;
|
18 | }
|
19 | return(ordn[1]);
|
20 | }
|
Ich hoffe dass diese Methode richtig ist um den Medianwert zu
ermitteln...
Ich suche mir den größten Inhalt und schreibe sie auf die Variable ordn.
Danach wird der höchste Wert 0 gesetzt und der der zweithöchste wird
herausgesucht.......
aber Egal....
Mein Problem ist, dass beim Compilieren folgende Warnung angezeigt wird,
und das Programm nicht mehr läuft. Habe ich das Array falsch übergeben?
gibt es andere möglichkeiten?
Fehlermeldung:
*** WARNING L1: UNRESOLVED EXTERNAL SYMBOL
SYMBOL: ?C?COPYP2
MODULE: timertest.obj (TIMERTEST)
*** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL
SYMBOL: ?C?COPYP2
MODULE: timertest.obj (TIMERTEST)
ADDRESS: 0C85H
Program Size: data=124.2 xdata=0 code=3414
PS: Ich verwende Keil µVision 2 und der Controller ist ein 89C51ED2
mfg