warning

8 Anni 9 Mesi fa #6 da Mauro Laurenti
Risposta da Mauro Laurenti al topic warning
Si alcune funzione potrebbero non essere chiamate, ma normalmente non sono segnalate le warning se non si hanno livelli di ottimizzazione e livelli warning elevati.
La versione Free del compilatore XC8 non dovrebbe mostrare quelle warning.

Saluti,

Mauro

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • Mauro Laurenti
  • Avatar di Mauro Laurenti
  • Moderator
  • Moderator
Di più
7 Anni 9 Mesi fa #7 da Black
Risposta da Black al topic warning
Rispolvero questo vecchio thread per indicare un comportamento strano che mi sta capitando riguardo ai warning riportati dopo la compilazione.

Ho creato 2 funzioni InitTimer0(char) e InitTimer2(char) che inizializzano i timer 0 e 2.
La funzione altro non fa che caricare il parametro passato con la chiamata (di tipo char come si vede sopra) nel registro di configurazione del relativo timer.
I parametri sono costituiti da costanti definite nello header e sono tra loro combinate con un AND (&). In pratica le chiamate alle funzioni sono queste:

InitTimer0(T0_16BIT & T0_INTERN & T0_PS_256);
InitTimer2(T2_PS_16 & T2_TS_16);

dove T0_16BIT, T0_INTERN, T0_PS_256 e T2_PS_16, T2_TS_16 sono parametri costanti combinati appunto tra loro con un "&".

La cosa strana è che la funzione InitTimer0() non dà alcun problema, mentre la funzione InitTimer2() produce il seguente warning:

main.c:39: warning: (752) conversion to shorter data type

Già spiegare questo comportamento è piuttosto strano. Ancora più strano è il fatto che ho scoperto che i warning vengono generati solo quando le costanti combinate con AND sono in numero pari. Infatti, la prima funzione non dà alcun problema (3 costanti combinate) mentre la seconda funzione si (2 costanti). Ho sostituito le costanti passate nella seconda funzione in numero pari a 2, 3, 4, 5 e 6. Ma niente. Il warning viene generato con con costanti in numero pari e non in numero dispari. In pratica, relativamente alla seconda funzione (ma questo vale anche per la prima):

NON vengono generati warning in questi casi:

InitTimer2(T2_PS_16 & T2_TS_16 & 0xFF);
InitTimer2(T2_PS_16 & T2_TS_16 & T2_TS_16);
InitTimer2(T2_PS_16 & T2_TS_16 & T2_TS_16 & T2_TS_16 & T2_TS_16);
ecc.

Generano il warning le seguenti funzioni:

InitTimer2(T2_PS_16 & T2_TS_16);
InitTimer2(T2_PS_16 & T2_TS_16 & T2_PS_16 & T2_TS_16);
InitTimer2(T2_PS_16 & T2_TS_16 & T2_PS_16 & T2_TS_16 & T2_PS_16 & T2_TS_16);

Qualcuno sa il motivo di questo comportamento?

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • Black
  • Avatar di Black
  • New Member
  • New Member
Di più
Moderatori: Mauro LaurentiPinnaStefAMatteo Garia

Registrati al sito

Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.

Registrati al sito LaurTec.

Login