¿Cómo funcionan PEEK y POKE?

0

Tengo dos macros:

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

Qué hacen si los llamo así:

ulKey = PEEK(NETX_IO_CFG_ACCESS_KEY);
POKE(NETX_IO_CFG_ACCESS_KEY, ulKey);

Si #define NETX_IO_CFG_ACCESS_KEY 0x00100070U

    
pregunta user3826752

2 respuestas

2

fondo:

  

En informática,

     

PEEK es una extensión del lenguaje de programación BASIC que se usa para leer   Contenido de una celda de memoria en una dirección específica.

     

El comando correspondiente para configurar el contenido de una celda de memoria es POKE.

peek leerá el contenido de la dirección definida por:

#define NETX_IO_CFG_ACCESS_KEY     0x00100070U

y guárdelo en "ulKey", que se supone que es una variable declarada como int sin signo (como se define en el puntero)

la siguiente línea:

POKE(NETX_IO_CFG_ACCESS_KEY, ulKey);

es configurar el contenido de la dirección NETX_IO_CFG_ACCESS_KEY con el valor de "ulKey" otra vez, supongo que este código es solo para fines de ejemplo

probablemente deberías echar un vistazo a los punteros

enlace

la parte de punteros: punteros: una variable que almacena la dirección de otra variable se llama puntero

(int sin signo volátil " * este") (addr) el asterisco en esta línea es para decirle al compilador que se trata de un puntero ,

entonces el asterisco en la mendicidad es para desfragmentación (" * this one" (int * sin signo volátil)) por "addr"

deberíamos decirle al compilador que, esta dirección está almacenando o almacenará qué tipo de datos y aquí viene sin firma int

volátil es

  

Volatile le dice al compilador que no optimice nada que tenga que ver con   "addr"

puede tener una mejor comprensión desde aquí:

enlace

    
respondido por el Sabir Moglad
1

PEEK lee el contenido de un segmento de memoria de 32 bits * ubicado en la dirección addr (0x00100070 en su caso).

POKE establece el contenido de un segmento de memoria de 32 bits ubicado addr en val .

* Suponiendo que para su sistema / compilador unsigned int tiene 4 bytes de longitud.

    
respondido por el m.Alin

Lea otras preguntas en las etiquetas