Array an Unterprogramm übergeben

OP #3165371
Lesenswert?

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
#3165396
Lesenswert?

Du musst unterscheiden lernen, welche Tool in deiner Toolchain die 
Fehler/Warnungen rauswirft!

Der Compiler hat nicht gemeckert. Aber der Linker beschwert sich, dass 
er ein Symbol nicht auflösen kann. Das kann daran liegen, dass Du nicht 
alle Libraries angegeben hast und der Linker eine Funktion, die Du nutzt 
nicht mit einer Library verbinden kann.

Poste mal das komplette Build Log.

Grüsse
OP #3165423
Lesenswert?

Ich weiß was du meinst....


Build target 'Target 1'
assembling AT_STARTUP.A51...
compiling timertest.c...
assembling lcd_p0.a51...
linking...
*** 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
creating hex file from "timertest"...
"timertest" - 0 Error(s), 2 Warning(s).

mfg
OP #3165577
Lesenswert?

Leider keine Besserung, aber Danke für die Mühe.
Wenn ich die Mysteriöse Funktion copyp2 irgendwo in meinem Programm 
habe, würde ich den Fehler ja auch haben wenn ich das Unterprogramm 
auskommentiere. Im Unterprogramm habe ich ja offensichtlich kein 
Programm dieser Art.

mfg

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren