|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: Nov 2006
Città: Livorno
Messaggi: 15
|
[C]Delucidazioni sul casting
Salve a tutti,
vorrei che qualcuno mi interpretasse questa riga perche' io proprio non ci sono riuscito nonostante le ricerche piu' svariate... CODICE: *(volatile unsigned short *)&(((volatile unsigned char *)&(IMMV->out_proc))[30]) = SWAPWORD(DacMax+DACAdj1); L'unica cosa che so e' che la funzione SWAPWORD scambia tra loro la parte alta e quella bassa della Word passata come argomento. Il resto, ovvero quello strano casting iniziale e quella specie di assegnazione " -> " , non riesco ad inquadrarne bene il senso. Se qualcuno mi puo' aiutare, magari e' semplicissimo e sono un asino io :P, gli sarei molto grato CIAO! |
|
|
|
|
|
#2 | ||
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Quote:
Quote:
Quindi IMMV è un puntatore a una Struct/Union e con "->" si vuole dereferenziarlo (indirizzo base dove è stata allocata la particolare istanza della Struct puntata + offset del campo desisderato) per accedere al campo "out_proc". Questo è il massimo dell'aiuto che posso offrirti, per quello che ricordo del C :
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
||
|
|
|
|
|
#3 |
|
Junior Member
Iscritto dal: Nov 2006
Città: Livorno
Messaggi: 15
|
Grazie tante, sei stato molto chiaro...
SWAPWORD per la cronaca e' definita cosi': #define SWAPWORD(w) (HIBYTE((w)) | (LOBYTE((w)) << 8) dove #define LOBYTE(w) ((unsigned char)((unsigned long)(w) & 0xff)) #define HIBYTE(w) ((unsigned char)((unsigned long)(w) >> 8)) Da quel che si capisce la funzione prende la parte alta e quella bassa della word e le scambia una con l'altra, no? |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 08:35.



















