View Full Version : [C] puntatori, non capisco questo operazione
ptVic_registers = (PVIC_REGISTERS)Addr_vic
Cosa fa questa riga ?
PVIC_REGISTERS è un puntatore ad una struttura.
ptVic_registers = (PVIC_REGISTERS)Addr_vic
Cosa fa questa riga ?
PVIC_REGISTERS è un puntatore ad una struttura.È un "cast", una conversione di tipo esplicita.
Nel tuo caso è una conversione tra 2 puntatori di tipo diverso.
typedef unsigned int UI32;
typedef struct NETX_GPIOtag
{
volatile UI32 auiCFG[16];
volatile UI32 auiTC[16];
volatile UI32 auiCOUNTER_CONTROL[5];
volatile UI32 auiCOUNTER_MAX[5];
volatile UI32 auiCOUNTER_CURRENT[5];
volatile UI32 uiIRQ_MASK_SET;
volatile UI32 uiIRQ_MASK_CLR;
volatile UI32 uiSYSTIME_NS_CMP;
volatile UI32 uiLINE_OUT;
volatile UI32 uiLINE_IN;
volatile UI32 uiIRQ;
} NETX_GPIO;
static NETX_GPIO* s_ptGPIO = (NETX_GPIO*)0x00100800;
Anche questa mi è poco chiara. Credo crei un puntatore ma mi è poco chiaro il meccanismo.
static NETX_GPIO* s_ptGPIO = (NETX_GPIO*)0x00100800;
Anche questa mi è poco chiara. Credo crei un puntatore ma mi è poco chiaro il meccanismo.Credi giusto, viene definita una variabile s_ptGPIO che è un puntatore alla struttura NETX_GPIO. La variabile viene inizializzata con un indirizzo costante e in questo caso si presuppone la conoscenza della architettura della macchina e delle zone di memoria.
L'indirizzo a cui viene inizializzato il puntatore è il primo registro di configurazione per le porte GPIO della macchina su cui sto lavorando.
Più avanti si trovano istruzioni di questo tipo:
s_ptGPIO->auiCOUNTER_CONTROL[ulCounter] = 0;
Dove in ulCounter va un "offset" del registro da configurare rispetto a quello iniziale in questo caso 0x80.
Se sommo 0x80 all'indirizzo inizializzato dovrei ottenere l'indirizzo del registro su cui mi interessa operare, giusto ?
Più avanti si trovano istruzioni di questo tipo:
s_ptGPIO->auiCOUNTER_CONTROL[ulCounter] = 0;
Dove in ulCounter va un "offset" del registro da configurare rispetto a quello iniziale in questo caso 0x80.
Se sommo 0x80 all'indirizzo inizializzato dovrei ottenere l'indirizzo del registro su cui mi interessa operare, giusto ?No.
auiCOUNTER_CONTROL è un campo della struttura formato da 5 valori di tipo UI32. Quindi ulCounter può essere 0...4.
No.
auiCOUNTER_CONTROL è un campo della struttura formato da 5 valori di tipo UI32. Quindi ulCounter può essere 0...4.
Grazie, è proprio cosi. C'è un errore nel file h che fornisce il produttore della macchina :D
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.