Forum: Mikrocontroller und Digitale Elektronik Verwendung von plibs in xc8


von Alex X. (behindi)


Lesenswert?

Hallo,

ich plage mich zurzeit mit den plibs in MPLABX herum und brauche von 
daher eure Hilfe... Im Voraus schon mal Danke.

Also ich habe mir vor einigen Tagen auf dem Notebook die neue
MPLAB X IDE v3.30, den xc8 v1.37 und die plibs v2.0 installiert.

Ich habe dann vergeblich versucht ein altes Projekt zu kompilieren. Der 
Compiler hat die #include <usart.h> nicht gefunden. Um das zu fixen hab 
ich den .../include/plib Pfad zu den "Include directories" hinzugefügt.
Nun hat hat der Linker ein Problem und ich weiß nicht mehr weiter.

Mein minimal Code (aus der plib doc):

1
#pragma config FOSC = INTIO67, PLLCFG = OFF, IESO = OFF
2
#pragma config BOREN = OFF, BORV = 250
3
#pragma config WDTEN = OFF, WDTPS = 1
4
#pragma config MCLRE = EXTMCLR  MCLR, HFOFST = OFF, PBADEN = OFF
5
#pragma config CCP2MX = PORTB3, STVREN = OFF, LVP = OFF, XINST = OFF, DEBUG = OFF
6
#pragma config CP0 = OFF, CP1 = OFF, CP2 = OFF, CP3 = OFF
7
#pragma config CPB = OFF, CPD = OFF
8
#pragma config EBTR0 = OFF
9
#pragma config EBTR1 = OFF
10
#pragma config EBTR2 = OFF
11
#pragma config EBTR3 = OFF
12
13
#define _XTAL_FREQ 8000000
14
#define USE_OR_MASKS
15
16
#include <xc.h>
17
#include <usart.h>
18
19
void main(void) {
20
    
21
    unsigned char Txdata[] = "MICROCHIP_USART";
22
    unsigned char config=0, spbrg=0, baudconfig=0, i=0;
23
        
24
    OSCCONbits.IRCF2 = 1;
25
    OSCCONbits.IRCF1 = 1;   // 8MHz
26
    OSCCONbits.IRCF0 = 0;
27
28
    ANSELC = 0x00;          // enable digital input buffers
29
    TRISCbits.TRISC6 = 0;   // Tx
30
    TRISCbits.TRISC7 = 1;   // Rx
31
        
32
    
33
    Close1USART();   
34
    config = USART_TX_INT_OFF | USART_RX_INT_OFF | USART_ASYNCH_MODE | USART_EIGHT_BIT | USART_CONT_RX | USART_BRGH_LOW;
35
    spbrg = 51;     //At 8Mhz of oscillator frequency & baud rate of 2400.
36
    Open1USART(config, spbrg);
37
    baudconfig = BAUD_8_BIT_RATE | BAUD_AUTO_OFF;
38
    baud1USART(baudconfig);
39
40
    //------USART Transmission ----
41
    while(Busy1USART());
42
    puts1USART((char *)Txdata);
43
44
45
    while(1);
46
}

Die Fehlermeldung:
1
:: warning: (1273) Omniscient Code Generation not available in Free mode
2
:0: error: (500) undefined symbols:
3
  _baud1USART(dist/default/production/USARTconfig.X.production.obj) _Open1USART(dist/default/production/USARTconfig.X.production.obj) _puts1USART(dist/default/production/USARTconfig.X.production.obj) 
4
(908) exit status = 1
5
nbproject/Makefile-default.mk:125: recipe for target 'dist/default/production/USARTconfig.X.production.hex' failed
6
make[2]: Leaving directory '/home/alexander/projects/MPLABXprojects/USARTconfig.X'
7
nbproject/Makefile-default.mk:84: recipe for target '.build-conf' failed
8
make[1]: Leaving directory '/home/alexander/projects/MPLABXprojects/USARTconfig.X'
9
nbproject/Makefile-impl.mk:39: recipe for target '.build-impl' failed
10
make[2]: *** [dist/default/production/USARTconfig.X.production.hex] Error 1
11
make[1]: *** [.build-conf] Error 2
12
make: *** [.build-impl] Error 2
13
14
BUILD FAILED (exit value 2, total time: 3s)

Ich verwende Gentoo Linux, sollte aber nicht von Belang sei, da ich es 
auch unter win10 getestet habe.

Ich wäre euch sehr dankbar, wenn Ihr mir weiterhelfen könntet.

von Witkatz :. (wit)


Lesenswert?

Ich habe es zwar nicht selber ausprobiert, aber vielleicht klappts es 
nach der Anleitung von Nico:
http://pic-projekte.de/wordpress/?p=292#Compiler_Libraries

: Bearbeitet durch User
von Witkatz :. (wit)


Angehängte Dateien:

Lesenswert?

Wenn man nach der Anleitung von Nico vorgeht, wird das Programm 
übersetzbar. Zusätzlich muss noch die Einbindung der plib aktiviert 
werden, s. Bild.
Die Funktionen sind in der usart.h definiert: CloseUSART, OpenUSART usw. 
ohne die 1 im Namen.

von Alex X. (behindi)


Lesenswert?

Vielen Dank wit für deine schnelle Antwort :)

Habs getestet, aber der Linker ist immer noch nicht zufrieden.
Code:
1
#pragma config FOSC = INTIO67, PLLCFG = OFF, IESO = OFF
2
#pragma config BOREN = OFF, BORV = 250
3
#pragma config WDTEN = OFF, WDTPS = 1
4
#pragma config MCLRE = EXTMCLR  MCLR, HFOFST = OFF, PBADEN = OFF
5
#pragma config CCP2MX = PORTB3, STVREN = OFF, LVP = OFF, XINST = OFF, DEBUG = OFF
6
#pragma config CP0 = OFF, CP1 = OFF, CP2 = OFF, CP3 = OFF
7
#pragma config CPB = OFF, CPD = OFF
8
#pragma config EBTR0 = OFF
9
#pragma config EBTR1 = OFF
10
#pragma config EBTR2 = OFF
11
#pragma config EBTR3 = OFF
12
13
#define _XTAL_FREQ 8000000
14
#define USE_OR_MASKS
15
#define EAUSART_V11         // pic18f46k22
16
17
#include <xc.h>
18
#include <plib.h>
19
20
void INIT_uC(void);
21
22
void main(void) {
23
    
24
    unsigned char Txdata[] = "MICROCHIP_USART";
25
    unsigned char config=0, baudconfig=0, i=0;
26
    unsigned int spbrg=0;
27
        
28
    OSCCONbits.IRCF2 = 1;
29
    OSCCONbits.IRCF1 = 1;   // 8MHz
30
    OSCCONbits.IRCF0 = 0;
31
32
    ANSELC = 0x00;          // enable digital input buffers
33
    TRISCbits.TRISC6 = 0;   // Tx
34
    TRISCbits.TRISC7 = 1;   // Rx
35
        
36
    Close1USART();   
37
    config = USART_TX_INT_OFF | USART_RX_INT_OFF | USART_ASYNCH_MODE | USART_EIGHT_BIT | USART_CONT_RX | USART_BRGH_LOW;
38
    spbrg = 51;     //At 8Mhz of oscillator frequency & baud rate of 2400.
39
    Open1USART(config, spbrg);
40
    baudconfig = BAUD_8_BIT_RATE | BAUD_AUTO_OFF;
41
    baud1USART(baudconfig);
42
43
    //------USART Transmission ----
44
    while(Busy1USART());
45
    puts1USART((char *)Txdata);
46
47
    while(1);
48
}

Fehlerlmeldung:
1
:: warning: (1273) Omniscient Code Generation not available in Free mode
2
:0: error: (500) undefined symbols:
3
  _baud1USART(dist/default/production/USARTconfig.X.production.obj) _Open1USART(dist/default/production/USARTconfig.X.production.obj) _puts1USART(dist/default/production/USARTconfig.X.production.obj) 
4
(908) exit status = 1
5
nbproject/Makefile-default.mk:125: recipe for target 'dist/default/production/USARTconfig.X.production.hex' failed
6
make[2]: Leaving directory '/home/alexander/projects/MPLABXprojects/USARTconfig.X'
7
nbproject/Makefile-default.mk:84: recipe for target '.build-conf' failed
8
make[1]: Leaving directory '/home/alexander/projects/MPLABXprojects/USARTconfig.X'
9
nbproject/Makefile-impl.mk:39: recipe for target '.build-impl' failed
10
make[2]: *** [dist/default/production/USARTconfig.X.production.hex] Error 1
11
make[1]: *** [.build-conf] Error 2
12
make: *** [.build-impl] Error 2
13
14
BUILD FAILED (exit value 2, total time: 3s)

Hat jemand ein Beispielprojekt, wo eine der plibs verwendet wird (xc8)?
Wäre sehr hilfreich.

Vielen Dank für jegliche Hilfe!

von Witkatz :. (wit)


Lesenswert?

Bei mir lässt sich dein Quellcode problemlos compilieren.
Ist das Häckchen bei "Link in Peripheral Library" gesetzt? (s. mein 
letzter Post)

von Alex X. (behindi)


Lesenswert?

Ups hab deinen vorletzten Post gar nicht gesehen.
Das Häkchen bei "Link in Peripheral Library" hatte ich nicht gesetzt... 
Jetzt passts :-)

Vielen Dank Witkatz für deine Hilfe und Geduld!

: Bearbeitet durch User
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.