En un archivo, defina la variable fuera del alcance de cualquier función (es decir, una variable global). Use el calificador de tipo volatile
para decirle al compilador que no optimice las lecturas porque el valor de esta variable podría cambiar en momentos impredecibles (por ejemplo, en el controlador de interrupciones).
volatile circular_buffer_type circularbuffer;
En el otro archivo, declare la variable como extern
, nuevamente fuera del alcance de cualquier función. Esto permite que el otro archivo acceda a la misma variable definida en el primer archivo. Alternativamente, puede hacer esta declaración en un archivo .h incluido en el otro archivo.
extern volatile circular_buffer_type circularbuffer;
Todos los accesos a esta variable en el código principal deben ser atomic para evitar la corrupción de variables. Por ejemplo, si su código principal realiza una lectura-modificación-escritura y la interrupción ocurre entre la lectura y la escritura, entonces la escritura del código principal sobrescribirá cualquier cambio que haya ocurrido en el controlador de interrupciones. Para evitar esta situación, puede desactivar las interrupciones antes de la lectura y volver a habilitarlas después de la escritura para que el acceso de lectura-modificación-escritura sea atómico.