Subroutine Aufruf

Gast #1797053
Lesenswert?
• ▲
▼
Liebe Kollegen!

Ich versuche gerade eine Funktion auf meinem Microblaze Prozessor zu 
implememtieren. Leider scheitert es immer am Funktionsaufruf.
Kann mir jemand weiterhelfen!?

Fehler:
/cygdrive/x/Microblaze_Test/ML605_MB_Test/Random_test/Random.c:103:2: 
warning: no newline at end of file
/cygdrive/c/DOKUME~1/adi/LOKALE~1/Temp/cchnNATm.o: In function `main':
/cygdrive/x/Microblaze_Test/ML605_MB_Test/Random_test/main.c:34: 
undefined reference to `gauss'
collect2: ld returned 1 exit status
make: *** [random_test/executable.elf] Error 1
ERROR:EDK - Error while running "make -f system.make init_bram".
   Return code = 2

main:
1
#include <stdio.h>
2
#include <xgpio.h>
3
#include <xparameters.h>
4
//#include <xstatus.h>
5
//#include <xgpio_l.h>
6

7
#define LED_ID XPAR_LEDS_8BIT_DEVICE_ID
8

9
#define LED_DELAY     5000
10

11
void gauss ();
12

13
int idum;
14
int n; 
15

16
int main(void)
17
{
18
print("*** Ready ***\r\n");
19
XGpio led;
20

21

22

23
double Delay;
24
int i  = 0;
25
int j  = 0x01;
26

27

28
XGpio_Initialize(&led, LED_ID);
29
XGpio_mSetDataDirection(XPAR_LEDS_8BIT_BASEADDR,1,0); //Set LEDS as output ports
30

31
  while(1) 
32
  {
33
  print("while(1) \r\n");
34
  XGpio_mSetDataReg(XPAR_LEDS_8BIT_BASEADDR,1,idum);
35
  
36
  idum = -XUartLite_RecvByte(XPAR_RS232_UART_1_BASEADDR);
37
  gauss();
38
  n= n * 1000;
39
   xil_printf (" calculated idum: %d \r\n", n);
40
  //XGpio_DiscreteWrite(&led, 1, 0xAA);
41
  }
42
return (0);
43
}

subroutine:
1
void gauss()
2

3
{
4
    extern n;
5
    extern idum;
6
    
7
    // ... do something
8

9
   return;
10
}

Bitte sagt mir was ich falsch mache!!!!

LG
Thomas
Gast #1797072
Lesenswert?
• ▲
▼
Thomas schrieb:
> /cygdrive/x/Microblaze_Test/ML605_MB_Test/Random_test/Random.c:103:2:
> warning: no newline at end of file

Am Ende der Datei hätte der Compiler gerne noch eine Leerzeile

Thomas schrieb:
> /cygdrive/c/DOKUME~1/adi/LOKALE~1/Temp/cchnNATm.o: In function `main':
> /cygdrive/x/Microblaze_Test/ML605_MB_Test/Random_test/main.c:34:
> undefined reference to `gauss'

Der linker vermisst die Funktion gauss. Da wird dein makefile einen 
Fehler haben.

Oliver
Persönliche Seite #1797077
Lesenswert?
• ▲
▼
Das sieht für mich so aus:

Die Definition der Funktion gauss() steckt in der Datei "subroutine" und 
diese Datei bzw. deren Kompilat ist dem Linker ld nicht bekannt. 
Folglich mosert ld die fehlende Funktion an.

Quickfix: Schreibe die Definition der Funktion gauss() ebenfalls in die 
Datei "main"

Nachhaltiger Fix: Passe das Makefile so an, dass alle C-Dateien deines 
Projekts darin enthalten sind.
Gast #1797088
Lesenswert?
• ▲
▼
die Funktion gauss() steht in einem eigenen File.

ich hab den Quickfix probiert. Das funktioniert. Eigenartig ist, dass 
ich noch eine 2. Funktion habe die immer noch im eigenen File ist. Die 
geht!?

Eigentlich steht die .c Datei mit den Subroutinen bei den sources im 
Compiler.

LG
Thomas
#1797109
Lesenswert?
• ▲
▼
Thomas schrieb:

> Eigentlich steht die .c Datei mit den Subroutinen bei den sources im
> Compiler.

Der Fehler kommt vom Linker
und zuständig ist das Makefile, welches dem Linker alle übersetzten *.c 
Files (die Objekt-files *.o) angeben muss, damit der die Einzelteile 
auch findet. Der Linker sucht nämlich nicht selbsttätig alles Files ab, 
die er auf einem Verzeichnis findet, ob er von dort etwas brauchen kann.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.