Estoy tratando de entender algún código de controlador de kernel de Linux escrito en C para un adaptador de Wi-Fi USB. Línea 1456
en el archivo /drivers/net/wireless/rtl818x/rtl8187/dev.c
(por si acaso alguien quisiera hacer referencia al código del núcleo de contexto) se lee:código C, ¿por qué la dirección 0xFF00 se convierte en una estructura?
priv->map = (struct rtl818x_csr *)0xFF00;
Tengo curiosidad acerca de lo que el operando de la derecha está haciendo aquí - (struct rtl818x_csr *)0xFF00;
. He estado interpretando esto como diciendo "enviar dirección de memoria 0xFF00
para que sea del tipo rtl818x_csr
y luego asignarlo a priv->map
". Si mi interpretación es correcta, ¿qué tiene de especial la dirección de memoria 0xFF00
para que el controlador pueda decir con certeza que lo que busca siempre estará en esta dirección? La otra cosa que me interesa es que 0xFF00 solo tiene 16 bits. Esperaría 32/64 bits si estuviese emitiendo una dirección de memoria.
¿Alguien puede aclarar exactamente qué está pasando en esta línea de código? Me imagino que hay un error en mi comprensión de la sintaxis C.
Parece que el registro de control/estado para el chipset RTL818x está mapeado en memoria para direccionar 0xFF00. –