Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Nomi dei registri e .h

Raccolta di codici sorgenti

Moderatore: Foto UtentePaolino

0
voti

[1] Nomi dei registri e .h

Messaggioda Foto Utentewizard » 23 mar 2014, 11:05

Salve, uso da poco MPLABX e XC8 come compilatore
Ho il seguente problema: se scrivo

Codice: Seleziona tutto
TRISBbits.RB2=1;

nel main non ho problemi; tuttavia se sposto la scritta in un qualsiasi .h mi dà i seguenti errori
Questi si verificano per qualsiasi registro io scelga

power_width_modulation.h:14: warning: (374) missing basic type; int assumed
power_width_modulation.h:14: error: (984) type redeclared
power_width_modulation.h:14: error: (1098) conflicting declarations for variable "TRISBbits" (power_width_modulation.h:14)


Non riesco a capire cosa ridichiaro visto che è la prima volta che lo uso in tutto il progetto
Qualcuno ha mai trovato un problema del genere?

Annuncio che tra le svariate prove fatte, ho anche creato una nuova libreria che mi ridefinisse i registri e, giustamente, il compilatore mi dice che ci sono 2 dichiaraioni diverse dello stesso nome. Da ciò ho dedotto che il problema potrebbe essere dovuto al .h pic18f4550 che mi crea di default non appena creo il progetto.
Quindi una prova che vorrei fare è quella di fare in modo che escluda la lettura da questo file e mi vada a leggere dalla libreria creata da me...qualcuno sa come farlo?
Avatar utente
Foto Utentewizard
25 1 5
Frequentatore
Frequentatore
 
Messaggi: 138
Iscritto il: 12 gen 2013, 17:48

0
voti

[2] Re: Nomi dei registri e .h

Messaggioda Foto Utentec1b8 » 23 mar 2014, 11:42

Ho finalmente installato MPLab X, se posti tutto il codice posso fare qualche prova...
Fabio
Avatar utente
Foto Utentec1b8
3.595 3 8 13
G.Master EY
G.Master EY
 
Messaggi: 1770
Iscritto il: 15 gen 2009, 15:23

0
voti

[3] Re: Nomi dei registri e .h

Messaggioda Foto Utentewizard » 23 mar 2014, 11:51

ciao, sempre tu in mio soccorso :lol:
Allora, se faccio così va bene
Codice: Seleziona tutto
#include <xc.h>
#include "pic_config.h"
#include "power_width_modulation.h"

void main(void)
{
TRISBbits.TRISB2=0;
}


Se faccio così mi dà errore
Codice: Seleziona tutto
#ifndef POWER_WIDTH_MODULATION_H
#define   POWER_WIDTH_MODULATION_H

#include <xc.h>

TRISBbits.TRISB2=0;

#endif   /* POWER_WIDTH_MODULATION_H */
Avatar utente
Foto Utentewizard
25 1 5
Frequentatore
Frequentatore
 
Messaggi: 138
Iscritto il: 12 gen 2013, 17:48

2
voti

[4] Re: Nomi dei registri e .h

Messaggioda Foto Utentec1b8 » 23 mar 2014, 12:06

wizard ha scritto:ciao, sempre tu in mio soccorso :lol:

Ciao, già! mi spiace :mrgreen:

Non puoi scrivere
Codice: Seleziona tutto
TRISBbits.TRISB2=0;
così nel "nulla", devi metterlo dentro una funzione o una routine.
Lo stesso errore lo avresti anche se si trovasse in un .c ma all'esterno delle funzioni.
Fabio
Avatar utente
Foto Utentec1b8
3.595 3 8 13
G.Master EY
G.Master EY
 
Messaggi: 1770
Iscritto il: 15 gen 2009, 15:23

0
voti

[5] Re: Nomi dei registri e .h

Messaggioda Foto Utentewizard » 23 mar 2014, 12:10

c1b8 ha scritto:Ciao, già! mi spiace

:lol: no invece fa piacere avere una sorta di angelo custode :D

Ora va bene :roll: ma questa cosa mi risulta strana perché col C18 la potevo fare tranquillamente...perché c'è bisogno di metterla in una funzione?
Avatar utente
Foto Utentewizard
25 1 5
Frequentatore
Frequentatore
 
Messaggi: 138
Iscritto il: 12 gen 2013, 17:48

2
voti

[6] Re: Nomi dei registri e .h

Messaggioda Foto Utentec1b8 » 23 mar 2014, 14:05

Quello che puoi fare esternamente alle funzioni/routine è dichiarare una variabile o una struttura
Codice: Seleziona tutto
int pippo;

ed eventualmente inizializzarla:
Codice: Seleziona tutto
int pippo=0;

Dichiarazione ed inizializzazione devono essere contemporanee, una scrittura tipo:
Codice: Seleziona tutto
int pippo;
pippo=0;
è errata perché la seconda riga è una istruzione di assegnazione e non di inizializzazione e come tale deve essere eseguita internamente ad una routine/funzione.

Nel tuo caso stavi assegnado un valore ad un bit (TRISB2) in una riga diversa dalla dichiarazione del bit stesso.
Fabio
Avatar utente
Foto Utentec1b8
3.595 3 8 13
G.Master EY
G.Master EY
 
Messaggi: 1770
Iscritto il: 15 gen 2009, 15:23

0
voti

[7] Re: Nomi dei registri e .h

Messaggioda Foto UtenteEcoTan » 23 mar 2014, 14:24

c1b8 ha scritto:è una istruzione di assegnazione e non di inizializzazione e come tale deve essere eseguita internamente ad una routine/funzione.

Ho scritto qualche programmino in C (anche qui fra gli articoli mi è capitato di allegarne uno) per la verità programmando soltanto tramite imitazione e per tentativi, i registri li imposto tranquillamente all'inizio del main program e poi vado in loop, il resto del lavoro lo svolgono le ISR.
Dunque è di sbagliato? Intanto posso dire che funziona.
Avatar utente
Foto UtenteEcoTan
4.987 4 10 13
Expert EY
Expert EY
 
Messaggi: 2677
Iscritto il: 29 gen 2014, 8:54

0
voti

[8] Re: Nomi dei registri e .h

Messaggioda Foto Utentec1b8 » 23 mar 2014, 17:04

EcoTan ha scritto:Dunque è di sbagliato?
Non capisco la domanda, scusa.
Tieni presente che il main() è un routine, particolare ma è una routine.
Fabio
Avatar utente
Foto Utentec1b8
3.595 3 8 13
G.Master EY
G.Master EY
 
Messaggi: 1770
Iscritto il: 15 gen 2009, 15:23

0
voti

[9] Re: Nomi dei registri e .h

Messaggioda Foto UtenteEcoTan » 23 mar 2014, 18:43

OK grazie.
Avatar utente
Foto UtenteEcoTan
4.987 4 10 13
Expert EY
Expert EY
 
Messaggi: 2677
Iscritto il: 29 gen 2014, 8:54

0
voti

[10] Re: Nomi dei registri e .h

Messaggioda Foto Utentewizard » 23 mar 2014, 18:45

Grazie anche da parte mia Foto Utentec1b8 O_/
Avatar utente
Foto Utentewizard
25 1 5
Frequentatore
Frequentatore
 
Messaggi: 138
Iscritto il: 12 gen 2013, 17:48


Torna a Firmware e programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 0 ospiti