Forum: Mikrocontroller und Digitale Elektronik Array an Unterprogramm übergeben


von Franz F. (franzman)


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

von Markus M. (mark_m)


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

von Franz F. (franzman)


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

von Georg G. (df2au)


Lesenswert?

Franz F. schrieb:
> Ich weiß was du meinst....

Das sieht nicht so aus :-(

In deinem File Timertest verwendest du eine Funktion copyp2, die aber 
nirgends definiert ist.

von Franz F. (franzman)


Lesenswert?

Eine Funktion copyp2 wird in meinem Programm nie Verwendet. Wenn ich das 
Unterprogramm auskommentiere ist die Warnung auch nicht mehr da.

von Markus M. (mark_m)


Lesenswert?

Belege mal die Variable "f" mit einem Startwert und Initialisierte das 
Array "ordn[]" richtig. Ich kenne den Keil Compiler nicht und weiss also 
nicht ob dieser Variablen vorinitialisiert.

z.B.
1
    unsigned char j,k,f = 0;
2
    unsigned char ordn[3]={0,0,0};

Berichte!

Grüsse

von Franz F. (franzman)


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

von Marius S. (lupin) Benutzerseite


Lesenswert?

Ich habe zwar keine Ahnung worum es geht, habe es aber geschafft bei 
Google nach copyp2 zu suchen, vielleicht hilft das:

http://www.keil.com/support/docs/2576.htm

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.