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

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.