C'est le registre qui doit être volatile. Pas son adresse.
En faisant (uint16*)(adresse_registre) tu enlève le volatile du registre.
Le code correct serait peut-être:
uint16val=*(volatileuint16*)adresse_registre;
(Ton code pourrait encore avoir le problème si tu a la même race condition deux fois de suite)
[^] # Re: Aucun !
Posté par Gof (site web personnel) . En réponse au journal Go et Rust, lequel est le remplaçant du C ?. Évalué à 3. Dernière modification le 12 septembre 2018 à 15:07.
C'est le registre qui doit être volatile. Pas son adresse.
En faisant
(uint16*)(adresse_registre)tu enlève le volatile du registre.Le code correct serait peut-être:
(Ton code pourrait encore avoir le problème si tu a la même race condition deux fois de suite)