Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

passare enum come risposta ad una funzione

Raccolta di codici sorgenti

Moderatore: Foto UtentePaolino

0
voti

[1] passare enum come risposta ad una funzione

Messaggioda Foto Utentelelerelele » 8 mar 2015, 10:13

Buona giornata a tutti.

Visto che uso questa tecnica in programmazione lato PC, mi chiedo se posso usarla anche con mplabx sui PIC.


cioè riesco ad avere come risposta ad una funzione un elenco di enum?

tipo questo

sul file header
Codice: Seleziona tutto
typedef enum Errori_Var
{
NessunErrore,RicezioneAckFallito,ByteNull 
}erroriI2C;


routine chiamata
Codice: Seleziona tutto
erroriI2C AcK_Read(void)
{

.......

     if (k==0xFFFF) return erroriI2C.RicezioneAckFallito;
    else erroriI2C.NessunErrore
   
    };



e sulla routine chiamante
Codice: Seleziona tutto
if (AcK_Read()==erroriI2C.RicezioneAckFallito) return 0;


gli errori che mi da sono questi:

Main.c:58: error: (193) not a variable identifier "erroriI2C"
Main.c:58: error: (196) struct/union required
Main.c:58: error: (206) illegal use of void expression

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

ovvio che sbaglio qualcosa.

Se mi potete indicare dove sarebbe ottimo.

intanto saluto tutti. O_/
Avatar utente
Foto Utentelelerelele
4.899 3 7 9
Master
Master
 
Messaggi: 5505
Iscritto il: 8 giu 2011, 8:57
Località: Reggio Emilia

1
voti

[2] Re: passare enum come risposta ad una funzione

Messaggioda Foto Utentebobina » 8 mar 2015, 11:52

che compilatore stai usando XC8, XC16 o XC32?

EDIT
Ho fatto dei test con il gcc e così:

Codice: Seleziona tutto
erroriI2C AcK_Read(void)
{
return RicezioneAckFallito;
}

La compilazione va a buon fine, penso che dovrebbe andare anche sui compilatore XC, faccio dei test e ti dico

EDIT2
Sia con XC8 che con XC32, al momento non riesco ad installare XC16 la compilazione va a buon fine.
Quindi per usare un enum basta usare il nome senza il tipodati definito.
Una volta che viene definito un tipodati andrebbe definita una variabile con quel tipo:

erroriI2C varia;

e poi usato con varia.RicezioneAckFallito ma anche questo modo non va, l'unico modo è usarlo diretto
Avatar utente
Foto Utentebobina
212 6
Frequentatore
Frequentatore
 
Messaggi: 177
Iscritto il: 27 dic 2009, 14:22

2
voti

[3] Re: passare enum come risposta ad una funzione

Messaggioda Foto UtenteDirtyDeeds » 8 mar 2015, 14:14

Gli errori dati dal compilatore ti dicono dov'è il problema: un'enumerazione non è una struttura e la scrittura

Codice: Seleziona tutto
erroriI2C.RicezioneAckFallito


non ha senso.

Il codice

Codice: Seleziona tutto
erroriI2C AcK_Read(void)
{

.......

    if (k==0xFFFF) return erroriI2C.RicezioneAckFallito;
    else erroriI2C.NessunErrore
   
};


deve essere modificato in

Codice: Seleziona tutto
erroriI2C AcK_Read(void)
{

.......

    if (k == 0xFFFF)
      return RicezioneAckFallito;
    else 
      return NessunErrore
};


Il codice

Codice: Seleziona tutto
if (AcK_Read()==erroriI2C.RicezioneAckFallito) return 0;


deve diventare

Codice: Seleziona tutto
if (AcK_Read() == RicezioneAckFallito)
  return 0;
It's a sin to write sin instead of \sin (Anonimo).
...'cos you know that cos ain't \cos, right?
You won't get a sexy tan if you write tan in lieu of \tan.
Take a log for a fireplace, but don't take log for \logarithm.
Avatar utente
Foto UtenteDirtyDeeds
55,9k 7 11 13
G.Master EY
G.Master EY
 
Messaggi: 7012
Iscritto il: 13 apr 2010, 16:13
Località: Somewhere in nowhere

0
voti

[4] Re: passare enum come risposta ad una funzione

Messaggioda Foto Utentelelerelele » 9 mar 2015, 10:44

bobina ha scritto:che compilatore stai usando XC8, XC16 o XC32?


Hai perfettamente ragione.....non ho messo il compilatore, uso XC8.

bobina ha scritto:Quindi per usare un enum basta usare il nome senza il tipodati definito.
Una volta che viene definito un tipodati andrebbe definita una variabile con quel tipo:

erroriI2C varia;

e poi usato con varia.RicezioneAckFallito ma anche questo modo non va, l'unico modo è usarlo diretto

In effetti ho letto qualcosa in merito ma non sono riuscito ad applicarlo.

DirtyDeeds ha scritto:Gli errori dati dal compilatore ti dicono dov'è il problema: un'enumerazione non è una struttura e la scrittura

Codice: Seleziona tutto
erroriI2C.RicezioneAckFallito


non ha senso.


Ah. quindi se ho capito questa scrittura sarebbe da utilizzare quando la enum fosse in realtà una struct e quindi al suo interno avrei delle variabili, a cui assegnare de valori.

Ottimo! ho realizzato le modifiche indicate da Foto UtenteDirtyDeeds ed il risultato è stato brillante!
Riesco a gestire gli errori in modo ottimale.

Grande. Non avevo dubbi.

Ringrazio Foto UtenteDirtyDeeds e Foto Utentebobina per l'aiuto fornitomi, è sempre utile imparare cose nuove.

saluti.
Avatar utente
Foto Utentelelerelele
4.899 3 7 9
Master
Master
 
Messaggi: 5505
Iscritto il: 8 giu 2011, 8:57
Località: Reggio Emilia


Torna a Firmware e programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 4 ospiti