Y ahora nuevamente me hiciste pensar xD.. Aunque el que deberia pensar es elgarbe, pero me gusta esto como va encaminado
..
Yo estuve viendo la arquitectura de los ARM mas que nada para meterme con ASM. Pero ya casi no me acordaba.
Respecto a la arquitectura:Lo primero que me acorde fue del: Load-Exclusive / Store-Exclusive , pero estaba seguro que en el ARMv7-m existia, pero en el ARMv6-m no existe.
Asi que me juego por DMB/DSB. ( Aunque no me queda muy en claro su funcionamiento y que gracias a eso tal ves estoy tirando esto al azar)
Y es lo unico que se me ocurre aparte de:
- desactivar las interrupciones
- modificar las prioridades
- O usar el SVC que al poseeria una mayor prioridad.
( Estos ultimos 2 ni se me ocurriria hacerlos, solo lo planteo como una posibilidad ).
Y ninguno sabria como implmentarlos sin irme por ASM. Y tampoco se si las opciones que di son en realidad lo que estas buscando. De todas formas yo me jugaba por LDREX/STREX aunque me la complicaste con el M0+
- deshabilitar interrupcion/es;
- modificar variable compartida;
- rehabilitar interrupcion/es;
alcanza para garantizar la no corrupción de la variable?
Si, pero con una salvedad, es que estemos hablando de interrupcion y programa principal. Y no estemos hablando de diferentes task como si estuviera un OS (en el que se vean involucradas otras fuentes a la corrupcion).
Como creo que no posee un OS entonces garantizaria la corrupcion de la variable, pero si preguntaste es por que hay alguna trampa ..
, como una excepcion pero que descarte en lo que dije antes, al quitar otras fuentes.
Respecto al software:Crear un mutex / semaforo para indicar que no puede acceder a los datos todavia. Pero esto me deja en un problema. Si uno activa el mutex y luego se entrar a la interrupcion ( el cual leeria el mutex ) como es posible que la interrupcion se vuelva a ejecutar luego de que salga de la misma y se reestablesca el mutex.
Tal ves tener una indicador (desde la interrupcion al ver activo el mutex) que se disparo la interrupcion y con eso en el programa principal finalizado el mutex poner un pending a la interrupcion en cuestion.
Mismo impacto que deshabilitar las interrupciones. Pero esta ves extensible a otro task/thread
PD: Me siento caminando en un campo minado..
PD2: Es mas feo cuando sos al que solamente le llegan preguntas y esperan que responda bien jeje. Pero igual lo que me importa es aprender.