Forum: Mikrocontroller und Digitale Elektronik C18 Bibliothek erstellen


von Max H. (hartl192)


Angehängte Dateien:

Lesenswert?

Ich will mir für den C18 Compiler eine GLCD Bibliothek erstellen und 
habe diese 2 Dateien erstellt. Die Funktionen funktionieren sicher, ich 
habe sie in der Main getestet. Wenn ich das Programm aber compiliere 
kommt mir die Fehlermeldung:
Error - could not find definition of symbol 'glcd_text' in file 
'./main.o'.


main:
1
#pragma config FOSC = HSHP, PLLCFG = OFF //FOSC = 20MHz
2
#pragma config PWRTEN = OFF, BOREN=SBORDIS, BORV = 250
3
#pragma config WDTEN = OFF
4
5
#include "p18f45k22.h"
6
#include "delays.h"
7
8
#include "glcd.h"
9
10
void main(void)
11
{
12
  unsigned char text[]="GLCD Touch Test";
13
14
  
15
  LATA=0x00;
16
  TRISA=0x0F;
17
  ANSELA=0x0F;
18
  
19
  LATB=0x00;
20
  TRISB=0x00;
21
  ANSELB=0x00;
22
23
  LATC=0x01;
24
  TRISC=0x00;
25
  ANSELC=0x00;
26
  
27
  LATD=0x00;
28
  TRISD=0x00;
29
  ANSELD=0x00;
30
  
31
  glcd_init();
32
  glcd_text(6,0,0,text);
33
  
34
  while(1);  
35
36
}

Der letzte Teil in der glcd.c Datei ist NICHT auskommentiert, habe die 
Flasche datei hochgeladen, der Rest stimmt.

von holger (Gast)


Lesenswert?

>Error - could not find definition of symbol 'glcd_text' in file
>'./main.o'.

Dann solltest du deine "Bibliothek" mal dem Linker
bekannt machen.

Oder einfach glcd.c zum Projekt hinzufügen.

von Max H. (hartl192)


Lesenswert?

Und wie geht das mit dem Linker?

von holger (Gast)


Lesenswert?

Und das hier:

const rom unsigned char chartab[][8] =
.......

packst du am besten auch gleich in glcd.c

von B. S. (bestucki)


Lesenswert?

Falsches Linkerfile verwendet? Wenn du
Error - could not find definition of symbol in file './main.o'.
bei Google eingibst, findest du unzählige Einträge im Microchip-Forum. 
Dort wird mit dem selben Problem gekämpft.

von holger (Gast)


Lesenswert?

>Und wie geht das mit dem Linker?

Keine Ahnung wie das bei C18 geht.

von B. S. (bestucki)


Lesenswert?

Unter folgenden Pfad findest du das Linkerfile:
C:\Program Files\Microchip\mplabc18\v3.41\bin\LKR
Bei einem Deutschen Windows "Program Files" durch "Programme" ersetzen. 
Das Linkerfile kopierst du am besten in deinen Projektordner und fügst 
es zu deinem Projekt hinzu.

von Max H. (hartl192)


Lesenswert?

Das Linkerfile hinzuzufügen änder auch nichts

von holger (Gast)


Lesenswert?

>Unter folgenden Pfad findest du das Linkerfile:

Quark.

glcd.c zum Projekt hinzufügen. Und das Thema ist gegessen.
Zu mehr reicht es bei ihm noch nicht.

von Max H. (hartl192)


Lesenswert?

Wenn ich glcd.c zum Projekt hinzufüge bekomme ich diese Fehlermeldungen:
1
D:\Desktop\Elektronik\PIC\Programme C18\GLCD_lib\glcd.c:5:Error [1105] symbol 'LATBbits' has not been defined
2
D:\Desktop\Elektronik\PIC\Programme C18\GLCD_lib\glcd.c:5:Error [1151] struct or union object designator expected
3
D:\Desktop\Elektronik\PIC\Programme C18\GLCD_lib\glcd.c:5:Error [1101] lvalue required
4
D:\Desktop\Elektronik\PIC\Programme C18\GLCD_lib\glcd.c:6:Error [1105] symbol 'LATBbits' has not been defined
5
D:\Desktop\Elektronik\PIC\Programme C18\GLCD_lib\glcd.c:6:Error [1151] struct or union object designator expected
6
D:\Desktop\Elektronik\PIC\Programme C18\GLCD_lib\glcd.c:6:Error [1101] lvalue required
7
D:\Desktop\Elektronik\PIC\Programme C18\GLCD_lib\glcd.c:7:Error [1105] symbol 'LATBbits' has not been defined
8
D:\Desktop\Elektronik\PIC\Programme C18\GLCD_lib\glcd.c:7:Error [1151] struct or union object designator expected
9
D:\Desktop\Elektronik\PIC\Programme C18\GLCD_lib\glcd.c:7:Error [1101] lvalue required
10
D:\Desktop\Elektronik\PIC\Programme C18\GLCD_lib\glcd.c:8:Error [1105] symbol 'TRISD' has not been defined
11
D:\Desktop\Elektronik\PIC\Programme C18\GLCD_lib\glcd.c:8:Error [1101] lvalue required
12
D:\Desktop\Elektronik\PIC\Programme C18\GLCD_lib\glcd.c:9:Error [1105] symbol 'PORTD' has not been defined
13
D:\Desktop\Elektronik\PIC\Programme C18\GLCD_lib\glcd.c:9:Error [1101] lvalue required
14
D:\Desktop\Elektronik\PIC\Programme C18\GLCD_lib\glcd.c:10:Error [1105] symbol 'LATBbits' has not been defined
15
D:\Desktop\Elektronik\PIC\Programme C18\GLCD_lib\glcd.c:10:Error [1151] struct or union object designator expected
16
D:\Desktop\Elektronik\PIC\Programme C18\GLCD_lib\glcd.c:10:Error [1101] lvalue required
17
D:\Desktop\Elektronik\PIC\Programme C18\GLCD_lib\glcd.c:11:Error [1105] symbol 'LATBbits' has not been defined
18
D:\Desktop\Elektronik\PIC\Programme C18\GLCD_lib\glcd.c:11:Error [1151] struct or union object designator expected
19
D:\Desktop\Elektronik\PIC\Programme C18\GLCD_lib\glcd.c:11:Error [1101] lvalue required
20
D:\Desktop\Elektronik\PIC\Programme C18\GLCD_lib\glcd.c:12:Error [1105] symbol 'LATBbits' has not been defined
21
D:\Desktop\Elektronik\PIC\Programme C18\GLCD_lib\glcd.c:12:Error [1151] struct or union object designator expected
22
D:\Desktop\Elektronik\PIC\Programme C18\GLCD_lib\glcd.c:12:Error [1101] lvalue required
23
D:\Desktop\Elektronik\PIC\Programme C18\GLCD_lib\glcd.c:13:Error [1105] symbol 'LATBbits' has not been defined
24
D:\Desktop\Elektronik\PIC\Programme C18\GLCD_lib\glcd.c:13:Error [1151] struct or union object designator expected
25
D:\Desktop\Elektronik\PIC\Programme C18\GLCD_lib\glcd.c:13:Error [1101] lvalue required

von holger (Gast)


Lesenswert?

#include "p18f45k22.h"

in glcdc.c vergessen.

von B. S. (bestucki)


Lesenswert?

Ich bekomme nur folgende Meldung:
C:\Documents and Settings\Nobody\Desktop\New Folder\glcd.h:169:Error: 
syntax error

EDIT:
Durch hinzufügen einer Newline am Ende von glcd.h verschwindet der 
Fehler. Dafür hab ich jetzt:
Error - symbol 'chartab' has multiple definitions.
Link step failed.

von Max H. (hartl192)


Lesenswert?

holger schrieb:
> #include "p18f45k22.h"
>
> in glcdc.c vergessen.

Jetzt funktioniert es :)

von holger (Gast)


Lesenswert?

>Dafür hab ich jetzt:
>Error - symbol 'chartab' has multiple definitions.
>Link step failed.

Ich hab doch gesagt er soll das Array in glcd.c legen.
Das gehört nicht in die Headerdatei.

von B. S. (bestucki)


Lesenswert?

holger schrieb:
> Ich hab doch gesagt er soll das Array in glcd.c legen.
> Das gehört nicht in die Headerdatei.

Hab ich übersehen. Jetzt funktionierts bei mir auch.

1
#ifndef __GLCD_H__
2
#define __GLCD_H__
3
.
4
.
5
.
6
#endif
Würde in glcd.h auch nicht schaden.

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.