2017-01-30 5 views
0

Je suis nouveau ici. J'utilise le compilateur XC8 et un PIC18F25K22 de Microchip. Quand je construis le code, je reçois l'erreurXC8 déclaration contradictoire pour les registres (par exemple TRIS, SSP1CON1, ...)

xc8.exe --pass1 --errformat="Error at file %%f line %%l column %%c: (%%n) %%s" --warnformat="Warning at file %%f line %%l column %%c: (%%n) %%s" --msgformat="Message at file %%f line %%l column %%c: (%%n) %%s" -G --chip=18F25K22 -O"main.p1" "../main.c" 
Microchip MPLAB XC8 C Compiler (Free Mode) V1.37 
Build date: Mar 10 2016 
Part Support Version: 1.37 
Copyright (C) 2016 Microchip Technology Inc. 
License type: Node Configuration 

Warning at file line column : (1273) Omniscient Code Generation not available in Free mode 
Error at file ../i2clcd.c line 11 column 8: (195) expression syntax 
Error at file ../i2clcd.c line 11 column 8: (312) ";" expected 
Error at file ../i2clcd.c line 11 column 12: (285) no identifier in declaration 
Error at file ../i2clcd.c line 11 column 12: (314) ";" expected 
Error at file ../i2clcd.c line 14 column 10: (195) expression syntax 
Error at file ../i2clcd.c line 14 column 10: (312) ";" expected 
Error at file ../i2clcd.c line 14 column 14: (285) no identifier in declaration 
Error at file ../i2clcd.c line 14 column 14: (314) ";" expected 
Warning at file ../i2clcd.c line 23 column 1: (361) function declared implicit int 
Error at file ../i2clcd.c line 51 column 11: (195) expression syntax 
Error at file ../i2clcd.c line 51 column 11: (312) ";" expected 
Error at file ../i2clcd.c line 51 column 15: (285) no identifier in declaration 
Error at file ../i2clcd.c line 51 column 15: (314) ";" expected 
Error at file ../i2clcd.c line 84 column 1: (192) undefined identifier "lcddata" 
Error at file ../i2c.c line 10 column 1: (1098) conflicting declarations for variable "I2C_INIT" (../i2c.c:9) 
(908) exit status = 1 
make: *** [main.p1] Error 1 

Error code 2 

si je commente cette ligne de code, je reçois l'erreur avec la commande suivante du registre (dans mon cas: SSP1CON1) - Je l'ai essayé avec notamment xc.h et htc.h mais il y a aussi la même erreur.

J'ai trouvé un problème similaire dans stackoverflow, mais le problème a été résolu en plaçant ces commandes dans une fonction, mais les miennes sont dans une fonction.

Voici mon code:

#include "i2c.h" 
#include <xc.h> 
#include <htc.h> 
/* 
* subroutine:  I2C_INIT() 
* access from:  main.c/BOOT() 
* description:  Initialisises MSSP port for I2C Master-Mode 
*/ 
void I2C_INIT(0) 
{ 
    TRISCbits.TRISC3=1;       //config SCL-Line as Input; 
    TRISCbits.TRISC4=1;       //config SDA-Line as Input; 

    SSP1CON1 = 0b00101000; 
    /* 
    * bit 5: Enables the serial port and configures the SDA and SCL pins as the 
    *   source of the serial port pins 
    *bit 0-3: 1000: I2C Master Mode, clock = FOSC/(4*(SSPASS+1)) 
    */ 

    SSP1CON2 = 0x00; 

    SSP1ADD = 39;     //clock = FOSC/(4*(SSPASS+1)) - 100 kHz @ 16MHz FOSC 
    SSP1STAT = 0b11000000; 
    /* 
    * bit 7: Slew rate control disabled for standard speed mode (100 kHz and 1 MHz) 
    * bit 6: Data transmitted on rising edge of SCK 
    */ 
} 
+0

Est-ce que ce code est pour 'i2c.c'? Dans ce cas, je dirais que cela ne correspond pas à celui que vous compilez. Et qu'est-ce que 'I2C_INIT (0)'? Est-ce une macro? –

+0

Ce n'est pas le code complet de 'i2c.c'. Désolé je suis nouveau aux microcontrôleurs et C et je me souviens de lire un exemple de code d'un gars qui place (0) au lieu de (vide), alors j'ai essayé cela. Quand je place (vide) j'obtiens l'erreur ** déclarations contradictoires pour la variable "I2C_INIT" (../i2c.c:9)** –

+0

Vous ne devriez pas mettre '0' à coup sûr. Je ne sais pas qui est ce type, mais vous avez probablement mal compris l'intention. Donc, il semble que 'I2C_INIT' est défini ailleurs. Est-ce le message d'erreur complet, ou il y a plus? –

Répondre

2

Toutes les déclarations de registre (SSP1CON1, TRISCbits, etc., sont déclarés dans xc.h (et il est imbriqué inclut) problème Votre peut être que le code dans le i2c.h comprennent est. référencement définitions qui apparaissent dans xc.h

Essayez d'inverser l'ordre de votre comprend pour placer le système comprend avant votre propre (ou un tiers) comprend.

En général, vous devez toujours placer toutes les inclusions de système (c.-à-d. ceux où le fichier est spécifié avec <>) avant le vôtre (ceux avec "").

+0

merci, mais j'ai trouvé l'erreur dans un autre fichier include, et j'ai enlevé le fichier include leur ... mais ma nouvelle erreur est: 'make: ** * Aucune règle pour rendre cible ../../../../../../../Lukas_Fürst/AppData/Local/Temp/271d8c4c1fe4456cb5419e611bd1711e/PIC18F25K22/i2c.c, requis par i2c.p1. Stop.' –

+0

Je suggérerais un nettoyage, puis une reconstruction de l'ensemble du projet. Cela semble réparer ce genre d'erreur pour moi. Mais, il est très étrange que votre projet contienne un fichier dans votre dossier temporaire. Essayez de vérifier la fenêtre 'Projects' dans MPLABX pour vous assurer que tous les fichiers sont dans des emplacements légitimes (si vous passez la souris sur le nom du fichier, le chemin complet sera affiché). – EBlake

+0

merci @EBlake J'ai d'abord programmé avec Proteus puis créé un nouveau projet et copié le code dans MPLAB X. Je pense que le répertoire était trop long. –