AVR Puntero Atomicidad

3

En el AVR XMEGA, o en cualquier AVR, ¿es seguro realizar operaciones de puntero, como pasar por referencia y acceder a los punteros mientras las interrupciones están activadas? Sigo sintiendo que necesito envolver cada operación de puntero en una macro ATOMIC_BLOCK (). ¿Es esto necesario? Además, necesito copiar una estructura con 30 bytes de datos similares, ¿debería estar en un ATOMIC_BLOCK ()?

El bus de dirección AVR es de 16 bits, y toma dos ciclos para acceder a un puntero, ¿correcto?

    
pregunta zacharoni16

1 respuesta

4

¿Por qué te preocupan los punteros en particular? En realidad son solo variables como cualquier otra.

El problema clave con la concurrencia, como entre el código de no interrupción y el código de interrupción, es cuando tiene dos subprocesos concurrentes que acceden, o lo que es más importante, modifica la misma variable (ya sea una puntero o no). Esas son las variables compartidas que debes considerar proteger, especialmente si las operaciones en ellas no son intrínsecamente atómicas.

Las operaciones en variables no compartidas (o punteros o estructuras) no necesitan ningún tratamiento especial.

Si comparte un puntero entre subprocesos simultáneos, tenga en cuenta que cualquier dato al que apunte el puntero también debe considerarse "datos compartidos" y debe tener las mismas consideraciones.

    
respondido por el Dave Tweed

Lea otras preguntas en las etiquetas