Hilfe gesucht bei einer Meldung des Compilers XC8

OP #7243622
hallo;

folgende Meldung bekomme ich beim Compilieren. kann mir jemand kurz und 
bündig sagen, was ich tun muss, um sie zu beheben ?

"C:\Program Files\Microchip\xc8\v2.40\bin\xc8-cc.exe"  -mcpu=16F884 -c 
-mdfp="C:/Program 
Files/Microchip/MPLABX/v6.00/packs/Microchip/PIC16Fxxx_DFP/1.3.42/xc8" 
-fno-short-double -fno-short-float -O0 -fasmfile -maddrqual=ignore 
-xassembler-with-cpp -mwarn=-3 -Wa,-a -DXPRJ_default=default 
-msummary=-psect,-class,+mem,-hex,-file  -ginhx32 -Wl,--data-init 
-mno-keep-startup -mno-osccal -mno-resetbits -mno-save-resetbits 
-mno-download -mno-stackcall -mdefault-config-bits   -std=c99 -gdwarf-3 
-mstack=compiled:auto:auto     -o build/default/production/newmain.p1 
newmain.c
::: advisory: (2049) C99 compliant libraries are currently not available 
for baseline or mid-range devices, or for enhanced mid-range devices 
using a reentrant stack; using C90 libraries
make[2]: *** [build/default/production/newmain.p1] Error 1
make[1]: *** [.build-conf] Error 2
make: *** [.build-impl] Error 2

mein Programm
1
#include "my-configs.h"
2

3
#define _XTAL_FREQ 4000000
4

5
#define I2C_BaudRate           100000
6
#define SCL_D                  TRISC3
7
#define SDA_D                  TRISC4
8

9
#define LCD_BACKLIGHT          0x08
10
#define LCD_RETURN_HOME        0x02
11
#define LCD_TYPE               2 
12
#define LCD_TURN_ON            0x0C
13
#define LCD_CLEAR              0x01
14
#define LCD_ENTRY_MODE_SET     0x04
15

16
unsigned char i2c_add;
17

18
unsigned char RS, i2c_add, BackLight_State = LCD_BACKLIGHT;
19

20
void main(void) {
21
    
22
  SSPCON  = 0x28;
23
  SSPCON2 = 0x00;
24
  SSPSTAT = 0x00;
25
  SSPADD = ((_XTAL_FREQ/4)/I2C_BaudRate) - 1;
26
  SCL_D = 1;
27
  SDA_D = 1; 
28
  
29
  
30
  
31
  i2c_add = "0x4E";
32
    
33
  IO_Expander_Write(0x00);
34
  __delay_ms(30);
35
  LCD_CMD(0x03);
36
  __delay_ms(5);
37
  LCD_CMD(0x03);
38
  __delay_ms(5);
39
  LCD_CMD(0x03);
40
  __delay_ms(5);
41
  LCD_CMD(LCD_RETURN_HOME);
42
  __delay_ms(5);
43
  LCD_CMD(0x20 | (LCD_TYPE << 2));
44
  __delay_ms(50);
45
  LCD_CMD(LCD_TURN_ON);
46
  __delay_ms(50);
47
  LCD_CMD(LCD_CLEAR);
48
  __delay_ms(50);
49
  LCD_CMD(LCD_ENTRY_MODE_SET | LCD_RETURN_HOME);
50
  __delay_ms(50);
51
    
52
    TRISA2 = 0;
53
      
54
    while(1) {
55

56
    #include "my-loop.h"
57

58
    }
59
    
60
return;
61

62
}
63

64
void IO_Expander_Write(unsigned char Data) 
65
{
66
  I2C__Start();
67
  I2C__Write(i2c_add);
68
  I2C__Write(Data | BackLight_State);
69
  I2C__Stop();
70
}
71

72
void I2C__Start()
73
{
74
    I2C__Wait();
75
    SEN = 1;
76
}
77

78
void I2C__Wait()
79
{
80
    while ((SSPSTAT & 0x04) || (SSPCON2 & 0x1F));
81
}
82

83
unsigned char I2C__Write(unsigned char data)
84
{
85
    I2C__Wait();
86
    SSPBUF = data;
87
    while(!SSPIF);  // Wait Until Completion
88
  SSPIF = 0;
89
    return ACKSTAT;
90
}
91

92
void I2C__Stop()
93
{
94
    I2C__Wait();
95
    PEN = 1;
96
}
97

98
void LCD_CMD(unsigned char CMD) 
99
{
100
  RS = 0; // Command Register Select
101
  LCD_Write_4Bit(CMD & 0xF0);
102
  LCD_Write_4Bit((CMD << 4) & 0xF0);
103
}
104

105
void LCD_Write_4Bit(unsigned char Nibble) 
106
{
107
  // Get The RS Value To LSB OF Data  
108
  Nibble |= RS;
109
  IO_Expander_Write(Nibble | 0x04);
110
  IO_Expander_Write(Nibble & 0xFB);
111
  __delay_us(50);
112
}
OP
Den Miniloop auszulagern war nur ein Test. Auch wenn die 4 Zeilen direkt 
drinstehen kommt der Fehler.
Ich versuchte die einzelnen Routinen aus einer I2C-Bibliothek direkt in 
den Source-Code zu kopieren, aus irgendeinem Grund kommt dann der 
Fehler.
Ich versuche mal den Code zu minimieren und die genau erste Zeile 
herauszufinden wenn der Fehler auftaucht.
aber hier nochmal der derzeitige Code.
1
#include "my-configs.h"
2

3
#define _XTAL_FREQ 4000000
4

5
#define I2C_BaudRate           100000
6
#define SCL_D                  TRISC3
7
#define SDA_D                  TRISC4
8

9
#define LCD_BACKLIGHT          0x08
10
#define LCD_RETURN_HOME        0x02
11
#define LCD_TYPE               2 
12
#define LCD_TURN_ON            0x0C
13
#define LCD_CLEAR              0x01
14
#define LCD_ENTRY_MODE_SET     0x04
15

16
unsigned char i2c_add;
17

18
unsigned char RS, i2c_add, BackLight_State = LCD_BACKLIGHT;
19

20
void main(void) {
21
    
22
  SSPCON  = 0x28;
23
  SSPCON2 = 0x00;
24
  SSPSTAT = 0x00;
25
  SSPADD = ((_XTAL_FREQ/4)/I2C_BaudRate) - 1;
26
  SCL_D = 1;
27
  SDA_D = 1; 
28
  
29
  
30
  
31
  i2c_add = "0x4E";
32
    
33

34
  
35

36
  
37
  IO_Expander_Write(0x00);
38
  __delay_ms(30);
39
  LCD_CMD(0x03);
40
  __delay_ms(5);
41
  LCD_CMD(0x03);
42
  __delay_ms(5);
43
  LCD_CMD(0x03);
44
  __delay_ms(5);
45
  LCD_CMD(LCD_RETURN_HOME);
46
  __delay_ms(5);
47
  LCD_CMD(0x20 | (LCD_TYPE << 2));
48
  __delay_ms(50);
49
  LCD_CMD(LCD_TURN_ON);
50
  __delay_ms(50);
51
  LCD_CMD(LCD_CLEAR);
52
  __delay_ms(50);
53
  LCD_CMD(LCD_ENTRY_MODE_SET | LCD_RETURN_HOME);
54
  __delay_ms(50);
55

56
    
57
    
58
    
59
    TRISA2 = 0;
60
      
61
    while(1) {
62

63
        RA2 = 1;
64
        __delay_ms(1200);
65
        RA2 = 0;
66
        __delay_ms(1200);
67

68
    }
69
    
70
return;
71

72
}
73

74

75
void IO_Expander_Write(unsigned char Data) 
76
{
77
  I2C__Start();
78
  I2C__Write(i2c_add);
79
  I2C__Write(Data | BackLight_State);
80
  I2C__Stop();
81
}
82

83
void I2C__Start()
84
{
85
    I2C__Wait();
86
    SEN = 1;
87
}
88

89
void I2C__Wait()
90
{
91
    while ((SSPSTAT & 0x04) || (SSPCON2 & 0x1F));
92
}
93

94
unsigned char I2C__Write(unsigned char data)
95
{
96
    I2C__Wait();
97
    SSPBUF = data;
98
    while(!SSPIF);  // Wait Until Completion
99
  SSPIF = 0;
100
    return ACKSTAT;
101
}
102

103
void I2C__Stop()
104
{
105
    I2C__Wait();
106
    PEN = 1;
107
}
108

109
void LCD_CMD(unsigned char CMD) 
110
{
111
  RS = 0; // Command Register Select
112
  LCD_Write_4Bit(CMD & 0xF0);
113
  LCD_Write_4Bit((CMD << 4) & 0xF0);
114
}
115

116
void LCD_Write_4Bit(unsigned char Nibble) 
117
{
118
  // Get The RS Value To LSB OF Data  
119
  Nibble |= RS;
120
  IO_Expander_Write(Nibble | 0x04);
121
  IO_Expander_Write(Nibble & 0xFB);
122
  __delay_us(50);
123
}
Gast
Michael S. schrieb:

> Ich versuchte die einzelnen Routinen aus einer I2C-Bibliothek direkt in
> den Source-Code zu kopieren aus irgendeinem Grund kommt dann der Fehler.

Weil diese Routinen Variablen / Definitionen z.B. aus deren Header-Files 
verwenden, die Du nicht mit rüberkopiert hast.
Michael S. schrieb:
> wenn der Fehler auftaucht.

Welcher Fehler?

Der Compiler übersetzt die Sourcedatei einfach vom Anfang her. Wenn er 
auf irgendwas stößt, was ihm (noch) nicht bekannt ist, dann ist 
Feierabend.
Er kann zum Beispiel mit Funktionsaufrufen in main() nichts anfangen, 
wenn diese Funktionen erst später in der Datei implementiert werden!
-> https://de.wikipedia.org/wiki/Funktionsprototyp#Hintergrund

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 3 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.