PIC XC8 lib Funktions aufruf in eigenen Funktionen -> Error

OP #3775599
Lesenswert?

Hi,

hab da mal wieder, ein frustrierendes Anfänger Problem :(

Wenn ich Funktionen aus string.h in der Main benutze, funktioniert alles 
ohne Probleme.
Setze ich sie aber in einer eigenen Funktion ein, kommt es zu folgender 
Fehlermeldung:
user.c:23: warning: (361) function declared implicit int
C:\Program Files (x86)\Microchip\xc8\v1.32\sources\common\itoa.c:4: 
error: (1098) conflicting declarations for variable "_itoa" (user.c:23)

Die Warnung wird immer ausgegeben, egal was ich da für einen Type 
deklariere!
Die Erklärung zum Error, sagt mir in diesem Zusammenhang auch nichts.

(1098) conflicting declarations for variable "*" (*:*)  (Parser, Code 
Generator)
Differing type information has been detected in the declarations for a 
variable, or between a declaration and the definition of a variable, for 
example:
extern long int test;
int test; /* oops -- which is right? int or long int ? */

Hier der Code dazu:
1
#include <xc.h>         /* XC8 General Include File */
2
#include <stdint.h>         /* For uint8_t definition */
3
#include <stdbool.h>        /* For true/false definition */
4
#include <string.h>
5

6
#include "LCD_HD44780.h"
7
#include "user.h"
8

9
void Print_Zeit(int val);  // liegt in user.h
10

11
void Print_Zeit(int val) { // liegt in user.c, wird in main aufgerufen
12
    char PBuff[3];
13
    itoa(PBuff, val, 10);
14
    if (val < 10) {
15
        LCD_Print("0");
16
    }
17
    LCD_Print(PBuff);
18
}
Die Impementation von itoa:
1
char *
2
itoa(char * buf, int val, int base)
3
{
4
  char *  cp = buf;
5

6
  if(val < 0) {
7
    *buf++ = '-';
8
    val = -val;
9
  }
10
  utoa(buf, val, base);
11
  return cp;
12
}

Ich habe nicht den geringsten Schimmer, was da quer schlägt?

Ich danke schon mal für eure Mühen.
#3775627
Lesenswert?

Und ich habe nicht den geringsten Schimmer, was da jetzt eigentlich was 
ist.

Dein erster Quelltext ist welche Datei? user.c? Wieso steht dann ein 
Kommentar drin "liegt in user.h"?

Und wieso hast du einen eigenen Quelltext für itoa()? Und in welcher 
Datei ist der?

Spekulation (weil deine Fehlerbeschreibung eher mager ist):
Wahrscheinlich ist itoa() in einer deiner #includeten Headerdateien 
definiert, und halt etwas anders als von dir in deiner Version.
OP #3775708
Lesenswert?

Sorry, dachte nicht das daß so missverständlich ist.

main.c
1
#include <xc.h>         /* XC8 General Include File */
2
#include <stdint.h>     /* For uint8_t definition */
3
#include <stdlib.h>
4
#include <stdbool.h>       /* For true/false definition */
5

6
#include "system.h"        /* System funct/params, like osc/peripheral config */
7
#include "user.h"
8
#include "drehgeber.h"
9
#include "LCD_HD44780.h"
10

11
void main(void) {
12
    ConfigureOscillator();
13
    InitApp();
14
    LCD_init();
15

16
    while (1) {
17
        if (sek_Tick) {
18
            Uhr();
19
            sek_Tick = 0;
20
        }
21
        if (lcd_Tick) { // LCD Aktualisieren
22
            Print_Zeit(sekunde);
23
        }
24
    }
25
}
user.h
1
volatile bit mS_Tick = 0, sek_Tick = 0, alarm = 0, lcd_Tick = 0, Start_Taste = 0;
2
volatile bit Start_Flag = 0;
3
volatile char sekunde = 0;
4
unsigned int minute = 0, stunde = 0, tag = 0, monat = 0, jahr = 0,val;
5

6
void Uhr(void);
7
void Print_Zeit(unsigned val);
8

9
void InitApp(void); /* I/O and Peripheral Initialization */
user.c
1
#include <xc.h>         /* XC8 General Include File */
2
#include <stdint.h>         /* For uint8_t definition */
3
#include <stdbool.h>        /* For true/false definition */
4
#include <string.h>
5

6
#include "LCD_HD44780.h"
7
#include "user.h"
8

9
void Print_Zeit(unsigned val) {
10
    char PBuff[3];
11
    utoa(PBuff, val, 10);  
12
    if (val < 10) {
13
        LCD_Print("0");
14
    }
15
    LCD_Print(PBuff);
16
 }
17
 
18
void InitApp(void) {
19
    PORTA = 0;
20
    PORTB = 0;
21

22
    TRISA = 0b11100;
23
    TRISB = 0b00000000;
24
    nRBPU = 0;
25

26
    GIE = 1;
27
    T0IE = 1;
28
  }
Bitte nicht dran stören, das hier jetzt "utoa" benutzt wird, ändert 
nichts an der Fehlermeldung! Das sich die Error Meldung auf die Zeile 
mit "utoa" bezieht sollte klar sein.
Hier nochmals die Meldungen:
user.c:20: warning: (361) function declared implicit int
C:\Program Files (x86)\Microchip\xc8\v1.32\include\stdlib.h:104: error: 
(1098) conflicting declarations for variable "_utoa" (user.c:20)

Gelöscht habe ich nur Kommentare, um den Text nicht unnötig auf zu 
blähen.
OP #3775795
Lesenswert?

Ubs... hab wohl vergessen den Beitrag abzuschicken? Hier noch mal.

g457 schrieb:
> Funktionsdeklaration (stdlib.h) fehlt.

Danke das war's!

Ich ging davon aus, das wenn eine Include fehlt, kommt sowas wie "Kann 
xxx nicht finden..."
Mir fehlt halt noch der Überblick wie das in C organisiert ist :(
Sollte mir mal die wichtigen libs zu Gemüte führen. (sorry)


Danke nochmals an alle

MfG
Teo
OP #3776010
Lesenswert?

Klaus Wachtler schrieb:
> Wenn mir jemand Quelltexte und Fehlermeldungen zeigt, die gar nicht
> zusammenpassen, dann ist das einfach Zeitverschwendung.

Es gibt nur 1 utoa(itoa) im, recht kurzem Quelltext. Zeilen nummern 
existieren nicht, weil ich die nicht kopieren kann! Was den Hinweis 
"Fehler in Zeile xy" nicht sehr hilfreich macht!

Wenn Du den Zusammenhang nicht erkennen kannst, dann lass es bitte und 
mach mich hier nicht so schräg von der Seite an!

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