Explique, por favor, defina esto

0
#define POKE(addr, val) (*(volatile unsigned int *)(addr) = (val))
#define POKE_AND(addr, val) (*(volatile unsigned int *)(addr) &= (val))
#define POKE_OR(addr, val) (*(volatile unsigned int *)(addr) |= (val))

No entiendo qué significa

POKE(addr, val) (*(volatile unsigned int *)(addr) = (val))
POKE_AND(addr, val) (*(volatile unsigned int *)(addr) &= (val))
POKE_OR(addr, val) (*(volatile unsigned int *)(addr) |= (val))

por ejemplo cuando llamo a la función

ulVal  = PEEK(NETX_IO_CFG);

donde NETX_IO_CFG

#define NETX_IO_CFG     0x00100004U
    
pregunta user3826752

2 respuestas

2

define tiene dos prácticas que se pueden usar para definir una constante:

#define PI (3.14)

o se puede usar para definir macros (de alguna manera parecen funciones) y está integrado directamente en el código, por lo que no hay ninguna sobrecarga de llamada de función como en:

#define MAX(a, b) ((a) > (b) ? (a) : (b))

en este caso,

#define POKE(addr, val) (*(volatile unsigned int *)(addr) = (val))

es una macro (como una función) para almacenar val en la dirección addr usando el concepto de punteros

enlace

    
respondido por el Sabir Moglad
2

aquí se está utilizando la forma de declarar una macro en C compiladores. el compilador cambia la expresión POKE (addr, val) por * (int inestable volátil *) (addr) = (val) en el código que significa asignar la variable val a referenciado y emitido ((int inestable volátil *)) puntero addr , etc. para los restos. Lo siento, el inglés no es mi primer idioma.

    
respondido por el user57657

Lea otras preguntas en las etiquetas