× MSP430, Microcontrollori 16 bit Ultra Low Power

[CCS - C] Aritmetica dei puntatori

9 Anni 8 Mesi fa #1 da nicolapc
[CCS - C] Aritmetica dei puntatori è stato creato da nicolapc
Ciao a tutti, vi espongo il mio quesito.
Ho implementato una routine:
pin_high (porta,pin);
la quale, a seconda del valore di "porta" (1 o 2) porta alto il piedino "pin" (0..7) del MSP430(g2553).
Adesso che voglio riscriverla in maniera piu' compatta e "veloce" ho fatto questo:

void pin_high ( char porta, char pin)
{
char bi;
char *pinOUT ;
char *pinDIR ;

porta <<= 3 ; // = porta * 8 , cioe' 0x8 o 0x10
bi = ( 1 << pin);

pinOUT = 0x19 + porta ; // a seconda di porta diventa 0x21 o 0x29, cioe' P1OUT o P2OUT
pinDIR = 0x1A + porta ; // a seconda di porta diventa 0x22 o 0x2A, cioe' P1DIR o P2DIR

*pinOUT |= bi; //set uscita alta
*pinDIR |= bi; //set come output
}

in pratica ho eliminato il vecchio switch - case e punto direttamente alla memoria del MSP.
Al momento sembra funzionare tutto, ma in compilazione (CCS 6.0) ho questi warning:

"../main.c", line 44: warning #515-D: a value of type "int" cannot be assigned to an entity of type "char *"

alla altezza delle righe in cui faccio
pinOUT = 0x19 + porta ; // a seconda di porta diventa 0x21 o 0x29, cioe' P1OUT o P2OUT
pinDIR = 0x1A + porta ; // a seconda di porta diventa 0x22 o 0x2A, cioe' P1DIR o P2DIR

cosa significano quei warning? Come posso toglierli?

Ciao e grazie,

Nico

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

  • nicolapc
  • New Member
  • New Member
Di più
9 Anni 8 Mesi fa #2 da Mauro Laurenti
Risposta da Mauro Laurenti al topic [CCS - C] Aritmetica dei puntatori

Rendering Error in layout Message/Item: array_keys(): Argument #1 ($array) must be of type array, null given. Please enable debug mode for more information.

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

  • Mauro Laurenti
  • Avatar di Mauro Laurenti
  • Moderator
  • Moderator
Di più
9 Anni 8 Mesi fa #3 da nicolapc
Risposta da nicolapc al topic [CCS - C] Aritmetica dei puntatori
Hai ragione, cosi' funziona. Avevo sospettato qualcosa di simile, ma non sapevo che nel (char) ci si potesse mettere l'asterisco. Bisogna proprio che mi rilegga il K&R..!

Grazie per la soluzione al mio problema e per la rapidita' con cui l'hai fornita, ciao.

Nico

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

  • nicolapc
  • New Member
  • New Member
Di più
9 Anni 8 Mesi fa #4 da Mauro Laurenti
Risposta da Mauro Laurenti al topic [CCS - C] Aritmetica dei puntatori
Ciao Nico,

effettivamente l´asterisco appartiene al tipo e non al nome della variabile.

Infatti il compilatore, nel messaggio di warning, parla di tipo int e tipo char *.
I puntatori sono infatti un altro tipo di variabile.

Saluti,

Mauro

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

  • Mauro Laurenti
  • Avatar di Mauro Laurenti
  • Moderator
  • Moderator
Di più
9 Anni 8 Mesi fa #5 da nicolapc
Risposta da nicolapc al topic [CCS - C] Aritmetica dei puntatori
Si', in effetti i puntatori sono per me ancora grande fonte di confusione.
Confermo il fatto che sia la promozione a intero della costante, perche' eliminando le seconde parentesi cosi':

pinOUT = (char *) 0x19 + porta ; // a seconda di porta diventa 0x21 o 0x29, cioe' P1OUT o P2OUT

e quindi facendo il cast della sola costante, la compilazione avviene senza warning e tutto funziona.
Pensavo - sbagliando - che il compilatore infilasse le costanti nel piu' piccolo formato in grado di contenerle, pero' come giustamente mi facevi notare, i registri del device sono a 16bit...

Ciao e grazie per il tuo tempo,

Nico.

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

  • nicolapc
  • New Member
  • New Member
Di più
Moderatori: Mauro LaurentiMatteo Garia

Registrati al sito

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

Registrati al sito LaurTec.

Login