Errore 119.1 function declared implicit int
- Lello Guidi
-
Autore della discussione
- Platino Utente
-
Less
Di più
12 Anni 11 Mesi fa #1
da Lello Guidi
Errore 119.1 function declared implicit int è stato creato da Lello Guidi
Salve,
il compilatore mi da errore 119.1 function declared implicit int alla riga della funzione ""Scompone_dato", se invece la variabile "numero" la dichiaro all'inizio il compilatore mi da anche errore 96. conflicting declarations for variable "_numero".
Non riesco a capire dove sbaglio, ho allegato il codice.
Come processore uso un 16F877A montato su Freedom II.
Il compilatore e' il Hi-TECH 9.83 e l'MPLAB IDE 8.85.
Grazie per un consiglio
Lello
il compilatore mi da errore 119.1 function declared implicit int alla riga della funzione ""Scompone_dato", se invece la variabile "numero" la dichiaro all'inizio il compilatore mi da anche errore 96. conflicting declarations for variable "_numero".
Non riesco a capire dove sbaglio, ho allegato il codice.
Come processore uso un 16F877A montato su Freedom II.
Il compilatore e' il Hi-TECH 9.83 e l'MPLAB IDE 8.85.
Grazie per un consiglio
Lello
Code:
//*************************************************
// modulo: main_g.c
// autore: egi
// data: 21 maggio 2012
// Descrizione: mostro il valore di tensione letto dal AD623
// collegato su AN3 sul display LCD.
// La funzione "Scompone_dati" serve per scrivere su eeprom esterna
// picmicro: PIC16F877A
// clock: 20MHz
//************************************************
#define _LEGACY_HEADERS
#include <htc.h>
#define PIC_CLK 20000000 // quarzo a 20MHz
__CONFIG (HS & WDTDIS & PWRTEN & BORDIS & LVPDIS & DUNPROT & WRTEN & DEBUGDIS & UNPROTECT);
#include "settings.h"
#include "delay.c"
#include "lcd.c"
#include "i2c.c"
#include "eeprom_external.c"
unsigned int numero=0;
unsigned int tensione=0; // valore convertito in tensione
unsigned int ByteH=0; // Byte Alto
unsigned int ByteL=0; // Byte Basso
unsigned char deviceid = 0x00; // Indirizzo del dispositivo eeprom esterna
unsigned char address= 0x00; // indirizzo di partenza della cella della eeprom
// Scompone il numero in due Byte
void Scompone_Dato(unsigned int numero)
{
// il byte basso (BL) sono gli 8 bit più a destra del valore a 16 bit
// il byte alto (BH) sono gli 8 bit più a sinistra del valore a 16 bit
// anche se BH e BL sono valori ad 8 bit, li devo comunque definire come se fossero a 16 bit
ByteH = numero >> 8; // sposto il valore di 8 bit a destra
ByteL = numero & 0xFF; // metto a zero gli 8 bit più a sinistra
cicalino=ON;
DelayMs(250);
cicalino=OFF;
}
// Funzione di salvataggio del numero nelle variabili ByteH e ByteL su eeprom
void Salva_Dati()
{
I2cInitMaster(); // avvio il modulo MSSP in modalità I2C master
//-----------------------------------------
// scrittura del dato nella memoria eeprom
//-----------------------------------------
eee_write_byte(deviceid, address, ByteH); // scrivo la parte alta
DelayMs(5); // ogni byte ci mette circa 5mS per essere scritto
//address++; // incremento di 1 l'indirizzo della cella
eee_write_byte(deviceid, address+1, ByteL); // scrivo la parte bassa nella cella successiva
DelayMs(5); // ogni byte ci mette circa 5mS per essere scritto
// mi posiziono per scrivere il valore numerico
LCD_GOTO(1,1);
// scrivo sul display i valori di BH e di BL
LCD_PUTS("BL:");
LCD_PUTUN(ByteL);
LCD_PUTS(" BH:");
LCD_PUTUN(ByteH);
cicalino=ON;
DelayMs(250);
cicalino=OFF;
I2cStop(); //fine trasmissione
}
// Funzione di lettura dei dati nelle variabili ByteH e ByteL
void Legge_Dati( )
{
I2cInitMaster(); // avvio il modulo MSSP in modalità I2C master
//---------------------------------------
// lettura delle celle di memoria eeprom
//---------------------------------------
ByteH = eee_read_byte(deviceid, address); // leggo il valore contenuto nella cella 1
//address--; // decrementa di 1 l'indirizzo della cella
ByteL = eee_read_byte(deviceid, address+1); // leggo il valore contenuto nella cella precedente
//address--; // decrementa di 1 l'indirizzo della cella
// ricompongo il numero a 16 bit partendo dai due valori ByteL e ByteH
unsigned int numero_ricomposto = 0; // numero iniziale
numero_ricomposto = ByteL | (ByteH<<8);
cicalino=ON;
DelayMs(250);
cicalino=OFF;
I2cStop(); //fine trasmissione
}
//==================================
// Programma Principale
//==================================
void main(void)
{
extern int numero; // valore da convertire in volt
BL=1; // abilito retroilluminazione LCD dove presente
LCD_INIT(); // inizializzo l'LCD
DelayMs(100); // piccolo ritardo iniziale
LCD_CLEAR(); // ripulisco il display
LCD_GOTO(2,1); // posiziono il cursore sull'LCD: riga2, colonna1
LCD_PUTS("Tensione :");
while(True)
{
// do un piccolo ritardo per permettere a CHOLD di caricarsi correttamente,
// come spiegato nella parte introduttiva di questo capitolo
DelayUs(20);
ADGO=1; // avvio la conversione
// ciclo di continuo fino a che ADGO non diventa zero, segnalandomi la fine conversione
while(ADGO)
{continue;}
// mi calcolo il valore numerico restituito dal convertitore
// tenendo conto che ho scelto la giustificazione a sinistra
numero=ADRESL + (ADRESH<<8);
Scompone_dato(numero);
Salva_Dati();
Legge_Dati();
// mi posiziono per scrivere il valore numerico
LCD_GOTO(1,1);
// scrivo sul display i valori di BH e di BL
LCD_PUTS("BL:");
LCD_PUTUN(ByteL);
LCD_PUTS(" BH:");
LCD_PUTUN(ByteH);
// scrivo sul display i valori di BH e di BL
//LCD_PUTUN(valore);
// cancello parte restante, questo per evitare che mi trascino caratteri sull'LCD
// quando da un numero a più cifre passo a un numero con meno cifre
LCD_PUTS(" ");
tensione=numero*5; // valore in millivolt, ricordiamo che ogni bit vale circa 5mV
LCD_GOTO(2,11);
LCD_PUTUN(tensione/1000); // parte intera dei volts
LCD_PUTS(".");
LCD_PUTUN(tensione%1000); // parte decimale
LCD_PUTS("V ");
}
}
Si prega Accesso o Crea un account a partecipare alla conversazione.
12 Anni 11 Mesi fa - 12 Anni 11 Mesi fa #2
da Mauro Laurenti
Risposta da Mauro Laurenti al topic Re: Errore 119.1 function declared implicit int
perche' definisci la variabile come extern?
Numero la definisci come int e nella funzione la dichiari unsigned int.
Non permettere casting inutili.
le variabili byte definiscile come unsigned char e non come int.
per scrivere un int in un byte (ovvero unsigned char) fai uso del casting.
Saluti,
Mauro
Code:
extern int numero;
Numero la definisci come int e nella funzione la dichiari unsigned int.
Non permettere casting inutili.
le variabili byte definiscile come unsigned char e non come int.
per scrivere un int in un byte (ovvero unsigned char) fai uso del casting.
Code:
mio_char = (unsigned char) mio_int
Saluti,
Mauro
Ultima Modifica 12 Anni 11 Mesi fa da Mauro Laurenti.
Si prega Accesso o Crea un account a partecipare alla conversazione.
- Lello Guidi
-
Autore della discussione
- Platino Utente
-
12 Anni 11 Mesi fa - 12 Anni 11 Mesi fa #3
da Lello Guidi
Risposta da Lello Guidi al topic Re: Errore 119.1 function declared implicit int
Mauro Laurenti ha scritto: perche' definisci la variabile come extern?
Code:extern int numero;Numero la definisci come int e nella funzione la dichiari unsigned int.Per renderla visibile a tutte le funzioni.
Non permettere casting inutili.le variabili byte definiscile come unsigned char e non come int.Cosa significa "Casting", so il significato legato alla moda ma nei listati e' un termine nuovo e mi prendi in contropiede
per scrivere un int in un byte (ovvero unsigned char) fai uso del casting.
Code:mio_char = (unsigned char) mio_int
Saluti,
Mauro
Grazie dell'aiuto, provvedo alle modifiche.
Saluti
Lello
Ultima Modifica 12 Anni 11 Mesi fa da Lello Guidi. Motivo: errore ortografico
Si prega Accesso o Crea un account a partecipare alla conversazione.
- Lello Guidi
-
Autore della discussione
- Platino Utente
-
12 Anni 11 Mesi fa #4
da Lello Guidi
Risposta da Lello Guidi al topic Re: Errore 119.1 function declared implicit int
Dopo fatte le correzioni, quando lo compilo mi da sempre e solo errore "119.1 function declared implicit int" alla riga della funzione "Scompone_dato".
Il listato modificato e' il seguente:
Il listato modificato e' il seguente:
Code:
//*************************************************
// modulo: main_g.c
// autore: egi
// data: 21 maggio 2012
// Descrizione: mostro il valore di tensione letto dal AD623
// collegato su AN3 sul display LCD.
// La funzione "Scompone_dati" serve per scrivere su eeprom esterna
// picmicro: PIC16F877A
// clock: 20MHz
//************************************************
#define _LEGACY_HEADERS
#include <htc.h>
#define PIC_CLK 20000000 // quarzo a 20MHz
__CONFIG (HS & WDTDIS & PWRTEN & BORDIS & LVPDIS & DUNPROT & WRTEN & DEBUGDIS & UNPROTECT);
#include "settings.h"
#include "delay.c"
#include "lcd.c"
#include "i2c.c"
#include "eeprom_external.c"
int numero=0;
unsigned int tensione=0; // valore convertito in tensione
unsigned char ByteH=0; // Byte Alto
unsigned char ByteL=0; // Byte Basso
unsigned char deviceid = 0x00; // Indirizzo del dispositivo eeprom esterna
unsigned char address= 0x00; // indirizzo di partenza della cella della eeprom
// Scompone il numero in due Byte
void Scompone_Dato(int numero)
{
// il byte basso (BL) sono gli 8 bit più a destra del valore a 16 bit
// il byte alto (BH) sono gli 8 bit più a sinistra del valore a 16 bit
// anche se BH e BL sono valori ad 8 bit, li devo comunque definire come se fossero a 16 bit
ByteH = numero >> 8; // sposto il valore di 8 bit a destra
ByteL = numero & 0xFF; // metto a zero gli 8 bit più a sinistra
cicalino=ON;
DelayMs(250);
cicalino=OFF;
}
// Funzione di salvataggio del numero nelle variabili ByteH e ByteL su eeprom
void Salva_Dati()
{
I2cInitMaster(); // avvio il modulo MSSP in modalità I2C master
//-----------------------------------------
// scrittura del dato nella memoria eeprom
//-----------------------------------------
eee_write_byte(deviceid, address, ByteH); // scrivo la parte alta
DelayMs(5); // ogni byte ci mette circa 5mS per essere scritto
//address++; // incremento di 1 l'indirizzo della cella
eee_write_byte(deviceid, address+1, ByteL); // scrivo la parte bassa nella cella successiva
DelayMs(5); // ogni byte ci mette circa 5mS per essere scritto
// mi posiziono per scrivere il valore numerico
LCD_GOTO(1,1);
// scrivo sul display i valori di BH e di BL
LCD_PUTS("BL:");
LCD_PUTUN(ByteL);
LCD_PUTS(" BH:");
LCD_PUTUN(ByteH);
cicalino=ON;
DelayMs(250);
cicalino=OFF;
I2cStop(); //fine trasmissione
}
// Funzione di lettura dei dati nelle variabili ByteH e ByteL
void Legge_Dati( )
{
I2cInitMaster(); // avvio il modulo MSSP in modalità I2C master
//---------------------------------------
// lettura delle celle di memoria eeprom
//---------------------------------------
ByteH = eee_read_byte(deviceid, address); // leggo il valore contenuto nella cella 1
//address--; // decrementa di 1 l'indirizzo della cella
ByteL = eee_read_byte(deviceid, address+1); // leggo il valore contenuto nella cella precedente
//address--; // decrementa di 1 l'indirizzo della cella
// ricompongo il numero a 16 bit partendo dai due valori ByteL e ByteH
unsigned int numero_ricomposto = 0; // numero iniziale
numero_ricomposto = ByteL | (ByteH<<8);
cicalino=ON;
DelayMs(250);
cicalino=OFF;
I2cStop(); //fine trasmissione
}
//==================================
// Programma Principale
//==================================
void main(void)
{
settings();
BL=1; // abilito retroilluminazione LCD dove presente
LCD_INIT(); // inizializzo l'LCD
DelayMs(100); // piccolo ritardo iniziale
LCD_CLEAR(); // ripulisco il display
LCD_GOTO(2,1); // posiziono il cursore sull'LCD: riga2, colonna1
LCD_PUTS("Tensione :");
while(True)
{
// do un piccolo ritardo per permettere a CHOLD di caricarsi correttamente,
// come spiegato nella parte introduttiva di questo capitolo
DelayUs(20);
ADGO=1; // avvio la conversione
// ciclo di continuo fino a che ADGO non diventa zero, segnalandomi la fine conversione
while(ADGO)
{continue;}
// mi calcolo il valore numerico restituito dal convertitore
// tenendo conto che ho scelto la giustificazione a sinistra
numero=ADRESL + (ADRESH<<8);
Scompone_dato(int numero);
Salva_Dati();
Legge_Dati();
// mi posiziono per scrivere il valore numerico
LCD_GOTO(1,1);
// scrivo sul display i valori di BH e di BL
LCD_PUTS("BL:");
LCD_PUTUN(ByteL);
LCD_PUTS(" BH:");
LCD_PUTUN(ByteH);
// scrivo sul display i valori di BH e di BL
//LCD_PUTUN(valore);
// cancello parte restante, questo per evitare che mi trascino caratteri sull'LCD
// quando da un numero a più cifre passo a un numero con meno cifre
LCD_PUTS(" ");
tensione=numero*5; // valore in millivolt, ricordiamo che ogni bit vale circa 5mV
LCD_GOTO(2,11);
LCD_PUTUN(tensione/1000); // parte intera dei volts
LCD_PUTS(".");
LCD_PUTUN(tensione%1000); // parte decimale
LCD_PUTS("V ");
}
}
Si prega Accesso o Crea un account a partecipare alla conversazione.
12 Anni 11 Mesi fa #5
da Mauro Laurenti
Risposta da Mauro Laurenti al topic Re: Errore 119.1 function declared implicit int
Ciao,
il problema potrebbe essere legato al fatto che tu hai una variabile numero globale e poi dichiari la variabile numero anche nella funzione coprendo la principale.
Prova a chiamare la variabile numero della funzione, come valore.
Saluti,
Mauro
il problema potrebbe essere legato al fatto che tu hai una variabile numero globale e poi dichiari la variabile numero anche nella funzione coprendo la principale.
Prova a chiamare la variabile numero della funzione, come valore.
Saluti,
Mauro
Si prega Accesso o Crea un account a partecipare alla conversazione.
Moderatori: Mauro Laurenti, StefA
Registrati al sito
Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.
Forum - Ultimi messaggi
-
- progetto can
- da marcelloraja
-
- MODULO GSM SIM900A
- da Mauro Laurenti
-
- Freedom III e compilazioni fallite
- da Mauro Laurenti
-
- Gestione degli errori su comunicazione seriale
- da Mauro Laurenti
-
- Timer0 e interrupt
- da Mauro Laurenti